运行 来自 JAR 文件的 docker 容器中的硒测试

Run selenium tests in docker container from JAR file

我目前有一个包含 3 个服务的 docker-compose 文件:

我想使用容器的 Dockerfile 中的命令对我的 JAR 文件(包含这些测试)进行硒测试(使用 JUnit)。我考虑过使用 selenium-server.jar 但我似乎无法弄清楚 exec 命令应该是什么(在 Dockerfile 中)。

谁能帮帮我?

我的docker-compose.yml:

version: "3"
services:
  chrome:
    image: selenium/node-chrome:4.1.4-20220427
    shm_size: 2gb
    container_name: chrome
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443
  selenium-hub:
    image: selenium/hub:4.1.4-20220427
    container_name: selenium-hub
    ports:
      - "4442:4442"
      - "4443:4443"
      - "4444:4444"
  application:
    build: .
    container_name: application
    ports:
      - "4447:4447"
    depends_on:
      - chrome

还有我的 Dockerfile:

#
# Build stage
#
FROM maven:3.6.0-jdk-11-slim AS build
COPY src .
COPY pom.xml .
RUN mvn -f pom.xml jar:test-jar

#
# Package stage
#
FROM openjdk:11-jre-slim
COPY --from=build target/playground-project-selenium-1.0-SNAPSHOT-tests.jar /usr/local/lib/demo.jar
ADD selenium-server.jar .
ENTRYPOINT exec java -jar selenium-server.jar --ext /usr/local/lib/demo.jar:selenium/node-chrome standalone --port 4447
EXPOSE 4447

经过 trial-and-error 的一些会话后,我设法回答了我自己的问题。我创建了一个包含所有测试、资源和依赖项的 so-called Fat-JAR(使用 maven 程序集插件),我使用 JUnit 4 和 org.junit.runner.JUnitCore class 到 运行一个测试套件。

现在,我的 selenium UI 测试完全 运行 在 Docker 容器中使用 selenium hub 和 chrome 驱动程序在单独的容器中。