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

如何在Azure Devops Wiki中发布代码覆盖率和测试结果

实现Azure Pipeline测试结果与覆盖率报告同步到Azure DevOps Wiki的方案

目前Azure DevOps官方没有提供直接同步报告到Wiki的开箱即用任务,但可以通过组合内置任务+自定义脚本,或者使用第三方扩展任务完成该需求,具体实现步骤如下:

前置准备

  • 提前在Azure DevOps Wiki中创建好存放报告的目标页面,记录页面路径,以及对应的Wiki仓库地址(Azure DevOps Wiki本质是平台托管的Git仓库)
  • 给流水线的服务账号授予Wiki对应仓库的贡献者权限,否则无法推送内容更新
  • 确保单元测试任务已正确配置,可生成可解析的测试结果文件(如.trx、xUnit XML等)和覆盖率报告文件(推荐使用Cobertura、JaCoCo这类通用可解析格式)

核心实现步骤

1. 上传测试结果与覆盖率报告到流水线记录(可选但推荐)

  • 首先添加Publish Test Results任务,把单元测试生成的结果文件上传到流水线运行记录中,方便后续提取核心指标
  • 再添加Publish Code Coverage Results任务,把覆盖率报告上传到流水线,后续可直接从运行记录拉取覆盖率汇总数据,或者获取HTML报告的临时访问链接

2. 生成要同步到Wiki的Markdown内容

可以通过PowerShell/Bash脚本提取测试、覆盖率的核心指标,拼接成符合需求的Markdown格式内容,也可以使用reportgenerator工具把原始覆盖率文件直接转换成Markdown格式的完整报告。

参考PowerShell指标提取脚本示例:

# 提取测试结果指标,路径替换为实际的测试结果文件路径
$testResult = [xml](Get-Content ./testresults.trx)
$totalTests = $testResult.TestRun.ResultSummary.Counters.total
$passedTests = $testResult.TestRun.ResultSummary.Counters.passed
$passRate = [math]::Round(($passedTests/$totalTests)*100,2)

# 提取覆盖率指标,路径替换为实际的Cobertura格式覆盖率文件路径
$coverageResult = [xml](Get-Content ./coverage.cobertura.xml)
$lineRate = [math]::Round([decimal]$coverageResult.coverage.'line-rate'*100,2)
$branchRate = [math]::Round([decimal]$coverageResult.coverage.'branch-rate'*100,2)

# 拼接Wiki页面Markdown内容
$wikiContent = @"
# 本次构建测试与覆盖率报告
构建ID:$(Build.BuildId) | 构建时间:$(Get-Date -Format "yyyy-MM-dd HH:mm:ss")
## 测试结果
总用例数:$totalTests | 通过用例数:$passedTests | 通过率:$passRate%
## 覆盖率指标
行覆盖率:$lineRate% | 分支覆盖率:$branchRate%
"@

# 内容写入本地文件
$wikiContent | Out-File ./wiki-page.md -Encoding utf8

3. 推送内容到Azure DevOps Wiki仓库

直接通过Git命令把生成的Markdown文件推送到Wiki对应仓库的对应路径即可,参考Bash脚本:

# 配置Git用户信息
git config user.name "Azure Pipeline Bot"
git config user.email "devops@yourorg.com"

# 克隆Wiki仓库,替换为自身项目的Wiki仓库地址,$(System.AccessToken)为流水线内置访问令牌,权限配置正确即可直接使用
git clone https://$(System.AccessToken)@dev.azure.com/你的组织名/你的项目名/_wiki/wikis/你的Wiki名称.wiki wiki-repo

# 覆盖目标页面内容
cp ./wiki-page.md ./wiki-repo/目标页面路径.md

# 提交并推送更新
cd wiki-repo
git add .
git commit -m "更新测试覆盖率报告,构建ID:$(Build.BuildId)"
git push origin main

注意:执行Git推送脚本前,需要在当前流水线作业的设置中开启「允许脚本访问OAuth令牌」选项,否则$(System.AccessToken)无法正常调用。

可选简化方案:使用第三方扩展任务

如果不想自行编写脚本,可以在Azure DevOps扩展市场搜索Wiki Updater类的第三方扩展任务,这类任务已经封装了Git拉取、内容替换、推送的逻辑,只需传入要更新的Wiki页面路径、待写入的内容参数即可完成更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:39:03