我设置功能测试使用Selenium为Django网站。我有一个夹具文件(users/fixtures/users.json
),并在另一个应用程序的功能测试中使用它(accounts
)。运行测试时,我还运行我的开发服务器以接受来自Selenium浏览器自动化的请求;我在相同的设置模块上运行./manage.py test
和./manage.py runserver
,以便两者都具有相同数据库的凭据。Django测试与硒不加载夹具
我accounts
测试失败加载users
夹具:
from django.test import TestCase
class AccountCreationTestCase(TestCase):
fixtures = ['users']
# Tests depending on user login follow.
# These tests are run via Selenium for browser automation.
这些测试成功,当我手动加载灯具到通过命令行的测试数据库,但他们失败了,否则,所以我知道他们是当它存在于数据库中时使用夹具数据,并且我也知道他们没有加载测试夹具。
回顾一下:我在定义测试数据库访问凭证的相同设置模块上运行./manage.py test
和./manage.py runserver
。如果夹具正在加载到测试数据库中,那么当它们通过Selenium运行时,这些数据应该可用于测试。
我错过了什么?
编辑1:对于上下文,我使用的是Django 1.8。另外,我使用Selenium来自动化PhantomJS,以便测试运行得更快。
编辑2:我只是做了一个更彻底的阅读Django文档,并发现我遇到两个问题。
第一个问题:Django的测试automatically prefix与test_
数据库名称,所以你必须确保你的测试服务器和你的Django测试由名称使用相同的数据库,就像这样:
DATABASES = {
'NAME': "test_db_name",
'TEST': {
'NAME': "test_db_name"
}
}
第二期:Django docs解释了Django在测试运行之间破坏了测试数据库。这会导致开发服务器失败,因为它需要存在数据库。 Django 1.8为测试运行器引入了--keepdb
选项,该选项将使数据库实例保持在测试之间。虽然这个标志确实允许服务器在测试数据库上运行,但我似乎仍然无法将该装置加载到该数据库中。这可能是由于使用了新标志造成的,新标志会根据加载测试数据库的方式显着改变测试行为。
看起来好像它可能工作(即使数据库本身在每次测试运行之间被破坏并创建,与内存数据库的连接仍可能持续存在)。我会试试看看我是否无法使用我的用例。 – Adam