原來我錯了。我沒有測試我認爲正在測試的內容......由於Heroku的路由網格向不同的服務器發送請求,LiveServerTestCase在一臺機器上啓動了一臺Web服務器,Selenium完全連接到其他機器上。
通過更新Heroku的Procfile到:
web: python src/manage.py test --liveserver=0.0.0.0:$PORT
重寫DATABASES
設置爲指向測試數據庫和自定義鏈接到下面的測試套件轉輪(同樣的想法仍然成立:覆蓋setup_databases
所以它只能刪除/重新創建表,而不是整個數據庫),我能夠運行遠程測試。但是這更加晦澀/痛苦/不雅。仍在尋找更好的東西!對此感到抱歉。
(以下更新答案)
這裏是爲我工作的步驟:
heroku addons:add heroku-postgresql:dev
創建一個額外的,免費的Postgres數據庫
- 使用HerokuTestSuiteRunner類,你會發現here。
這個自定義的測試運行,您需要定義哪些如下典型DATABASES
格式TEST_DATABASES
設置。例如:
TEST_DATABASES = {
'default': dj_database_url.config(env='TEST_DATABASE_URL')
}
然後,有TEST_RUNNER
設置是一個Python路徑到哪裏HerokuTestSuiteRunner可以找到。
您現在應該可以使用給定的數據庫在Heroku上運行Django測試。這是一個非常快速的黑客攻擊......讓我知道如何改進/減少黑客行爲。請享用!
(下原來的答案)
一些相關的解決方案進行了討論here。正如你可以在Django docs中看到的那樣,「如果使用SQLite數據庫引擎,測試將默認使用內存數據庫」。
儘管這並沒有徹底地測試你在Heroku上使用的數據庫引擎(我仍然在尋找一種解決方案),但將數據庫引擎設置爲SQLite將至少允許您運行試驗。
查看上面鏈接的StackOverflow question的一些指針。至少有兩種方法:在強制SQLite作爲數據庫引擎之前測試if 'test' in sys.argv
,或者在測試中使用專用設置文件,然後使用--settings
選項將其傳遞到django manage.py test
。
感謝Greg - 使用SQLite並不是一個真正的選擇 - 我們遇到了一些可怕的問題,這些問題是隨着SQLite(沒有限制/一致性檢查)傳遞,隨後在現場爆發。目前的解決方案是將Heroku複製到VM中的位置(使用Vagrant)並在那裏運行。工作很好,迄今沒有災難。 –
感謝雨果,很高興知道。我不會使用SQLite進行測試,因爲(我在生產中使用Postgres)。爲什麼不添加一個額外的,免費的'heroku-postgresql:dev'數據庫到您的環境中,測試可以運行?從我可以收集的內容來看,可能會有多個相同插件的實例。 –
既然*是個好主意。我會試試看。 –