【问题标题】:How do I debug a Testcafe browser running in a testcafe/testcafe docker container?如何调试在 testcafe/testcafe docker 容器中运行的 Testcafe 浏览器?
【发布时间】:2019-08-25 11:18:46
【问题描述】:

在 Page 类中测试了 React 应用的登录功能:

  async login(t) {
    console.log('starting login...');
    debugger;
    this.logBrowserMessages(t);

    await this.loginModal({ visibilityCheck: true });
    await t
      .expect(this.loginModal.visible)
      .ok()
    // then log the user in etc... 

以及测试,在本地运行时通过但在容器中失败

test.requestHooks(mock)('user can log in', async t => {

  await page.login(t);

  // Make sure test user's orders render.
  await t.expect(page.orders.childNodeCount).gt(1, { timeout: 10000 });

测试在本地通过但在容器中运行时失败(登录不起作用)。

当我在本地运行测试时,它会按预期进行调试:

testcafe chrome --inspect-brk=9230 ./tests/login.test.js --skip-js-errors

进程node_modules/testcafe/lib/cli 出现在我的chrome://inspect/#devices 中,正如预期的那样。

但是,当我在 testcafe docker 容器中运行 testcafe 时,它​​不会使用以下任何命令进行调试:

docker run --expose 9230 -p 9230:9230 -e BASIC_AUTH_USER -e BASIC_AUTH_PASS -e NODE_ENV=docker -e TEST_USER -e TEST_PASS --shm-size=1gb -v `pwd`:/tests -v `pwd`/screenshots/docker:/screenshots testcafe/testcafe 'chromium --no-sandbox' --inspect-brk=0.0.0.0:9230 -S -s '/screenshots' --skip-js-errors /tests/**/login.test.js

docker run --expose 9230 -p 9230:9230 -e \"NODE_PATH=/opt:/opt/testcafe/node_modules:/tests/node_modules\" -e BASIC_AUTH_USER -e BASIC_AUTH_PASS -e NODE_ENV=docker -e TEST_USER -e TEST_PASS --shm-size=1gb -v `pwd`:/tests -v `pwd`/screenshots/docker:/screenshots testcafe/testcafe 'chromium --no-sandbox' --inspect-brk=0.0.0.0:9230 -S -s '/screenshots' --skip-js-errors /tests/**/login.test.js

docker run --expose 9230 -p 9230:9230 -e BASIC_AUTH_USER -e BASIC_AUTH_PASS -e NODE_ENV=docker -e TEST_USER -e TEST_PASS --shm-size=1gb -v `pwd`:/tests -v `pwd`/screenshots/docker:/screenshots testcafe/testcafe 'chromium --no-sandbox' --inspect-brk=127.0.0.1:9230 -S -s '/screenshots' --skip-js-errors /tests/**/login.test.js

docker run --expose 9230 -p 9230:9230 -e \"NODE_PATH=/opt:/opt/testcafe/node_modules:/tests/node_modules\" -e BASIC_AUTH_USER -e BASIC_AUTH_PASS -e NODE_ENV=docker -e TEST_USER -e TEST_PASS --shm-size=1gb -v `pwd`:/tests -v `pwd`/screenshots/docker:/screenshots testcafe/testcafe --inspect-brk=0.0.0.0:9230 --browsers 'chromium --no-sandbox' -S -s '/screenshots' --skip-js-errors /tests/**/login.test.js

docker run --expose 9230 -p 9230:9230 -e \"NODE_PATH=/opt:/opt/testcafe/node_modules:/tests/node_modules\" -e BASIC_AUTH_USER -e BASIC_AUTH_PASS -e NODE_ENV=docker -e TEST_USER -e TEST_PASS --shm-size=1gb -v `pwd`:/tests -v `pwd`/screenshots/docker:/screenshots testcafe/testcafe 'chromium --no-sandbox' -S -s '/screenshots' --skip-js-errors --inspect-brk=9230 /tests/**/login.test.js

我正在使用的容器是否存在一些我不知道的限制?我之前调试过运行在 Docker 容器中的 Node 进程,我知道可以做到。但那是前一阵子了。我错过了什么吗?

【问题讨论】:

    标签: javascript node.js docker functional-testing testcafe


    【解决方案1】:

    您可以使用NODE_OPTIONS 环境变量来启用远程调试:

    docker run -it --rm -p 9229:9229 -e NODE_OPTIONS="--inspect-brk=0.0.0.0:9229" -v /host/path/to/tests:/tests testcafe/testcafe 'chromium --no-sandbox' /tests/test.js
    

    如果您不使用docker-machine,您可以在浏览器中打开http://localhost:9229/json 并导航到devtoolsFrontendUrl 属性中指定的DevTools URL。

    否则,使用 docker-machine ip 命令获取 Docker 虚拟机的 IP 地址并打开 http://${DOCKER_MACHINE_IP}:9229/json 以获取 DevTools URL。

    【讨论】:

    • 听起来 testcafe 在 docker 容器中运行时忽略了--inspect-brk选项,对吗?
    • 是的,Docker 镜像使用了不正确的 TestCafe 二进制文件,它没有考虑 V8 标志(包括 --inspect-brk)。我已经创建了一个关于它的错误报告,并将尝试在当前的开发冲刺中修复它:github.com/DevExpress/testcafe/issues/3646
    • 我收到一个错误Starting inspector on 0.0.0.0:9229 failed: address already in use,即使它没有被使用。我做了一些研究,人们说要做killall -9 node,但它返回了No matching processes were found。我无法调试。有什么想法吗?
    【解决方案2】:

    如果您在 Mac 上进行开发,一种可能性是您需要将主机指定为 host.docker.internal 而不是 127.0.0.1,以便主机上正在运行的服务对容器可见。这可能是本地和容器化测试运行之间的差异之一。

    https://docs.docker.com/docker-for-mac/networking/

    【讨论】:

    • 我认为这是从容器中的进程到主机的网络。你是在建议--inspect-brk=host.docker.internal:9230吗?
    猜你喜欢
    • 1970-01-01
    • 2019-02-23
    • 2018-12-10
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    • 2022-09-27
    相关资源
    最近更新 更多