我正在尝试为我的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错误存在并且没有正确加载。为什么会这样?
答案 0 :(得分:2)
在一些代码能够向我显示错误之后(测试套件设置DEBUG=False
以更接近地模拟真实的环境)by setting DEBUG=True
然后我看到代码是轰炸,因为系统没有预期的行。这是因为我在迁移脚本中添加了这一行。这通过了第一个测试,因为所有迁移脚本都是在测试开始时运行的,但是在第一次测试后删除所有数据后,它永远不会再次添加。
答案 1 :(得分:1)
如果没有看到完整的回溯,很难说,但是,可能是因为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()
答案 2 :(得分:0)
也许对某人有用。
我在使用LiveServerTestCase
使用Selenium进行测试时遇到问题,Debug为True,关于最后答案的所有内容都可以。
但是,早些时候,我尝试在Heroku上部署Web应用程序,而我的settings.py中有这样的代码行:
django_heroku.settings(locals())
但是当我删除它时,我没有发现此错误。