我有一个django项目,使用StaticLiveServerTestCase编写了单元测试,如下面的示例代码所示。我正在使用Selenium执行测试,并且在我的本地计算机上成功运行。但是,当circle-ci执行测试时,会出现超时错误。
2019-03-28 15:34:44,872 DEBUG selenium.webdriver.remote.remote_connection POST http://127.0.0.1:56804/session/sessid/url {"url": "http://localhost:37402/ja/accounts/login/", "sessionId": "sessid"}
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: timeout
(Session info: chrome=67.0.3396.99)
(Driver info: chromedriver=2.40.565383 (76257d1ab79276b2d53ee976b2c3e3b9f335cde7),platform=Linux 4.4.0-141-generic x86_64)
起初,我认为错误是由于硒和circle-ci引起的,所以我将webdriver.get()命令更改为调用google.com而不是自己的网站,然后circle-ci容器成功调用了google。
self.web_driver.get('%s%s' % (self.live_server_url, reverse('login')))
因此,我能够排除Circ-ci /硒的问题。
接下来,我认为此问题可能是由芹菜引起的。在登录页面上,正在对celery进行轮询,以检查是否正在处理特定任务。在生产中,将调用celery服务器并正常返回其响应。在circle-ci /单元测试方案中,此调用超时。
我尝试过的一项诊断测试是在芹菜任务处理检查的早期就简单地返回True-如果这样做,Circle-ci不会超时并且测试可以正确执行。
有人通过单元测试场景有什么想法,如何使circle-ci和celery很好地玩耍-暗示我不希望单元测试检查现场celery服务器。
下面是django-selenium文档中使用的示例测试用例代码。感谢您的帮助。
Django - Selenium Documentation
硒-Django单元测试代码
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.selenium = WebDriver()
cls.selenium.implicitly_wait(300)
def test_login(self):
self.selenium.get('%s%s' % (self.live_server_url, '/login/'))
username_input = self.selenium.find_element_by_name("username")
username_input.send_keys('myuser')
password_input = self.selenium.find_element_by_name("password")
password_input.send_keys('secret')
self.selenium.find_element_by_xpath('//input[@value="Log in"]').click()