Текущие тесты написаны отдельными репозиториями в gitlab на cypress для vue spa для 12 различных приложений и одного nuxt universal.
Хочется регулярный прогон каждые 15-30 минут в 2-3 окружениях (production, development, current release), прогон на push, ругань в телеграмм при падении после пуша и останов регулярного запуска до фикса. Dashboard с текущим положением дел с разделением по окружению.
Автор: Кристин Джеквони (Kristin Jackvony) Оригинал статьи Перевод: Ольга Алифанова
Текстовое поле в приложении кажется таким обычным делом, однако это одна из наиболее важных вещей, которую мы можем протестировать. Почему? Потому что текстовые поля дают доступ к приложению и его базе данных. Валидация текстового поля – это то, что предотвращает появление в базе плохих данных. Эти данные могут вызвать разнообразные проблемы для пользователей и разработчиков. Валидация также предотвращает атаки межсайтового скриптинга и SQL-инъекции.
Я использую Selenium WebDriver не для целей тестирования, а как часть бизнес логики в вэб-приложении — когда приходит запрос на сервер (GET /run-selenium), то по его параметрам формируется некий адрес, который открывается с помощью FirefoxDriver'a.
Вот часть кода, которая грубо говоря передает то, что происходит с вэбрайвером
val firefoxBinary =newFirefoxBinary() firefoxBinary.addCommandLineOptions("--headless")
val firefoxOptions =newFirefoxOptions() firefoxOptions.setBinary(firefoxBinary)
val webDriver =newFirefoxDriver(firefoxOptions) webDriver.get(s"https://google.com") webDriver.manage().timeouts().pageLoadTimeout(5,TimeUnit.SECONDS) logger.info(s"Title: ${webDriver.getTitle}") webDriver.close()
Локально все отрабатывает, как надо. Но когда я запаковываю приложение в докер, то я получаю такую ошибку:
Error servicing request: GET /run-selenium from 172.17.0.1 {{ org.openqa.selenium.WebDriverException: java.net.ConnectException: Failed to connect to localhost/127.0.0.1:9340
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:92)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131)
at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:147)
at com.vidiq.seleniumkill.http.PublicRouter$$anonfun$httpService$1.applyOrElse(Router.scala:25)
at com.vidiq.seleniumkill.http.PublicRouter$$anonfun$httpService$1.applyOrElse(Router.scala:17)
at scala.PartialFunction$Lifted.apply(PartialFunction.scala:228)
at scala.PartialFunction$Lifted.apply(PartialFunction.scala:224)
at org.http4s.HttpRoutes$.$anonfun$of$2(HttpRoutes.scala:64)
at zio.RIO$.$anonfun$effectSuspend$1(RIO.scala:207)
at zio.internal.FiberContext.liftedTree1$1(FiberContext.scala:486)
at zio.internal.FiberContext.evaluateNow(FiberContext.scala:486)
at zio.internal.FiberContext.$anonfun$fork$1(FiberContext.scala:596)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
В качестве базового докер имэдажа я использую:
FROM openjdk:8-jre-alpine3.9 ARG firefox_ver=70.0 ARG geckodriver_ver=0.26.0
# Download and install deps RUN apk update && apk add curl curl-dev
RUN mkdir /opt/docker && chmod a=rwX /opt/docker
# Download and install Firefox RUN curl -fL -o /tmp/firefox.tar.bz2 https://ftp.mozilla.org/pub/firefox/releases/${firefox_ver}/linux-x86_64/en-GB/firefox-${firefox_ver}.tar.bz2 \
&& tar -xjf /tmp/firefox.tar.bz2 -C /tmp/ && mv /tmp/firefox /opt/docker
# Download and install geckodriver RUN curl -fL -o /tmp/geckodriver.tar.gz \ https://github.com/mozilla/geckodriver/releases/download/v${geckodriver_ver}/geckodriver-v${geckodriver_ver}-linux64.tar.gz \
&& tar -xzf /tmp/geckodriver.tar.gz -C /tmp/ && chmod +x /tmp/geckodriver && mv /tmp/geckodriver /opt/docker
ENV PATH="/opt/docker/firefox:${PATH}"
Кто может подсказать в где может быть причина подобного поведения селениума?
Я уже убедился, что linux user, из-под которого бежит докер имеет все права на выполнение фаерфокса и гекодрайвера, читал про совместимость версий селениума, вебрайвера и гекодрайвера и т д
2. Следующий запрос это значение берет из окружения, вставляет в тело запроса {{id}} обрабатывает и получает свой ответ.
Когда запрос 1 и 2 запускается руками, в окружение вписывается каждый раз новое значение id_izm - здесь вопросов нет
НО когда запускаешь RUNNER и там идет последовательный запуск 1 и 2 запроса, в переменную id_izm окружения в Environment не записываются новые значения id, получаемые от первого запроса. В Environment жестко остается последнее значение в поле id_izm от ручного запуска.
Подскажите, плиз, где найти информацию как запустить в RUNNER запись/перезапись переменных в окружение Environment , либо подскажите здесь : как это сделать
// пробовал и более сложный вариант скрипта, ничего не меняется