如何在 Gitlab CI 中捕获结构化的 xUnit 测试输出?
Posted
技术标签:
【中文标题】如何在 Gitlab CI 中捕获结构化的 xUnit 测试输出?【英文标题】:How to capture structured xUnit test output in Gitlab CI? 【发布时间】:2019-12-25 17:43:16 【问题描述】:我正在 Gitlab CI 上的 .NET Core 代码库上运行自动化测试。这些测试的唯一输出是包含大量垃圾的控制台,因此很难准确查看哪些测试失败了。
有没有办法从 xUnit 获取结构化测试输出,使 Gitlab 可以处理文件并显示特定测试的结果,就像使用 JUnit 一样?
【问题讨论】:
【参考方案1】:首先,将JUnitTestLogger nuget 包添加到您的测试项目中:
dotnet add package JUnitTestLogger
接下来,修改你的测试命令:
dotnet test --logger "junit;LogFileName=MyProject.xml"
最后,修改你的.gitlab-ci.yml
文件指定输出路径:
test:
...
artifacts:
reports:
junit: ./MyProject.xml
【讨论】:
我不确定它是否改变,但我不得不使用“juni;LogFilePath=MyProject.xml” - LogFilePATH 不是 LogFileNAME。【参考方案2】:-
添加
JUnitTestLogger
NuGet 包
使用测试命令,例如:dotnet test --logger "junit;LogFilePath=path_to_XML_file"
修改.gitlab-ci.yml
文件(看我的例子)。您必须使用参数:when
、paths
、reports
...
stages:
...
- tests
variables:
LOGFILEPATH: /builds/myname/myrepository.api.tests/JUnitTestLogFile.xml ...
test_job:
stage: tests
script:
- dotnet test --logger "junit;LogFilePath="$LOGFILEPATH
artifacts:
when: always
paths:
- $LOGFILEPATH
reports:
junit: $LOGFILEPATH
【讨论】:
如果路径不是绝对路径,这将不起作用,您需要更改为LogFilePath=../"$LOGFILEPATH
将.xml文件放在项目文件之外,这样您才能正确收集它。您可以修改您的评论以警告人们吗?浪费了一些时间弄清楚...以上是关于如何在 Gitlab CI 中捕获结构化的 xUnit 测试输出?的主要内容,如果未能解决你的问题,请参考以下文章
在 Script 部分的 .gitlab-ci.yml 中调用 GO 二进制文件并捕获响应
如何使用 gitlab-ci.yml 在 gitlab 中更新 JSON 文件的内容?