#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)" } } }