Django:第二个Selenium测试失败,出现500服务器错误
Django:第二个Selenium测试失败,出现500服务器错误
我正在尝试向我的Django项目中添加一些selenium测试,但第二个测试总是以一个服务器错误(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) # 登录 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'在'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
以更接近真实环境,导致无法显示错误信息。此外,出现了一个行不存在的错误,这是因为在迁移脚本中添加了该行,但是在第一个测试之后删除了所有数据,导致该行再也没有被添加进去。
解决方法:通过将DEBUG
设置为True
,可以显示错误信息。另外,在每个测试之前,需要重新运行迁移脚本以确保所需的行被添加进去。
代码示例:
# 设置DEBUG为True DEBUG = True # 运行迁移脚本 python manage.py migrate
这样一来,可以在运行测试时显示详细的错误信息,并且确保所需的行被正确添加进去,避免出现500服务器错误。