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

4 浏览
0 Comments

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

我正在尝试向我的Django项目中添加一些selenium测试,但第二个测试总是以一个服务器错误(500)失败。由于两个测试完全相同,我想这一定与setUptearDown方法有关。能有人帮忙吗?谢谢。

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错误存在,并且没有正确加载任何内容。为什么会这样呢?

0
0 Comments

问题出现的原因是create_user()调用失败,在已存在的用户名上无法创建用户。解决方法是将create_user()移动到setUpClass()下面,并且启用日志以便查看错误信息。还有一个更基本的问题是,即使删除了登录代码,对browser.get的简单调用仍然会出现相同的错误。最后,通过启用测试服务器的调试模式,发现代码在数据库的一行上出现错误,该行是从迁移脚本中填充的,可能在第二次运行时没有被调用。可以尝试在迁移脚本中删除数据或进行其他处理。

0
0 Comments

问题出现的原因是使用Selenium进行测试时,使用了LiveServerTestCase,同时settings.py文件中有一行代码django_heroku.settings(locals())。移除这行代码后问题得到解决。

0
0 Comments

问题原因:在进行测试时,由于设置了DEBUG=False以更接近真实环境,导致无法显示错误信息。此外,出现了一个行不存在的错误,这是因为在迁移脚本中添加了该行,但是在第一个测试之后删除了所有数据,导致该行再也没有被添加进去。

解决方法:通过将DEBUG设置为True,可以显示错误信息。另外,在每个测试之前,需要重新运行迁移脚本以确保所需的行被添加进去。

代码示例:

# 设置DEBUG为True
DEBUG = True
# 运行迁移脚本
python manage.py migrate

这样一来,可以在运行测试时显示详细的错误信息,并且确保所需的行被正确添加进去,避免出现500服务器错误。

0