Постановка проблемы: в облаке есть linux vm, который мы используем для запуска наших регрессионных тестов (исходный код теста находится в vm), поэтому нам просто нужно создать контейнер докера с установленной сеткой, тогда мыВызов mvn clean test для запуска тестов в сетке
Я пробовал два разных подхода к этой проблеме
1) встраивание всего исходного кода и зависимостей в jar-файлы, копирование его в контейнер с использованием сопоставления томов изатем запустив его, используя
java -cp websiteautomation-1.0.jar:websiteautomation-1.0-tests.jar:libs/* -Dcucumber.options=classpath:features org.junit.runnner.JUnitCore runner.CucumberRunner
Проблема, с которой я работаю при таком подходе каждый раз:
Error: Could not find or load main class org.junit.runnner.JUnitCore
Caused by: java.lang.ClassNotFoundException: org.junit.runnner.JUnitCore
ШАГИ ОТЛАДКИ:
Я проверилЯ был в нужной целевой папке, где находятся все зависимости, источники и библиотеки, открыл папку libs и увидел, что там есть junit-4.12.jar
2) Я попробовал еще один подход, так как у меня уже были файлы проектав виртуальной машине
создать сетку концентратора селена в виртуальной машине
создать рабочий каталог в создаваемом контейнере
сопоставить его с директивой проектагде находится мой pom.xml
Запустите команду maven для запуска тестов
mvn clean test -Dtest=CucumberRunner -Dbrowser.name=chrome -Denv.type=uat
Проблема, с которой я работаю при таком подходе, - это (фрагменты ошибок ниже)
org.openqa.selenium.remote.UnreachableBrowserException: Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure.
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
tests_1 | System info: host: '57b902c11df9', ip: '172.20.0.2', os.name: 'Linux', os.arch: 'amd64', os.version: '4.9.125-linuxkit', java.version: '11.0.3'
tests_1 | Driver info: driver.version: RemoteWebDriver
Caused by: java.net.ConnectException: Failed to connect to localhost/127.0.0.1:4444
tests_1 | at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.java:247)
Caused by: java.net.ConnectException: Connection refused (Connection refused)
ШАГИ ОТЛАДКИ:
1) Сетка работает, maven загружает мои зависимости, запускает тест и выдает вышеуказанные ошибки, не может найти мою сетку
2) Проверено, что мой удаленный драйвер настроен нормально
Platform platform = Platform.fromString(os.toUpperCase());
else if(os.contains("linux")) {
System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir") + "/drivers/chrome/chromedriver_linux");
ChromeOptions options = new ChromeOptions();
options.setCapability("platform", platform);
options.addArguments("--kiosk");
driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"),options);
break;
}
3) Проверено, что мой HUB, chrome и firefox, selenium - все совместимые версии
Я также поделюсь своим Dockerfile, docker-composeфайл и pom.xml,
Мне нужен еще один набор глаз, будет очень полезно, если вы сможете понять, что не так, я теперь одержим, чтобы исправить это и заставить его работать
Dockerfile
FROM maven:3.6.0-jdk-8 AS build
WORKDIR /usr/share/wow
ENTRYPOINT mvn clean test -Dtest=CucumberRunner -Dbrowser.name=chrome -Denv.type=uat
docker-compose.yml
version: "3"
services:
hub:
image: selenium/hub:3.141.59 #elgalu/selenium
networks:
- private
ports:
- 4444:4444
- 5900:5900
environment:
PORT: 4444
GRID_BROWSER_TIMEOUT: 300000
GRID_TIMEOUT: 300000
GRID_CLEAN_UP_CYCLE: 300000
GRID_UNREGISTER_IF_STILL_DOWN_AFTER: 300000
SE_OPTS: -browserTimeout 86400 -timeout 100
chrome:
image: selenium/node-chrome:3.141.59 #elgalu/selenium
networks:
- private
depends_on:
- hub
environment:
HUB_PORT_4444_TCP_ADDR: hub
HUB_PORT_4444_TCP_PORT: 4444
GRID_BROWSER_TIMEOUT: 300000
GRID_TIMEOUT: 300000
SCREEN_WIDTH: 1600
SCREEN_HEIGHT: 1200
volumes:
- /dev/shm:/dev/shm # Mitigates the Chromium issue described at https://code.google.com/p/chromium/issues/detail?id=519952
firefox:
image: selenium/node-firefox:3.141.59 #elgalu/selenium
networks:
- private
depends_on:
- hub
environment:
HUB_PORT_4444_TCP_ADDR: hub
HUB_PORT_4444_TCP_PORT: 4444
GRID_BROWSER_TIMEOUT: 300000
GRID_TIMEOUT: 300000
SCREEN_WIDTH: 1600
SCREEN_HEIGHT: 1200
volumes:
- /dev/shm:/dev/shm
tests:
image: vinodsiragaon/wow:v3
depends_on:
- chrome
- firefox
- hub
working_dir: /usr/share/wow
environment:
- BROWSER=chrome
- HUB_HOST=hub
- HUB_PORT:4444
- CUCUMBER_OPTIONS=classpath:features
volumes:
- /Users/vinodsiragaon/Documents/workspace/WOW-Automation-Web:/usr/share/wow
- ./output:/usr/share/wow/target/cucumber-reports
networks:
private:
driver: bridge