【发布时间】:2019-08-28 18:10:11
【问题描述】:
社区, 我坚持在 docker 中运行量角器测试。请帮我解决我的问题。谢谢
这就是我想要做的。
- 我正在使用量角器 e2e 测试打包 Angular 应用程序
baseUrl: 'http://localhost:4200/',
seleniumAddress: 'http://172.18.0.2:4444/wd/hub/',
借助 Docker 文件生成 docker 映像
FROM node:12.8.1-alpine as build-step
WORKDIR /app
COPY package.json ./
RUN npm install
RUN npm install -g protractor@5.4.2
RUN apk add openjdk8
ENV PATH $PATH:/usr/lib/jvm/java-1.8-openjdk/bin
COPY . .
EXPOSE 4200 4444
CMD npm start
- 我正在运行 docker-compose 包含运行 selenium 网格容器(集线器和 chrome)和 dockerfile 上面
version: "3"
services:
hub:
container_name: hub
image: selenium/hub:3.141.59
privileged: true
ports:
- 4444:4444
environment:
- GRID_BROWSER_TIMEOUT=240000
- GRID_TIMEOUT=240000
chrome:
container_name: node-chrome
image: selenium/node-chrome:3.141.59
privileged: true
shm_size: 256M
depends_on:
- hub
environment:
- HUB_HOST=hub
- no_proxy=localhost
- HUB_PORT_4444_TCP_ADDR=hub
- HUB_PORT_4444_TCP_PORT=4444
testapp:
container_name: testapp
build: .
image: dneprokos/testapp
ports:
- "4200:4200"
depends_on:
- chrome
- hub
- 我正在尝试执行 protractor conf 文件命令以运行 e2e 测试。 (seleniumAddress: 'http://172.18.0.2:4444/wd/hub/')
docker container exec -it testapp sh // to attach
protractor ./e2e/protractor.conf.js // to run tests
注意事项:
首先我尝试使用 localhost 在容器内运行测试,但后来意识到它在容器内包含另一个主机。但是即使我更改了主机,它也没有解决问题。
另外,我尝试不运行网格容器,而是使用“webdriver-manager update”和“webdriver-manager start”命令。启动工作正常,但在测试启动期间会发生同样的问题。
您可能看起来我已经暴露了端口,所以我可以轻松地检查它在本地是否适用于 selenium 网格和测试应用程序。 只有一件事,如果我尝试在本地连接到“http://localhost:4444/wd/hub/”,它会显示以下异常:
"sessionId": null, “状态”:13, “价值”: { “类”:“org.openqa.grid.common.exception.GridException”, “错误”:“未知错误”, "message": "会话 [(null externalkey)] 不可用并且不在最后 1000 个终止会话中。\n活动会话是[]",
预期结果:应该开始试运行
实际结果:
[17:44:34] E/launcher - Error code: 135
[17:44:34] E/launcher - Error message: ECONNREFUSED connect ECONNREFUSED 172.18.0.2:4444
[17:44:34] E/launcher - Error: ECONNREFUSED connect ECONNREFUSED 172.18.0.2:4444
at ClientRequest.<anonymous> (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/http/index.js:238:15)
at ClientRequest.emit (events.js:203:13)
at Socket.socketErrorListener (_http_client.js:399:9)
at Socket.emit (events.js:203:13)
at emitErrorNT (internal/streams/destroy.js:91:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
at processTicksAndRejections (internal/process/task_queues.js:77:11)
From: Task: WebDriver.createSession()
at Function.createSession (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver.js:769:24)
【问题讨论】:
-
使用 URL 中的容器名称。对于我的设置,当我希望测试使用集线器时,我使用
seleniumAddress: 'http://hub:4444/wd/hub'并针对testapp运行测试我会使用--baseUrl=http://testapp:4200 -
另外,一旦你启动了你的环境,连接到集线器和 chrome 节点以确保一切准备就绪。您应该会看到一些关于节点尝试注册的消息,然后在节点成功注册到集线器后看到另一条消息。那里可能出了问题,导致它失败。
docker logs hub和docker logs node-chrome应该可以工作。 -
非常感谢!我已将容器名称添加为 URL,它已开始运行。
标签: docker docker-compose protractor devops selenium-grid