Azure DevOps Создает API вложений результатов тестирования — Успешно, но вложения не отображаются в результатах тестирования

#azure-devops #xunit #azure-devops-rest-api #azure-pipelines-yaml

Вопрос:

Я прикрепляю файлы скриншотов (.png) для неудачных тестовых случаев в Azure DevOps с использованием REST API. Вызов выполняется успешно, но файл никогда не загружается и не прикрепляется к тестовому набору в пользовательском интерфейсе AzDO. Ответ от окончательного метода Invoke-RestMethod возвращает следующее…

@{id=964; url=https://dev.azure.com/[org]/[проект]/_apis/тесты/Запуски/894/Результаты/100001/Вложения/964}

Когда я нажимаю на эту ссылку, я получаю ошибку 404. $body, предоставленный в запросе, показывает, что тело является правильным JSON, строка Base64 выглядит хорошо. Я не вижу, что я делаю не так. Мой код по сути такой же, как и все, что я видел в отношении этого метода.

Ваша проницательность очень ценится!!

Сценарий PowerShell:

 #Get the RunId  $url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECT/_apis/test/runs?buildIds=$($env:BUILD_BUILDID)amp;buildDefIds=2amp;api-version=6.0"  Write-Host "Url: $url"  $runs = Invoke-RestMethod -Uri $url -Headers @{authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"} -ContentType "application/json" -Method get  $runId = $runs.value[-1].id  Write-Host "RunID: $runId"   #get testCaseresultId  $url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECT/_apis/test/Runs/$($runId)/results?api-version=6.0"  Write-Host "Url: $url"  $results = Invoke-RestMethod -Uri $url -Headers @{authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"} -ContentType "application/json" -Method get  $results = $results.value | where-object { $_.outcome -match "Failed"}   #for each failed test...upload attachments  foreach($item in $results)  {  $testCaseResultId = $item.id  Write-Host "Test case [$($item.testCaseTitle)] failed. Uploading attachments for TestCaseResult: $($testCaseResultId)"   #for each browser type  $browsers = @('Chrome', 'Edge')  foreach($browser in $browsers)  {  $path = "$env:SYSTEM_DEFAULTWORKINGDIRECTORYTestAutomationbinDebugnet5.0$($item.testCaseTitle)_$($browser)_screenshot.png"  Write-Host $path   #if the file exists the test failed for this browser type and a screenshot was saved.  if (Test-Path -Path $path -PathType Leaf) {  Write-Host "File exists (means the test case failed)...uploading attachment......"   $url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECT/_apis/test/Runs/$($runId)/Results/$($testCaseResultId)/attachments?api-version=6.0-preview.1"  Write-Host "Url: $url"   $file = [IO.File]::ReadAllBytes($path)  $base64file = [Convert]::ToBase64String($file)   $body = @{  stream = $base64file  fileName = "$($browser)_screenshot.png"  comment = 'Failed Test Case Screenshot'  attachmentType = 'GeneralAttachment'  }   $body = $body | ConvertTo-Json -Depth 10   $response = Invoke-RestMethod -Uri $url -Headers @{authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"} -ContentType "application/json" -Method post -Body $body  Write-Host $response  }  else {  Write-Host "File does not exist (means the test case for this browser type succeeded)"  }  }  }