如何获取当前Azure DevOps流水线的runId以调用Get Test Run By Id API
关于Azure DevOps中Get Test Run By Id API的runId说明及获取方法
一、什么是runId
runId是Azure DevOps中**测试运行(Test Run)**的唯一标识符。每次执行测试任务(比如流水线中的VSTest任务、手动触发的测试计划执行)都会生成一个独立的测试运行实例,runId就是用来精准定位这个实例的ID,通过它可以调用Get Test Run By Id API获取该测试运行的详细结果、状态等信息。
二、获取当前运行流水线对应的测试runId的方法
1. 流水线任务直接输出变量(最简便)
如果你的流水线使用了VSTest任务执行测试,可通过任务输出变量直接获取runId:
- 给VSTest任务设置自定义名称(比如
RunUnitTests) - 确保开启
Publish test results and upload run attachments选项(默认启用) - 在后续任务中,通过
$(RunUnitTests.TestRunId)变量直接引用该测试任务生成的runId
2. 调用测试运行列表API筛选获取
若无法通过任务变量获取,或需批量筛选,可调用列出测试运行的API,结合流水线内置变量过滤当前流水线对应的测试运行:
核心筛选参数:
- CI构建流水线:使用
buildId=$(Build.BuildId)作为筛选条件(Build.BuildId是流水线内置变量,代表当前构建ID) - Release发布流水线:使用
releaseId=$(Release.ReleaseId)作为筛选条件(Release.ReleaseId是发布流水线内置变量)
示例PowerShell脚本:
在流水线中添加PowerShell任务,执行以下代码获取并将runId设为流水线变量:
# 读取流水线内置变量 $orgUri = "$(System.CollectionUri)" $projectName = "$(System.TeamProject)" $buildId = "$(Build.BuildId)" $accessToken = "$(System.AccessToken)" # 构建认证头 $base64Auth = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$accessToken")) $headers = @{ Authorization = "Basic $base64Auth" } # 调用API筛选当前Build对应的测试运行 $apiUrl = "$orgUri/$projectName/_apis/test/runs?buildId=$buildId&api-version=7.1-preview.3" $testRuns = Invoke-RestMethod -Uri $apiUrl -Headers $headers -Method Get # 提取第一个测试运行的runId(若有多个测试任务,可根据testPlanId/testSuiteId进一步筛选) $targetRunId = $testRuns.value[0].id # 设置为流水线变量,供后续任务使用 Write-Host "##vso[task.setvariable variable=CurrentTestRunId;]$targetRunId"
补充精准筛选条件:
若一个流水线包含多个测试任务(对应多个测试运行),可在API请求中添加额外参数缩小范围:
testPlanId={测试计划ID}:指定目标测试计划testSuiteId={测试套件ID}:指定目标测试套件state={状态}:比如Completed、InProgress筛选测试运行状态
内容的提问来源于stack exchange,提问作者F11
相关产品推荐
相关产品推荐

