使用 Gitlab CI 在 Cypress.io 上的一个条目中对并行运行进行分组

Grouping parallel runs in one entry on Cypress.io using Gitlab CI

我有一个配置了 Gitlab CINx 项目。我的项目包含 2 种 E2E 测试 - 主项目和 Storybook 的测试。测试本身工作正常,但我使用 cypress.io 仪表板收集 E2E 结果。

我将项目配置为记录它们并且它有效,但我希望将它们保存为一个 运行,但是有 2 组 x 2 个浏览器(Main/Storybook x Chrome/Firefox ).记录也工作正常,cypress.io 仪表板正确识别 2 个浏览器和组,但我只得到一个浏览器的结果(Chrome 有一个结果用于 Main,一个用于 Firefox for Storybook - 第二种浏览器是在过滤器中可见,但它们的结果为空 - 请查看屏幕截图)。

我尝试了 https://docs.cypress.io/guides/guides/parallelization.html

中的一些标志和配置

不幸的是,无论我尝试什么,总是会出现某种错误,例如:

You passed the --parallel flag, but we do not parallelize tests across different environments. This machine is sending different environment parameters than the first machine that started this parallel run. The existing run is: https://dashboard.cypress.io/projects/qwerty/runs/44 In order to run in parallel mode each machine must send identical environment parameters such as:

  • specs
  • osName
  • osVersion
  • browserName
  • browserVersion (major) This machine sent the following parameters: { "osName": "linux", "osVersion": "Ubuntu - 20.04", "browserName": "Firefox", "browserVersion": "80.0.1", "specs": [ "src/integration/app/app.spec.ts" ] } https://on.cypress.io/parallel-group-params-mismatch

每组只有一个浏览器通过,第二个浏览器出现以下错误。

这些是我在 package.json 中的脚本:

# 1st --parallel flag for nx and 2nd after -- for Cypress directly
# $CYPRESS_RECORD_KEY - key provided by cypress.io
# $CI_ID - <branch-name>-<commit-hash> - e.g. my-new-branch-qweqtwerwtreyzsxfc4123dxfv

"e2e:ci": "nx e2e main-e2e --prod --headless --parallel --record --key $CYPRESS_RECORD_KEY --ci-build-id $CI_ID --group MainWeb -- --parallel",
"e2e:ci:chrome": "yarn e2e:ci --browser=chrome",
"e2e:ci:firefox": "yarn e2e:ci --browser=firefox",

"e2e:storybook:ci": "nx e2e storybook-e2e --prod --headless --parallel --record --key $CYPRESS_RECORD_KEY --ci-build-id $CI_ID --group Storybook -- --parallel",
"e2e:storybook:ci:chrome": "yarn e2e:storybook:ci --browser=chrome",
"e2e:storybook:ci:firefox": "yarn e2e:storybook:ci --browser=firefox"

这是我的 .gitlab-ci.yml(仅 e2e 阶段部分):

E2E Main-Web - Chrome:
  stage: e2e
  script:
    - yarn e2e:ci:chrome

E2E Main-Web - Firefox:
  stage: e2e
  script:
    - yarn e2e:ci:firefox

E2E Storybook - Chrome:
  stage: e2e
  script:
    - yarn e2e:storybook:ci:chrome

E2E Storybook - Firefox:
  stage: e2e
  script:
    - yarn e2e:storybook:ci:firefox

我不确定这里出了什么问题。我尝试了很多配置、标志、解决方案(甚至在 Gitlab 上并行化),但总是有问题...

当然我为60s设置了cypress.io > Project Settings > Parallelization > Run Completion Delay

我认为答案在于您分享的 Cypress 错误:

You passed the --parallel flag, but we do not parallelize tests across different environments.

您正在触发两个并行 运行,每个并行 运行 设置两个浏览器。正如错误所说,这不是预期的 - 每个并行 运行 应该只有 一个 浏览器。

这种情况下的解决方案很简单:只需配置四个组,每个测试和浏览器类型一组。

这是它的样子:

"e2e:ci": "nx e2e main-e2e --prod --headless --parallel --record --key $CYPRESS_RECORD_KEY --ci-build-id $CI_ID -- --parallel",
"e2e:ci:chrome": "yarn e2e:ci --browser=chrome --group 'MainWeb Chrome' ",
"e2e:ci:firefox": "yarn e2e:ci --browser=firefox --group 'MainWeb Firefox' ",

"e2e:storybook:ci": "nx e2e storybook-e2e --prod --headless --parallel --record --key $CYPRESS_RECORD_KEY --ci-build-id $CI_ID -- --parallel",
"e2e:storybook:ci:chrome": "yarn e2e:storybook:ci --browser=chrome --group 'Storybook Chrome'",
"e2e:storybook:ci:firefox": "yarn e2e:storybook:ci --browser=firefox --group 'Storybook Firefox'"