python - Django:第二次 Selenium 测试因 500 服务器错误而失败

标签 python django selenium testing functional-testing

我尝试向我的 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='<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="225647515662564751560c414d4f" rel="noreferrer noopener nofollow">[email protected]</a>')
        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 错误,并且没有正确加载任何内容。为什么会这样?

最佳答案

在一些代码之后能够向我显示错误(测试套件设置 DEBUG=False 以更接近地模拟真实环境)by setting DEBUG=True

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

关于python - Django:第二次 Selenium 测试因 500 服务器错误而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31011933/

相关文章:

python - 在 Twisted 客户端中生成 header

html - 为什么不总是使用 enctype ="multipart/form-data"?

python - Webdriver.get(url) 打开 Firefox 但不打开 URL

python - 将代码转换为语法突出显示的 html

python - 如何在 Django 中只打印当前登录的用户数据?

用于自定义模型的 Django CMS Draft/Live 系统

django - 如何在 Django 中调用 forms.Select 的 render_option()?

javascript - Capybara 与异步 JavaScript 的集成测试

python - 如何使用 Python Django 在本地和远程服务器上运行 Selenium 测试?

python - 显示 Python 中底层 C++ 进程的进度