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

时间:2015-06-23 19:36:43

标签: python django selenium testing functional-testing

我正在尝试为我的Django项目添加一些selenium测试,但是第二个测试总是失败并且Server Error (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)
        # 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错误存在并且没有正确加载。为什么会这样?

3 个答案:

答案 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())

但是当我删除它时,我没有发现此错误。