【发布时间】:2016-04-01 07:56:08
【问题描述】:
我正在使用 Selenium 为 Django 网站设置功能测试。我有一个夹具文件 (users/fixtures/users.json),并在另一个应用程序 (accounts) 的功能测试中使用它。在运行测试时,我还运行我的开发服务器来接受来自 Selenium 浏览器自动化的请求;我在同一个设置模块上运行 ./manage.py test 和 ./manage.py runserver,以便两者都拥有同一个数据库的凭据。
我的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 使用 test_ 测试数据库名称 automatically prefix,因此您必须确保您的测试服务器和您的 Django 测试使用同一个名称的数据库,如下所示:
DATABASES = {
'NAME': "test_db_name",
'TEST': {
'NAME': "test_db_name"
}
}
第二个问题:Django docs 解释说 Django 在测试运行之间破坏了测试数据库。这将导致开发服务器失败,因为它需要存在数据库。 Django 1.8 为测试运行器引入了--keepdb 选项,它将在测试之间保留数据库实例。虽然此标志确实允许服务器在测试数据库上运行,但我似乎仍然无法将固定装置加载到该数据库中。这可能是由于使用了新标志造成的,它确实在加载测试数据库方面显着修改了测试的行为。
【问题讨论】:
标签: django selenium django-testing