问题陈述:云上有一个linux vm,我们用于运行回归测试(测试源代码位于vm中),因此我们只需要创建一个安装了网格的docker容器,然后调用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
调试步骤:
我检查是否在所有依赖项,源和lib所在的正确目标文件夹中,打开了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,硒是否兼容版本
我还将共享我的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