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

在Azure DevOps创建Bug工单时关联测试运行中的附件

在Azure DevOps中自动将测试失败截图关联到Bug工单并支持预览

问题核心

测试运行失败后生成的截图已保存到测试运行的附件中,但从测试运行创建Bug时,附件不会自动同步到Bug,且测试运行中的截图无法预览。

解决方案

1. 让测试运行中的截图支持预览

修改你的TearDown代码,在添加附件时明确指定附件MIME类型,Azure DevOps会根据类型识别图片并启用预览:

if (TestContext.CurrentContext.Result.Outcome != ResultState.Success)
{
    Screenshot screenshot = ((ITakesScreenshot)Page.GetDriver()).GetScreenshot();
    string fileName = $"{DateTime.Now:yyyy-MM-dd_HH-mm-ss.fffff}.png";
    string path = Path.Combine(Directory.GetCurrentDirectory(), fileName); // 用Path.Combine避免路径拼接问题
    screenshot.SaveAsFile(path, ScreenshotImageFormat.Png);

    // 指定附件类型为image/png,触发DevOps的图片预览支持
    TestContext.AddTestAttachment(path, "image/png");
}

修改后重新运行测试,测试运行的Attachments页面中,截图的预览按钮应该会正常启用。

2. 将截图自动关联到Bug工单

Azure DevOps默认不会自动将测试附件复制到Bug,可通过以下两种方式实现:

方式一:手动关联(快速临时场景)

在测试运行的Attachments标签页:

  • 右键目标截图 → 选择Link to work item
  • 在弹窗中选择对应的Bug工单,确认后截图会出现在Bug的Attachments标签页,且支持预览。

方式二:流水线自动化关联(批量/持续场景)

通过Azure DevOps REST API,在测试完成后自动将测试附件上传到新创建的Bug:

  1. 在测试流水线的后续阶段添加PowerShell任务,配置如下脚本(替换占位符为你的实际信息):
# 配置参数
$orgUrl = "https://dev.azure.com/你的组织名"
$projectName = "你的项目名"
$pat = "你的PAT令牌(需包含Work Item Write和Test Management Read权限)"
$testRunId = "$(Test.RunId)" # 流水线自动传入的测试运行ID变量
$bugId = "$(刚创建的BugID)" # 需提前通过API获取或传入BugID

# 构建请求头
$headers = @{
    "Authorization" = "Basic " + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$pat"))
}

# 获取测试运行的所有附件
$attachmentsUrl = "$orgUrl/$projectName/_apis/test/runs/$testRunId/attachments?api-version=7.1-preview.1"
$attachments = Invoke-RestMethod -Uri $attachmentsUrl -Headers $headers -Method Get

# 逐个将附件上传到Bug
foreach ($attachment in $attachments.value) {
    # 仅处理图片附件
    if ($attachment.name.EndsWith(".png")) {
        # 下载附件到临时文件
        $tempPath = Join-Path $env:TEMP $attachment.name
        Invoke-RestMethod -Uri $attachment.url -Headers $headers -Method Get -OutFile $tempPath

        # 上传到Bug工单
        $uploadUrl = "$orgUrl/$projectName/_apis/wit/workitems/$bugId/attachments?api-version=7.1-preview.3&fileName=$($attachment.name)"
        Invoke-RestMethod -Uri $uploadUrl -Headers $headers -Method Post -InFile $tempPath -ContentType "image/png"

        # 删除临时文件
        Remove-Item $tempPath
    }
}
  1. 确保PAT令牌拥有Work Items (Write)和Test Management (Read)权限,避免API调用失败。

注意事项

  • 若使用自动化关联,需确保流水线能获取到测试运行ID和BugID,可通过Azure DevOps的预定义变量或API查询实现。
  • 截图文件名需以.png等图片格式后缀结尾,配合MIME类型参数才能触发预览功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:55:20