На Circle Ci - проблема тайм-аута селенового теста с сельдереем - PullRequest
0 голосов
/ 29 марта 2019

У меня есть проект 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()
...