当 2 个测试用例失败时,Gitab CI 管道中的测试标记为通过
Tests in Gitab CI pipeline marked as passed when 2 tests cases fail
我们有一个在 Gitlab 中管理的项目,具有 CI 用于构建和测试的管道(pytest,Google 测试)。 Google 测试中有两三个测试用例失败。但是 Gitlab 认为测试阶段是成功的。是因为成功率超过90%(任意值)?如果我们没有获得 100% 的成功,有没有办法让这个阶段(以及整个管道)失败?
这是管道摘要的屏幕截图:
阶段的yml脚本如下:
test_unit_test:
stage: test
needs: ["build", "build_unit_test"]
image: $DOCKER_IMAGE
rules:
- if: '$CI_PIPELINE_SOURCE != "merge_request_event"'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
script: |
ZIPNAME=`cat _VERSION_.txt`
./scripts/gitlab-ci/stage-unittests.sh test_unit_test_report.xml $ZIPNAME
artifacts:
reports:
junit: test_unit_test_report.xml
expire_in: 1 week
感谢您的帮助。
问候。
Gitlab CI/CD 工作不关心什么 脚本区域在做什么(所以他们不看,例如,测试通过百分比)。唯一用于确定作业通过或失败的是 exit codes and the allow_failure
关键字。
before_script
、script
、after_script
段的每条命令执行后,Gitlab Runner检查命令的退出码是否为0
.如果它非零,则认为该命令失败,如果作业的 allow_failure
关键字未设置为 true
,则作业失败。
因此,对于您的工作,即使 测试 失败,脚本仍以某种方式存在,退出代码为 0,这意味着命令本身已成功完成。这种情况下的命令是:
ZIPNAME=$(cat _VERSION_.txt)
./scripts/gitlab-ci/stage-unittests.sh test_unit_test_report.xml $ZIPNAME
注意: 我用 $(command)
语法解释 here 替换了你的反引号 '`',它做同样的事情(执行这个命令)但是有与“command”相比的一些优势包括嵌套和更容易在 markdown 中使用,其中“”表示代码格式。
因此,由于您正在调用脚本 (./scripts/gitlab-ci/stage-unittests.sh
) 来 运行 您的测试,该脚本本身成功完成,因此作业成功完成。看看那个脚本,看看你是否能说出为什么它成功完成,即使测试失败。
我们有一个在 Gitlab 中管理的项目,具有 CI 用于构建和测试的管道(pytest,Google 测试)。 Google 测试中有两三个测试用例失败。但是 Gitlab 认为测试阶段是成功的。是因为成功率超过90%(任意值)?如果我们没有获得 100% 的成功,有没有办法让这个阶段(以及整个管道)失败?
这是管道摘要的屏幕截图:
阶段的yml脚本如下:
test_unit_test:
stage: test
needs: ["build", "build_unit_test"]
image: $DOCKER_IMAGE
rules:
- if: '$CI_PIPELINE_SOURCE != "merge_request_event"'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
script: |
ZIPNAME=`cat _VERSION_.txt`
./scripts/gitlab-ci/stage-unittests.sh test_unit_test_report.xml $ZIPNAME
artifacts:
reports:
junit: test_unit_test_report.xml
expire_in: 1 week
感谢您的帮助。 问候。
Gitlab CI/CD 工作不关心什么 脚本区域在做什么(所以他们不看,例如,测试通过百分比)。唯一用于确定作业通过或失败的是 exit codes and the allow_failure
关键字。
before_script
、script
、after_script
段的每条命令执行后,Gitlab Runner检查命令的退出码是否为0
.如果它非零,则认为该命令失败,如果作业的 allow_failure
关键字未设置为 true
,则作业失败。
因此,对于您的工作,即使 测试 失败,脚本仍以某种方式存在,退出代码为 0,这意味着命令本身已成功完成。这种情况下的命令是:
ZIPNAME=$(cat _VERSION_.txt)
./scripts/gitlab-ci/stage-unittests.sh test_unit_test_report.xml $ZIPNAME
注意: 我用 $(command)
语法解释 here 替换了你的反引号 '`',它做同样的事情(执行这个命令)但是有与“command”相比的一些优势包括嵌套和更容易在 markdown 中使用,其中“”表示代码格式。
因此,由于您正在调用脚本 (./scripts/gitlab-ci/stage-unittests.sh
) 来 运行 您的测试,该脚本本身成功完成,因此作业成功完成。看看那个脚本,看看你是否能说出为什么它成功完成,即使测试失败。