You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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任务

按以下顺序配置流水线任务:

  1. 运行Robot测试:执行你的Robot测试命令,生成output.xml、原始xunit.xml和截图文件。
  2. 处理XUNIT文件:运行上面的监听器(如果用方法1,这一步已经包含在测试命令里)或者脚本,生成带Attachment属性的xunit_with_screenshots.xml。
  3. 发布截图到Artifacts:添加一个Publish Build Artifacts任务,把截图所在的目录(比如output/screenshots/)发布为Artifacts,确保Azure Pipelines能访问到这些文件。
  4. 发布测试结果:添加Publish Test Results任务,配置如下:
    • 测试结果格式:选择XUnit
    • 测试结果文件:填写**/xunit_with_screenshots.xml
    • 其他保持默认即可

关键注意事项

  • 截图路径必须是相对于流水线工作目录的相对路径,绝对路径可能会导致Azure Pipelines无法找到文件。
  • 确保截图目录被正确发布到Artifacts,否则测试标签里无法加载图片。
  • 如果你的截图命名规则和示例不同,需要调整脚本里的路径提取逻辑,匹配实际的截图存储路径。

这样配置完成后,在Azure Pipelines的Test标签里,每个失败的测试用例下方都会显示对应的截图附件,点击就能查看,和VSTS原生结果文件的效果一致。

内容的提问来源于stack exchange,提问作者FransPeterson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 09:57:31