2

Is there a REST API for getting the number of tests run/failed for a build?

I see there's one for getting Code Coverage but unless I am missing something obvious I can't find an API for just getting the number of tests run for a build.

Looks like that all APIs available to get Test Results require a test runid, but I only have a buildid.

3 Answers 3

1

You should try to use the Runs - Query API. Pass the optional build id.

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

It's worth noting that you can customize the title of the run (with the build number included) by setting that on the task step of the pipeline.

Sign up to request clarification or add additional context in comments.

Comments

0

I'm not sure if there is endpoint dedicated for tests but you can get tests from logs

$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

You need to pass your build id and log id. To get log id please get all logs and go trough them and find the one with your task with tests.

In terms of buildId vs runId, they are the same. I mean buildId = runId. With newer syntax there were a change in nomenclature.

Comments

0

You can use the Runs Query Api as Matt mentioned. However i found the buildId query parameter didnot work probably. You may need to filter the api results by the buildId. See below example:

$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

You can also check out Runs List Api. I found the buildId was always appended to the run title. You can filter api results by the run name. See below:

enter image description here

$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

1 Comment

Passing the buildid with the Runs - Query seems to be working, thanks for the alternative suggestion of using the test run name, that would also work for me.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.