使用Java在Docker容器中运行Cucumber测试

时间:2019-04-16 11:46:08

标签: java selenium docker

问题陈述:云上有一个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

0 个答案:

没有答案