原来我错了。我没有测试我认为正在测试的东西......由于 Heroku 的路由网格正在向不同的服务器发送请求,LiveServerTestCase 正在一台机器上启动一个 Web 服务器,而 Selenium 则完全连接到其他机器。
通过将 Heroku Procfile 更新为:
web: python src/manage.py test --liveserver=0.0.0.0:$PORT
覆盖DATABASES
指向测试数据库的设置,并自定义链接到下面的测试套件运行器(同样的想法仍然成立:覆盖setup_databases
,以便它只删除/重新创建表,而不是整个数据库),我能够远程运行测试。但这更加hacky/痛苦/不雅。还在寻找更好的东西!很抱歉造成混乱。
(下面的更新答案)
以下是对我有用的步骤:
- 使用 Heroku 工具带创建一个额外的免费 Postgres 数据库
heroku addons:add heroku-postgresql:dev
- 使用您可以在此处找到的HerokuTestSuiteRunner类。
此自定义测试运行程序要求您定义TEST_DATABASES
遵循典型DATABASES
格式的设置。例如:
TEST_DATABASES = {
'default': dj_database_url.config(env='TEST_DATABASE_URL')
}
然后,将TEST_RUNNER
设置设置为可以找到 HerokuTestSuiteRunner 的 Python 路径。
您现在应该能够使用给定的数据库在 Heroku 上运行 Django 测试。这是一个非常快速的黑客攻击......让我知道如何改进/减少黑客攻击。享受!
(下面的原始答案)
这里讨论了一些相关的解决方案。正如您在Django 文档中所读到的,“[当]使用 SQLite 数据库引擎时,测试将默认使用内存数据库”。
虽然这并没有彻底测试您在 Heroku 上使用的数据库引擎(我仍在寻找可以做到这一点的解决方案),但将数据库引擎设置为 SQLite 至少可以让您运行测试。
有关一些提示,请参阅上面链接的 StackOverflow问题。至少有两种方法:if 'test' in sys.argv
在强制 SQLite 作为数据库引擎之前进行测试,或者在测试中使用专用的设置文件,然后您可以django manage.py test
使用该--settings
选项将其传递给。