【问题标题】:Getting Tests Run on Build with Azure DevOps REST APIs使用 Azure DevOps REST API 在构建时运行测试
【发布时间】:2020-10-30 15:29:26
【问题描述】:

是否有 REST API 用于获取构建运行/失败的测试数量?

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

看起来所有可用于获取测试结果的 API 都需要一个测试 runid,但我只有一个 buildid

【问题讨论】:

    标签: unit-testing azure-devops automated-tests azure-devops-rest-api


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      $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。随着新语法的出现,命名法发生了变化。

      【讨论】:

        【解决方案3】:

        您可以使用 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
        

        【讨论】:

        • 通过运行传递 buildid - 查询似乎正在工作,感谢使用测试运行名称的替代建议,这也适用于我。
        猜你喜欢
        • 2020-01-29
        • 2021-12-12
        • 2020-07-12
        • 1970-01-01
        • 1970-01-01
        • 2019-10-14
        • 2021-06-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多