如何创建可被Azure Pipeline PublishTestResult@2读取的自定义测试结果XML
如何在Azure Pipeline中用最简XML格式发布自定义测试结果
问题场景
我需要在Azure Pipeline中发布自定义测试结果XML,但现有方案多针对NUnit等单元测试框架,格式冗余。目前已将外部工具的命令行输出(示例如下)解析为包含name和result属性的TestResultEntry列表,需生成能被PublishTestResult@2任务识别的最简XML,用于流水线发布测试结果。
外部工具命令行输出示例:
SDCI_TC_0034: ......[Passed] SDCI_TC_0035: .................[Passed] SDCI_TC_0306: .[Skipped] SDCI_TC_0036: ......[Passed] SDCI_TC_0037: ......[Passed] SDCI_TC_0038: ......[Passed] SDCI_TC_0039: ..[Passed] SDCI_TC_0040: ..[Passed] SDCI_TC_0041: ....[Passed] SDCI_TC_0043: .....[Passed] SDCI_TC_0044: ..........[Passed] SDCI_TC_0045: ...[Passed] SDCI_TC_0046: ....[Passed] SDCI_TC_0047: ......[Passed] SDCI_TC_0049: .....[Passed] SDCI_TC_0312: .[Skipped]
最简兼容XML格式
无需照搬NUnit的复杂结构,选择JUnit或NUnit的最简格式即可被PublishTestResult@2识别,以下是两种方案:
方案1:JUnit最简格式(推荐,结构更简洁)
<testsuite tests="16" failures="0" skipped="2"> <testcase name="SDCI_TC_0034" status="passed"/> <testcase name="SDCI_TC_0035" status="passed"/> <testcase name="SDCI_TC_0306" status="skipped"/> <!-- 其余测试用例依次添加 --> </testsuite>
- 核心要求:根节点为
<testsuite>,需指定tests(总用例数)、failures(失败数)、skipped(跳过数)属性;子节点<testcase>需包含name(测试名称)和status(状态,小写:passed/failed/skipped)。
方案2:NUnit最简格式
<test-run> <test-suite> <test-case name="SDCI_TC_0034" result="Passed"/> <test-case name="SDCI_TC_0306" result="Skipped"/> <!-- 其余测试用例依次添加 --> </test-suite> </test-run>
- 核心要求:根节点
<test-run>下包含<test-suite>,子节点<test-case>需包含name和result(状态,首字母大写:Passed/Failed/Skipped)。
生成XML的脚本示例(PowerShell)
假设已将外部工具输出解析为$testResults数组,每个元素包含Name和Result属性,用以下脚本生成JUnit格式的XML:
# 统计测试结果数量 $total = $testResults.Count $failed = ($testResults | Where-Object { $_.Result -eq "Failed" }).Count $skipped = ($testResults | Where-Object { $_.Result -eq "Skipped" }).Count # 构建XML内容 $xml = @" <testsuite tests="$total" failures="$failed" skipped="$skipped"> "@ foreach ($test in $testResults) { # 将状态转为JUnit要求的小写格式 $status = $test.Result.ToLower() $xml += " <testcase name=`"$($test.Name)`" status=`"$status`"/>`n" } $xml += "</testsuite>" # 保存到文件 $xml | Out-File -FilePath "./custom-test-results.xml" -Encoding utf8
Azure Pipeline任务配置
在流水线中添加PublishTestResult@2任务,指定对应的格式和结果文件:
- task: PublishTestResults@2 inputs: testResultsFormat: 'JUnit' # 如果用NUnit格式则改为'NUnit' testResultsFiles: './custom-test-results.xml' failTaskOnFailedTests: true # 可选:若有失败测试,让任务失败终止流水线 testRunTitle: '外部工具批量测试结果'
内容的提问来源于stack exchange,提问作者Sharku
相关产品推荐
相关产品推荐

