首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker组合不会启动Selenium Grid

Docker组合不会启动Selenium Grid
EN

Stack Overflow用户
提问于 2018-08-13 21:18:09
回答 1查看 679关注 0票数 1

我有下面的Docker撰写文件

代码语言:javascript
复制
version: "3"

services:
  selenium-hub:
    image: selenium/hub
    container_name: selenium-hub
    ports:
      - "4444:4444"
  chrome:
    image: selenium/node-chrome
    depends_on:
      - selenium-hub
    environment:
      - HUB_PORT_4444_TCP_ADDR=selenium-hub
      - HUB_PORT_4444_TCP_PORT=4444
  firefox:
    image: selenium/node-firefox
    depends_on:
      - selenium-hub
    environment:
      - HUB_PORT_4444_TCP_ADDR=selenium-hub
      - HUB_PORT_4444_TCP_PORT=4444
  devenv:
    build: .
    ports:
      - "4444:4444"

当我运行Docker撰写文件时,没有:

代码语言:javascript
复制
  devenv:
    build: .
    ports:
      - "4444:4444"

它工作得很好,Selenium Grid将成功地站起来。然而,当我介绍这个服务时,网格将无法运行,测试将尝试运行,但当然没有网格,因此它将失败。

我哪里出问题了?

在构建时调用Docker文件。

代码语言:javascript
复制
FROM maven
RUN apt update
COPY . /

RUN mvn clean test

错误消息: org.openqa.selenium.remote.UnreachableBrowserException:无法启动新会话。可能的原因是远程服务器或浏览器启动失败的地址无效。

EN

回答 1

Stack Overflow用户

发布于 2022-04-17 18:21:55

我建议你遵循以下步骤-

先决条件:

  • 爪哇-8
  • 码头桌面客户端
  • UI测试项目

让我们假设您的测试项目使用TestNG运行它的selenium脚本。

步骤1:修改BaseTest或Test类以初始化RemoteWebDriver。

将以下代码替换或添加到BaseTest或浏览器驱动程序初始化的任何位置。

代码语言:javascript
复制
 @BeforeTest
  public void beforeTestSetup() throws MalformedURLException {

    MutableCapabilities dc = new ChromeOptions();

    host = System.getenv("HUB_HOST") != null ? System.getenv("HUB_HOST") : "hub";

    driver.set(new RemoteWebDriver(new URL("http://" + host + ":4444/wd/hub"), dc));

    logger.info("Remote Chrome Driver Started...");

    driver.get().manage().deleteAllCookies();
    driver.get().manage().window().maximize();

    }

步骤2:将Maven插件添加到pom.xml中以创建可执行的jars。

我们需要添加下面的插件,以便为我们的测试项目生成一个可执行的jar。

  • maven编译器插件
  • maven-依赖-插件
  • maven-jar插件

例如,查看下面的片段-

代码语言:javascript
复制
<build>
  <finalName>dockerized</finalName>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.5.1</version>
      <configuration>
        <compilerVersion>1.8</compilerVersion>
        <source>1.8</source>
        <target>1.8</target>
      </configuration>
    </plugin>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-dependency-plugin</artifactId>
      <executions>
        <execution>
          <id>copy-dependencies</id>
          <phase>prepare-package</phase>
          <goals>
            <goal>copy-dependencies</goal>
          </goals>
          <configuration>
            <outputDirectory>
              ${project.build.directory}/libs
            </outputDirectory>
          </configuration>
        </execution>
      </executions>
    </plugin>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <version>3.1.0</version>
      <executions>
        <execution>
          <goals>
            <goal>test-jar</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.18.1</version>
      <configuration>
        <suiteXmlFiles>
          <suiteXmlFile>testng.xml</suiteXmlFile>
        </suiteXmlFiles>
        <argLine>
          -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
        </argLine>
      </configuration>
    </plugin>
  </plugins>
</build>

healthcheck.sh步骤3:添加一个脚本

在运行测试之前,需要使用healthcheck脚本来检查以接收测试请求。

代码语言:javascript
复制
echo "Checking if hub is ready - $HUB_HOST"

while [ "$( curl -s http://$HUB_HOST:4444/wd/hub/status | jq -r .value.ready )" != "true" ]
do
    sleep 1
done

步骤4:添加run.sh脚本

代码语言:javascript
复制
java -cp dockerized.jar:dockerized-tests.jar:libs/* org.testng.TestNG testng.xml

docker-compose.yml步骤5:创建一个文件

代码语言:javascript
复制
version: "3"
services:
  hub:
    image: selenium/hub:4.1.3
    ports:
      - "4442:4442"
      - "4443:4443"
      - "4444:4444"

  chrome:
    image: selenium/node-chrome:4.1.3
    shm_size: '3gb'
    depends_on:
      - hub
    links:
      - hub
    environment:
      - SE_EVENT_BUS_HOST=hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443
      - VNC_NO_PASSWORD=1

  test-run:
    build: .
    container_name: test-run
    depends_on:
      - chrome
    links:
      - hub
    environment:
      - MODULE=testng.xml
    volumes:
      - ./src/test/resources/results:/app

步骤6:创建Dockerfile以指示您的Docker映像的创建

我们将在多阶段构建中使用多个基本图像来创建最终图像。第一阶段(名为package)将生成可执行的jars,第二阶段(名为testrun)将运行这些可执行jars。

请注意每个阶段所使用的不同的基本图像。

代码语言:javascript
复制
FROM maven:3.6.1-jdk-8-alpine AS package

RUN apk add --update \
    curl \
    jq

RUN mkdir -p /app
WORKDIR /app

COPY pom.xml                          .
COPY healthcheck.sh                   .
RUN mvn -e -B dependency:resolve

COPY src                              ./src
RUN mvn verify --fail-never -DskipTests

WORKDIR /app/

ENTRYPOINT ["/bin/sh"]
CMD ["healthcheck.sh"]

FROM openjdk:8-jre-alpine AS testrun

RUN mkdir -p /jar
WORKDIR /jar/

COPY --from=package /app/target/dockerized.jar         .
COPY --from=package /app/target/dockerized-tests.jar   .
COPY --from=package /app/target/libs                        ./libs
COPY testng.xml                                             .
COPY run.sh                                                 .

WORKDIR /jar/

ENV HUB_HOST=hub
ENV MODULE=testng.xml

ENTRYPOINT ["/bin/sh"]
CMD ["run.sh"]

步骤7:最后,运行您的对接者-撰写

在项目根文件夹中打开Powershell并运行以下命令。

代码语言:javascript
复制
***docker-compose up --build***

示例项目链接- https://gitlab.com/suryajit7/my-blog-topics

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51830701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档