У меня есть проект 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')))
Итак, я смог исключить проблему с циклом ci / селена.
Затем я решил, что проблема может быть вызвана сельдереем.На странице входа опрашивается сельдерей, чтобы проверить, обрабатывается ли конкретная задача.В производственном процессе сервер сельдерея вызывается и возвращает свой ответ как обычно.В сценарии с круговым циклом / модульным тестом время ожидания этого вызова истекло.
Один из диагностических тестов, который я пробовал, состоял в простом возвращении значения True на ранней стадии из проверки обработки задачи сельдерея - и, если я это сделаю, circle-ciвремя не истекает, и тесты выполняются должным образом.
Есть ли у кого-нибудь какие-либо идеи, как сделать так, чтобы Circle-Ci и сельдерей играли хорошо, с помощью сценария юнит-теста - подразумевая, что я не хочуtest для проверки живого сервера сельдерея.
Ниже приведен пример кода тестового примера, который я использую из документации django-selenium.Спасибо за вашу помощь.
Сельдерей - документация django
Django - документация по селену
Selenium - код тестирования модуля 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()