使用 Azure DevOps REST API 进行构建测试 运行

Getting Tests Run on Build with Azure DevOps REST APIs

是否有 REST API 用于获取构建的测试数量 run/failed?

我看到有一个用于获取 Code Coverage,但除非我遗漏了一些明显的东西,否则我找不到一个 API 来获取构建的测试数量 运行。

看起来所有可获得测试结果的 API 都需要测试 运行id,但我只有 buildid.

我不确定是否有专门用于测试的端点,但您可以从日志中获取测试

$AzureDevOpsAuthenicationHeader = @{Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$(System.AccessToken)")) }

$uri = "https://dev.azure.com/$(devopsAccount)/$(projectName)/_apis/build/builds/$(Build.BuildId)/logs/$(logId)?api-version=5.1"

Write-Host $uri

# Invoke the REST call
$result = Invoke-RestMethod -Uri $uri -Method Get -Headers $AzureDevOpsAuthenicationHeader

Write-Host $result

$lines = $result.Split([Environment]::NewLine)

$passed = 0;
$failed = 0;

foreach($line in $lines) {
    if ($line -match "Passed:.(\d+)") { 
      $passed = $matches[1]
    }

    if ($line -match "Failed:.(\d+)") { 
      $failed = $matches[1]
    }
}

echo $passed
echo $failed

您需要传递您的构建 ID 和日志 ID。要获取日志 ID,请获取所有日志并浏览它们并找到具有测试任务的那个。

buildId 和 runId 是一样的。我的意思是 buildId = runId。使用更新的语法,术语发生了变化。

你应该尝试使用 Runs - Query API。传递可选的构建 ID。

GET https://dev.azure.com/{organization}/{project}/_apis/test/runs?minLastUpdatedDate={minLastUpdatedDate}&maxLastUpdatedDate={maxLastUpdatedDate}&buildIds={buildIds}&api-version=6.0

值得注意的是,您可以通过在管道的任务步骤上设置来自定义 运行 的标题(包括内部版本号)。

您可以使用 Matt 提到的 Runs Query Api。但是我发现 buildId 查询参数可能不起作用。您可能需要按 buildId 过滤 api 结果。请参阅以下示例:

$connectionToken="Personal Access Token"

$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))

$url = "https://dev.azure.com/{organization}/{project}/_apis/test/runs?minLastUpdatedDate=2020-10-20&maxLastUpdatedDate=2020-10-22&api-version=6.0"

$results= Invoke-RestMethod -Uri $trurl -Headers @{authorization = "Basic $base64AuthInfo"} -Method Get

$run = $results.value | Where-Object{$_.buildConfiguration.id -eq $buildId}

$runId = $run.id

您也可以查看 Runs List Api。我发现 buildId 总是附加到 运行 标题。您可以按 运行 名称筛选 api 结果。见下文:

$connectionToken="Personal Access Token"

$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))

$url = "https://dev.azure.com/{organization}/{project}/_apis/test/runs?api-version=6.0"

$results= Invoke-RestMethod -Uri $trurl -Headers @{authorization = "Basic $base64AuthInfo"} -Method Get

$run = $results.value | Where-Object{$_.name -match $buildId}

$runId = $run.id