Django:第二次 Selenium 测试失败,出现 500 服务器错误
Django: Second Selenium Test Failing with 500 Server Error
我正在尝试向我的 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()
编辑:我应该提到第一个测试工作正常并且 returns 成功。第一个测试失败后的任何测试都会在启动时出现 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 错误并且没有正确加载任何内容。为什么会这样?
很难说没有看到完整的回溯,但是,这可能是因为 create_user()
调用 - 它无法使用现有用户名创建用户。尝试将 create_user()
移动到 setUpClass()
下:
class UserTest(LiveServerTestCase):
@classmethod
def setUpClass(cls):
User.objects.create_user(username='user', password='pass', email='test@test.com')
super(UserTest, cls).setUpClass()
def setUp(self):
self.browser = webdriver.Chrome()
在一些代码之后能够向我显示错误(测试套件设置 DEBUG=False
以更接近模拟真实环境)by setting DEBUG=True
然后我看到代码被轰炸了,因为那里没有系统预期的行。这是因为我在迁移脚本中添加了这一行。这样就通过了第一次测试,因为所有的迁移脚本在开始测试的时候都是运行,但是第一次测试之后所有的数据都被删除之后,就再也不会添加了。
也许,它会对某些人有用。
我在使用 LiveServerTestCase
对 Selenium 进行测试时遇到问题,调试是正确的,所有关于最后的答案都是好的。
但是,早些时候我尝试在 Heroku 上部署我的网络应用程序,我的 settings.py:
中有这样一行代码
django_heroku.settings(locals())
但是当我删除它时,我没有发现这个错误。
我正在尝试向我的 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()
编辑:我应该提到第一个测试工作正常并且 returns 成功。第一个测试失败后的任何测试都会在启动时出现 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 错误并且没有正确加载任何内容。为什么会这样?
很难说没有看到完整的回溯,但是,这可能是因为 create_user()
调用 - 它无法使用现有用户名创建用户。尝试将 create_user()
移动到 setUpClass()
下:
class UserTest(LiveServerTestCase):
@classmethod
def setUpClass(cls):
User.objects.create_user(username='user', password='pass', email='test@test.com')
super(UserTest, cls).setUpClass()
def setUp(self):
self.browser = webdriver.Chrome()
在一些代码之后能够向我显示错误(测试套件设置 DEBUG=False
以更接近模拟真实环境)by setting DEBUG=True
然后我看到代码被轰炸了,因为那里没有系统预期的行。这是因为我在迁移脚本中添加了这一行。这样就通过了第一次测试,因为所有的迁移脚本在开始测试的时候都是运行,但是第一次测试之后所有的数据都被删除之后,就再也不会添加了。
也许,它会对某些人有用。
我在使用 LiveServerTestCase
对 Selenium 进行测试时遇到问题,调试是正确的,所有关于最后的答案都是好的。
但是,早些时候我尝试在 Heroku 上部署我的网络应用程序,我的 settings.py:
中有这样一行代码django_heroku.settings(locals())
但是当我删除它时,我没有发现这个错误。