如何在GitLab中通过dotnet test获取XUnit失败测试用例数
从dotnet test输出提取失败测试数的两种最简方法
方法一:直接解析命令行输出(grep+awk组合)
直接在dotnet test命令后串联处理逻辑,精准提取失败测试的数值:
dotnet test | grep -oP 'Failed:\s*\K\d+'
grep -oP:-o只输出匹配到的内容,-P启用Perl正则语法Failed:\s*\K\d+:匹配Failed:后的任意空白字符,\K用来忽略前面的匹配内容,只提取后面的数字
如果需要把结果存入变量供后续逻辑使用:
FAILED_COUNT=$(dotnet test | grep -oP 'Failed:\s*\K\d+') echo "失败测试用例数量:$FAILED_COUNT"
方法二:解析trx测试报告文件(xmllint工具)
先让dotnet test生成trx格式的测试报告:
dotnet test --logger "trx;LogFileName=test_results.trx"
再用xmllint解析XML格式的trx文件,提取失败数:
FAILED_COUNT=$(xmllint --xpath 'string(//Counters/@failed)' test_results.trx) echo "失败测试用例数量:$FAILED_COUNT"
trx文件里的<Counters>节点自带failed属性,直接通过XPath定位提取即可。
适配你GitLab脚本的优化版本
结合trx解析的方式,把你之前的脚本逻辑调整为:
- | dotnet test --logger "trx;LogFileName=$src/testresults/${CI_PIPELINE_ID}_${CI_JOB_ID}.trx" FAILED_COUNT=$(xmllint --xpath 'string(//Counters/@failed)' "$src/testresults/${CI_PIPELINE_ID}_${CI_JOB_ID}.trx") if [[ $FAILED_COUNT -gt 0 ]]; then echo "检测到$FAILED_COUNT个测试失败。" if [[ $browser == $skipBrowser ]]; then exit 2 fi exit 1 else echo "所有测试通过。" fi
内容的提问来源于stack exchange,提问作者DotNetDude
相关产品推荐
相关产品推荐

