我正在尝试向我的 Django 项目添加一些 selenium 测试,但第二个测试总是失败并出现 Server Error (500) 。由于两个测试的开始完全相同,我认为它一定与 setUp 和 tearDown 方法有关。有人可以帮忙吗?谢谢。
from django.test import LiveServerTestCase
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from django.contrib.auth.models import User
from selenium.webdriver.support.ui import Select
class UserTest(LiveServerTestCase):
def setUp(self):
User.objects.create_user(username='user', password='pass', email='test@test.com')
self.browser = webdriver.Chrome()
def tearDown(self):
self.browser.quit()
def changeSelector(self, browser, value):
mealSelector = Select(browser.find_element_by_id('mealsToday'))
mealSelector.select_by_visible_text(str(value))
def login_user(self):
self.browser.get(self.live_server_url)
self.timeout(5)
self.assertIn('Animals', self.browser.title)
# Log in
login_button = self.browser.find_element_by_id('login').click()
self.browser.find_element_by_id('id_username').send_keys('user')
self.browser.find_element_by_id('id_password').send_keys('pass')
def timeout(self, time_to_sleep):
import time
time.sleep(time_to_sleep)
def test_one_test(self):
self.login_user()
def test_two_test(self):
self.login_user()
编辑:我应该提到第一个测试工作正常并返回成功。第一个测试失败后的任何测试都会在启动时出现 500 错误。
编辑 2:我在运行测试时看到的内容:
======================================================================
FAIL: test_two_test (functional_tests.tests.UserTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/functional_tests/tests.py", line 34, in test_two_test
self.login_user()
File "/functional_tests/tests.py", line 20, in login_user
self.assertIn('Animals', self.browser.title)
AssertionError: 'Animals' not found in 'http://localhost:8081/'
即使是这个最小的代码也会失败:
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from django.contrib.auth.models import User
from selenium.webdriver.support.ui import Select
class UserTest(StaticLiveServerTestCase):
def setUp(self):
self.browser = webdriver.Chrome()
def tearDown(self):
self.browser.quit()
def login_user(self):
self.browser.get(self.live_server_url)
self.assertIn('Animals', self.browser.title)
def test_one_test(self):
self.login_user()
def test_two_test(self):
self.login_user()
第二次在第二种方法中调用 get 时,我可以看到出现了 500 错误并且没有正确加载任何内容。为什么会这样?
请您参考如下方法:
在一些代码之后能够向我显示错误(测试套件设置 DEBUG=False 以更接近地模拟真实环境)by setting DEBUG=True
然后我看到代码被轰炸了,因为那里没有系统预期的行。这是因为我在迁移脚本中添加了这一行。这通过了第一次测试,因为所有迁移脚本在测试开始时运行,但在第一次测试后所有数据被删除后,就再也不会添加了。
