我正在为.NET 6项目在GitLab上建立一个管道。我运行测试,然后在coverage.cobertura.xml文件中生成代码覆盖率报告。下面是测试作业脚本:
test:
only:
- master
- /^feature/.*$/
stage: test
dependencies:
- build-application
variables:
CONFIGURATION: "Debug"
COVERAGE_FLAG: "XPlat Code Coverage"
LOGGER_FLAG: "junit;LogFilePath=$CI_PROJECT_DIR/junit/junit-test-result.xml;MethodFormat=Class;FailureBodyFormat=Verbose"
TEST_PROJECTS: "./tests/*Tests/*.csproj"
script:
- 'dotnet test $TEST_PROJECTS
-c $CONFIGURATION
-r $CI_PROJECT_DIR/cobertura
--collect:"$COVERAGE_FLAG"
--test-adapter-path:.
--logger:"$LOGGER_FLAG"'
- chmod +x ./scripts/print-dotnet-coverage.sh
- ./scripts/print-dotnet-coverage.sh $CI_PROJECT_DIR/cobertura
coverage: /TOTAL_COVERAGE=(\d+.\d+)/
artifacts:
when: on_success
paths:
- $CI_PROJECT_DIR/cobertura/*/coverage.cobertura.xml
- $CI_PROJECT_DIR/junit/junit-test-result.xml
reports:
coverage_report:
coverage_format: cobertura
path: $CI_PROJECT_DIR/cobertura/*/coverage.cobertura.xml
junit:
- $CI_PROJECT_DIR/junit/junit-test-result.xml痛苦的是,test命令不会产生任何关于总覆盖率的输出,所以我从新创建的coverage.cobertura.xml文件中提取它,并使用下面的脚本将其打印到stdout
#!/usr/bin/env sh
REPORTS_DIR="${1}"
coverage=0
count=0
for i in $(find "$REPORTS_DIR" -name '*.xml');
do
printf "Found coverage report: %s\n" "$i"
coverage="$(xmllint --xpath 'string(/coverage/@line-rate)' ${i})"
count=$((count + 1))
done;
printf "Found a total of %i report(s)\n" "$count"
coverage=$(echo "$coverage * 100" | bc) <-- error here
printf "TOTAL_COVERAGE=%2.4f\n" "$(echo "${coverage}")"因为覆盖率是0.8875,所以我得把它乘以100。但我有个错误
./scripts/print-dotnet-coverage.sh: 12: bc: not found有没有人知道如何修复这个错误,或者如何达到我的目标--在GitLab CI中将覆盖率乘以100 --而不使用bc?
谢谢!
发布于 2022-06-10 17:56:38
有关设置代码覆盖率报告的示例项目,请参见以下示例:dotnet-示例
https://stackoverflow.com/questions/72572938
复制相似问题