Docker量角器运行以E / launcher结尾-进程退出,错误代码为135

时间:2019-08-28 18:10:11

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

社区, 我对在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,其中包含运行上面的硒网格容器(集线器和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. 我正在尝试执行量角器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更新”和“ webdriver-manager启动”命令。启动工作正常,但是在测试启动过程中会发生相同的问题。

您似乎已经暴露了端口,因此我可以轻松地检查它在硒网格和测试应用程序中都可以在本地运行。 只有一件事,如果我尝试在本地连接到“ http://localhost:4444/wd/hub/”,它将显示以下异常:

“ sessionId”:null,   “状态”:13   “值”:{     “ class”:“ 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)

1 个答案:

答案 0 :(得分: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”启动角度应用程序。在另一种情况下,打开容器中的应用程序会遇到一些麻烦。