我正在使用 Selenium 为 Django 网站设置功能测试。我有一个固定文件(users/fixtures/users.json
)并在另一个应用程序的功能测试中使用它(accounts
)。运行测试时,我还运行我的开发服务器来接受来自 Selenium 浏览器自动化的请求;我跑./manage.py test
and ./manage.py runserver
在同一设置模块上,以便两者都具有同一数据库的凭据。
My 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
and ./manage.py runserver
在定义测试数据库访问凭据的同一设置模块上。如果将装置加载到测试数据库中,则当测试通过 Selenium 运行时,该数据应该可供测试使用。
我缺少什么?
编辑 1:对于上下文,我使用的是 Django 1.8。另外,我使用 Selenium 来自动化 PhantomJS,以便测试可以运行得更快。
编辑 2:我刚刚更彻底地阅读了 Django 文档,发现了我遇到的两个问题。
第一期:Django 测试自动前缀 https://docs.djangoproject.com/en/1.9/ref/settings/#test数据库名称与test_
,因此您必须确保您的测试服务器和 Django 测试按名称使用相同的数据库,如下所示:
DATABASES = {
'NAME': "test_db_name",
'TEST': {
'NAME': "test_db_name"
}
}
第二期:Django 文档 https://docs.djangoproject.com/en/1.9/topics/testing/overview/#the-test-database解释 Django 在测试运行之间破坏测试数据库。这将导致开发服务器失败,因为它需要数据库的存在。 Django 1.8 引入了--keepdb
测试运行程序的选项将在测试之间保持数据库实例。虽然此标志确实允许服务器在测试数据库上运行,但我似乎仍然无法将装置加载到该数据库中。这可能是由于使用新标志造成的,该标志确实显着修改了测试在加载测试数据库的方式方面的行为。