【发布时间】:2021-01-13 09:33:13
【问题描述】:
我有使用 selenium 编写的跨浏览器测试。因为我想在多个平台上测试多个浏览器,所以我使用 docker 虚拟化和 selenium 网格。我可以在没有 docker 的情况下通过 localhost:4444 使用 docker-compose.yml 执行我的测试
version: "3"
services:
hub:
image: selenium/hub
ports:
- "4444:4444"
environment:
GRID_MAX_SESSION: 16
GRID_BROWSER_TIMEOUT: 3000
GRID_TIMEOUT: 3000
chrome:
image: selenium/node-chrome
container_name: web-automation_chrome
depends_on:
- hub
environment:
HUB_PORT_4444_TCP_ADDR: hub
HUB_PORT_4444_TCP_PORT: 4444
NODE_MAX_SESSION: 4
NODE_MAX_INSTANCES: 4
volumes:
- /dev/shm:/dev/shm
ports:
- "9001:5900"
firefox:
image: selenium/node-firefox
container_name: web-automation_firefox
depends_on:
- hub
environment:
HUB_PORT_4444_TCP_ADDR: hub
HUB_PORT_4444_TCP_PORT: 4444
NODE_MAX_SESSION: 2
NODE_MAX_INSTANCES: 2
volumes:
- /dev/shm:/dev/shm
ports:
- "9002:5900"
opera:
image: selenium/node-opera
container_name: web-automation_opera
depends_on:
- hub
environment:
HUB_PORT_4444_TCP_ADDR: hub
HUB_PORT_4444_TCP_PORT: 4444
NODE_MAX_SESSION: 2
NODE_MAX_INSTANCES: 2
volumes:
- /dev/shm:/dev/shm
ports:
- "9003:5900"
我刚刚用 maven 执行了我的测试,它们会成功。然后我计划将我的浏览器 JUnit 测试也容器化并创建了这个 Dockerfile:
FROM openjdk:11 as build
WORKDIR /workspace/app
COPY .git .git
COPY mvnw .
COPY .mvn .mvn
COPY wait-for-it.sh .
RUN ["chmod", "+x", "wait-for-it.sh"]
COPY pom.xml .
COPY src src
RUN ./wait-for-it.sh hub:4444 -- ./mvnw clean package
FROM openjdk:11
VOLUME /tmp
COPY --from=build /workspace/app/target/*.jar app.jar
这也应该可以正常工作并将这部分添加到我的docker-compose.yml:
app:
build: .
ports:
- "80:8080"
depends_on:
- "hub"
只要我运行docker-compose up,maven 就会成功构建测试,并且 selenium 网格设置成功,但我收到以下错误:
[ERROR] loginUserNotExistentFirefox Time elapsed: 0.033 s <<< ERROR!
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'
System info: host: '7e67c412b3c0', ip: '172.17.0.2', os.name: 'Linux', os.arch: 'amd64', os.version: '4.19.121-linuxkit', java.version: '11.0.9.1'
Driver info: driver.version: RemoteWebDriver
at org.seleniumtests.frontendtests.tests.TestLogin.loginUserNotExistentFirefox(TestLogin.java:29)
Caused by: java.net.UnknownHostException: hub
at org.seleniumtests.frontendtests.tests.TestLogin.loginUserNotExistentFirefox(TestLogin.java:29)
这就是我计划从我的app 容器访问服务的方式。
driver = new RemoteWebDriver(new URL("http://hub:4444/wd/hub"),
DesiredCapabilities.operaBlink());
【问题讨论】:
-
Failed to connect to localhost/127.0.0.1:4444- 没有尝试访问hub,您似乎没有正确配置主机名。 -
但是我哪里没有正确配置主机名?在我的测试中,我只是尝试达到
http://localhost:4444/wd/hub,当我删除测试版本并手动docker-compose -f docker-compose.yml up -d然后mvn clean install时,测试运行得非常好。 -
你的意思是如果你在外部 compose网络运行测试?
localhost:4444在该网络之外工作,因为ports: - "4444:4444"会从您主机上的容器中公开该端口,但您需要在网络内部使用服务名称 (hub) 作为主机名. -
好的,我将案例中的 URL 更改为
driver = new RemoteWebDriver(new URL("http://hub:4444/wd/hub"),现在我收到了未知主机异常
标签: docker docker-compose selenium-grid docker-networking