如何将Robot Framework生成的XUNIT测试截图关联至Azure Pipelines测试标签?
关联Robot Framework XUNIT结果截图到Azure Pipelines Test标签的简便方法
我刚好处理过类似的需求,要实现这个效果,核心是让Azure Pipelines能从XUNIT文件里识别出截图路径,然后关联到对应的测试用例。以下是具体步骤:
第一步:让Robot Framework把截图路径嵌入XUNIT XML
Robot默认生成的XUNIT文件不会包含截图信息,我们需要在测试执行后,把失败用例的截图路径添加到XUNIT的测试用例属性中。这里有两种简便方法:
方法1:使用Robot Listener自动嵌入
写一个简单的Python监听器,在测试结束后自动提取失败用例的截图路径,并写入XUNIT文件:
from robot.api import ExecutionResult, ResultWriter class ScreenshotXunitListener: ROBOT_LISTENER_API_VERSION = 3 def close(self): # 读取Robot的output.xml result = ExecutionResult("output.xml") # 遍历所有测试用例 for suite in result.suites: for test in suite.tests: if test.status == "FAIL": # 从失败关键字的消息里提取截图路径 for kw in test.keywords: if kw.status == "FAIL": for msg in kw.messages: if "screenshot" in msg.message.lower() and ".png" in msg.message: # 提取路径(假设消息格式是类似"Screenshot saved to: path/to/screenshot.png") screenshot_path = msg.message.split(":", 1)[1].strip() # 给测试用例添加Attachment属性 test.properties["Attachment"] = screenshot_path # 重新生成带截图属性的XUNIT文件 ResultWriter(result).write_xunit("xunit_with_screenshots.xml")
运行Robot测试时,加上监听器参数:
robot --listener ./ScreenshotXunitListener.py --xunit xunit.xml your_test_suite.robot
执行完成后,会生成xunit_with_screenshots.xml,里面的失败用例会带有Attachment属性。
方法2:用PowerShell/Python脚本后处理XUNIT文件
如果不想用监听器,可以在测试完成后,用脚本读取Robot的output.xml(里面包含截图信息),然后修改XUNIT文件:
比如PowerShell版本:
# 读取原始XUNIT和Robot输出文件 $xunitXml = [xml](Get-Content ./xunit.xml) $robotOutput = [xml](Get-Content ./output.xml) # 遍历每个测试用例 foreach ($testcase in $xunitXml.testsuite.testcase) { $robotTest = $robotOutput.robot.suites.suite.tests.test | Where-Object { $_.name -eq $testcase.name } if ($robotTest -and $robotTest.status -eq "FAIL") { # 查找截图路径(这里根据你的截图保存逻辑调整,比如默认路径是output/screenshots/[testname].png) $screenshotPath = "./output/screenshots/$($testcase.name).png" # 创建Attachment属性节点 $prop = $xunitXml.CreateElement("property") $prop.SetAttribute("name", "Attachment") $prop.SetAttribute("value", $screenshotPath) $testcase.AppendChild($prop) } } # 保存修改后的XUNIT文件 $xunitXml.Save("./xunit_with_screenshots.xml")
第二步:配置Azure Pipelines任务
按以下顺序配置流水线任务:
- 运行Robot测试:执行你的Robot测试命令,生成
output.xml、原始xunit.xml和截图文件。 - 处理XUNIT文件:运行上面的监听器(如果用方法1,这一步已经包含在测试命令里)或者脚本,生成带
Attachment属性的xunit_with_screenshots.xml。 - 发布截图到Artifacts:添加一个
Publish Build Artifacts任务,把截图所在的目录(比如output/screenshots/)发布为Artifacts,确保Azure Pipelines能访问到这些文件。 - 发布测试结果:添加
Publish Test Results任务,配置如下:- 测试结果格式:选择
XUnit - 测试结果文件:填写
**/xunit_with_screenshots.xml - 其他保持默认即可
- 测试结果格式:选择
关键注意事项
- 截图路径必须是相对于流水线工作目录的相对路径,绝对路径可能会导致Azure Pipelines无法找到文件。
- 确保截图目录被正确发布到Artifacts,否则测试标签里无法加载图片。
- 如果你的截图命名规则和示例不同,需要调整脚本里的路径提取逻辑,匹配实际的截图存储路径。
这样配置完成后,在Azure Pipelines的Test标签里,每个失败的测试用例下方都会显示对应的截图附件,点击就能查看,和VSTS原生结果文件的效果一致。
内容的提问来源于stack exchange,提问作者FransPeterson
相关产品推荐
相关产品推荐

