【问题标题】:Docker protractor run ends with E/launcher - Process exited with error code 135Docker 量角器运行以 E/launcher 结束 - 进程退出并出现错误代码 135
【发布时间】:2019-08-28 18:10:11
【问题描述】:

社区, 我坚持在 docker 中运行量角器测试。请帮我解决我的问题。谢谢

这就是我想要做的。

  1. 我正在使用量角器 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
  1. 我正在运行 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
  1. 我正在尝试执行 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 hubdocker logs node-chrome 应该可以工作。
  • 非常感谢!我已将容器名称添加为 URL,它已开始运行。

标签: docker docker-compose protractor devops selenium-grid


【解决方案1】:

感谢评论,我解决了我的问题。只需在 protractor.conf 中使用容器名称作为应用程序基本 URL 和 Selenium Hub URL,如下所示

'http://hub:4444/wd/hub'

'baseUrl=http://testapp:4200'

另外,我发现我需要使用以下命令“ng serve --host 0.0.0.0 --disable-host-check”来启动一个 Angular 应用程序。还有一种情况,在容器中打开应用会有些麻烦。

【讨论】:

    猜你喜欢
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    相关资源
    最近更新 更多