我有一个部署到Heroku的应用程序,我希望能够在目标环境中部署后运行测试套件.我正在使用Heroku Postgres附加组件,这意味着我只能访问单个数据库.我无权创建新数据库,这反过来意味着标准的Django测试命令失败,因为它无法创建test_*数据库.
$ heroku run python manage.py test
Running `python manage.py test` attached to terminal... up, run.9362
Creating test database for alias 'default'...
Got an error creating the test database: permission denied to create database
Run Code Online (Sandbox Code Playgroud)
有没有办法解决?
Gre*_*sky 12
事实证明我错了.我没有测试我认为正在测试的内容......由于Heroku的Routing Mesh正在向不同的服务器发送请求,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
此自定义测试运行器要求您定义TEST_DATABASES
遵循典型DATABASES
格式的设置.例如:
TEST_DATABASES = {
'default': dj_database_url.config(env='TEST_DATABASE_URL')
}
Run Code Online (Sandbox Code Playgroud)
然后,将该TEST_RUNNER
设置设置为可以找到HerokuTestSuiteRunner的Python路径.
您现在应该能够使用给定的数据库在Heroku上运行Django测试.这是一个非常快速的黑客...让我知道如何改进/减少hackish.请享用!
(原答案如下)
这里讨论了一些相关的解决方案.正如您可以在Django文档中读到的那样,"使用SQLite数据库引擎时,测试将默认使用内存数据库".
虽然这并没有彻底测试你在Heroku上使用的数据库引擎(我还在寻找能够解决这个问题的解决方案),但是将数据库引擎设置为SQLite至少可以让你运行测试.
有关指针,请参阅上面链接的StackOverflow 问题.至少有两种方法:if 'test' in sys.argv
在强制SQLite作为数据库引擎之前进行测试,或者在测试中使用专用设置文件,然后可以django manage.py test
使用该--settings
选项传递给该文件.
归档时间: |
|
查看次数: |
3337 次 |
最近记录: |