Skip to main content
 首页 » 编程设计

python之Django:第二次 Selenium 测试失败,出现 500 服务器错误

2024年08月25日29EasonJim

我正在尝试向我的 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

然后我看到代码被轰炸了,因为那里没有系统预期的行。这是因为我在迁移脚本中添加了这一行。这通过了第一次测试,因为所有迁移脚本在测试开始时运行,但在第一次测试后所有数据被删除后,就再也不会添加了。