2017-05-05 31 views
8

我已經爲我的Django應用程序編寫了一系列測試,並且希望在我的生產數據庫的副本上運行它們。如何在生產數據庫的副本上運行Django測試?

至於我可以告訴大家,要做到這一點,最好的方法是使用fixture loading就像這樣:

  • 運行manage.py dumpdata -o app.dump
  • 移動導致app.dump文件在[應用程序名稱]一個燈具目錄文件夾
  • 我django.test.TestCase子類指定一個「燈具」類屬性

然而,這種方法很麻煩。我有多個應用程序,併爲每個應用程序運行manage.py dumpdata,並且每次我想測試我的應用程序時手動移動Fixtures文件都是一件痛苦的事情。

是否有更簡單的方法來自動生成我的整個生產數據庫的副本並測試我的Django應用程序?

+1

這隻適用於小型網站。如果我知道有幾GB的數據,你認爲需要多長時間才能設置測試? – e4c5

+0

幸運的是,我的網站非常小。 – Sam

回答

3

一般情況下,不鼓勵對現場數據庫或現場數據庫的副本進行測試。爲什麼?因爲測試需要可預測。當你複製實時數據庫時,輸入變得不可預知。第二個問題是你不能在現場測試,所以你需要克隆數據。這對於超過幾MB的任何東西都是緩慢的。

即使DB很小,dumpdata後跟loaddata也不是這樣。這是因爲dumpdata默認以JSON格式導出,這種格式具有很大的生成開銷,更不用說使數據文件非常龐大。使用loaddata導入更慢。

製作克隆的唯一現實方法是使用內置導出/導入機制的數據庫引擎。在sqlite的情況下,只是複製數據庫文件。對於mysql,它是SELECT INTO OUTFILE,然後是LOAD DATA INFILE。對於postgresql,它是COPY TO,其次是COPY FROM等等。

所有這些導出/導入命令都可以使用django中提供的低級連接對象來執行,因此可以用來加載燈具。

+0

感謝您的回覆,e4c5。基本上我聽到的是我應該找到另一種方式來做我想做的事情。我已經將問題作爲單獨的問題發佈在這裏,以防萬一你有這些想法:http://stackoverflow.com/questions/43876310/how-should-i-test-a-database-driven-django-cms-for-404 -errors – Sam

0

你沒有提到你正在使用的Django的版本,但是看一下1.11文檔:

不清楚from the 1.11 docs about fixture loading for tests他們是否也會在FIXTURE_DIRS中查找。所以這可能無法完全解決您的問題。

相關問題