【问题标题】:Django: Second Selenium Test Failing with 500 Server ErrorDjango:第二次 Selenium 测试因 500 服务器错误而失败
【发布时间】:2015-09-09 19:01:06
【问题描述】:

我正在尝试向我的 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 错误在那里并且没有正确加载。为什么会这样?

【问题讨论】:

    标签: python django selenium testing functional-testing


    【解决方案1】:

    经过一些代码可以显示错误(测试套件设置DEBUG=False 以更接近模拟真实环境)by setting DEBUG=True

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

    【讨论】:

      【解决方案2】:

      如果没有看到完整的回溯,很难说,但这可能是因为 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()
      

      【讨论】:

      • 很抱歉没有回溯——这很难,因为我没有得到任何测试——只有 500 个结果。我不知道如何获得回溯。有什么想法吗?
      • @skaz 您在运行测试时在控制台上看到了什么?您是否配置了日志记录?
      • 我将编辑我的帖子并向您展示我所看到的。我没有配置日志记录 - 我正在做一个教程,但还没有走到那一步。
      • 我发现很难找到 django 的类文档。当我用谷歌搜索“LIveServerTestCase 文档”时,我总是会看到一些教程,比如解释类是如何工作的,但在任何地方都找不到实际的类定义。这在任何地方都存在吗?谢谢。
      • 这里发生了一些更基本的事情 - 即使我删除了登录代码,对 browser.get 的简单调用也会失败并出现同样的错误。
      【解决方案3】:

      也许,它对某人有用。

      我在使用 LiveServerTestCase 对 Selenium 进行测试时遇到问题,Debug 是 True,所有关于最后的答案都是 OK。

      但是,之前我尝试在 Heroku 上部署我的 Web 应用程序,我的 settings.py 中有这样一行代码:

      django_heroku.settings(locals())
      

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

      【讨论】:

        猜你喜欢
        • 2017-10-05
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 2022-08-10
        • 2018-01-02
        • 1970-01-01
        相关资源
        最近更新 更多