【问题标题】:Azure pipelines: How to add failed selenium Xunit test case attachment in VS test taskAzure 管道:如何在 VS 测试任务中添加失败的 selenium Xunit 测试用例附件
【发布时间】:2021-02-04 13:57:47
【问题描述】:

我将 Xunit2 selenium 框架用于自动化测试用例。有些案例在管道中失败。我想在测试选项卡中查看失败测试用例的附件。如何使用 VS 测试任务执行此操作?

【问题讨论】:

  • 您能否检查YMAL snippet 文件中的testRunner。检查#publishRunAttachments: truetestResultsFiles选项是否应更改为*/TEST-.trx
  • @KunduK 我在 VS 测试任务中启用了上传附件,但在 YAML sn-p 中看不到 publishRunAttachment。不知道为什么?
  • 嗨@Gkm,检查这个doc,添加代码publishRunAttachments: true,然后在这里分享结果。

标签: selenium azure-devops azure-pipelines xunit2


【解决方案1】:

选项publishRunAttachments: true,它将更新附件到测试运行附件选项卡,检查下面的图片

VS测试任务运行后,我们可以通过变量VSTEST_TESTRUNID获取运行ID。

然后我们可以调用 RESST API Create Test Result Attachment 将附件添加到测试结果附件选项卡。

请求 API:

POST https://dev.azure.com/{organization}/{project}/_apis/test/Runs/{runId}/attachments?api-version=6.0-preview.1

请求正文:

{
  "stream": "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABlSURBVDhP7cxBCsAgDERR739pG/CnGJI0FopQ8O2cjNP6R85QbeNQU7wT1dkijaQ3vkZoWElaoTeJojW01cYh0jwfgiFBV/lEjOZtacijN/nLkOBHhIaVDgn+Wdycp6FXzlCl9wt0Y0cAzHo/zgAAAABJRU5ErkJggg==",
  "fileName": "imageAsFileAttachment.png",
  "comment": "Test attachment upload",
  "attachmentType": "GeneralAttachment"
}

您也可以查看thread

更新1

我们可以添加任务power shell并通过以下脚本调用其余的api:

$connectionToken="{PAT}"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))
$URL = "https://dev.azure.com/{organization}/{project}/_apis/test/Runs/{runId}/attachments?api-version=6.0-preview.1" 
$body =@"
{
  "stream": "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABlSURBVDhP7cxBCsAgDERR739pG/CnGJI0FopQ8O2cjNP6R85QbeNQU7wT1dkijaQ3vkZoWElaoTeJojW01cYh0jwfgiFBV/lEjOZtacijN/nLkOBHhIaVDgn+Wdycp6FXzlCl9wt0Y0cAzHo/zgAAAABJRU5ErkJggg==",
  "fileName": "imageAsFileAttachment.png",
  "comment": "Test attachment upload",
  "attachmentType": "GeneralAttachment"
}
"@
$Result = Invoke-RestMethod -Uri $URL -ContentType "application/json" -Body $body -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method POST

更新2

查看下面的图片并注意网址

根据您之前分享的屏幕截图,您似乎想在测试运行而不是测试结果中添加附件。所以我们只需要测试运行 ID,我们可以在任务与测试结束后从变量中获取测试运行 ID。

如果您想在测试结果中添加附件,我们可以通过测试运行 ID 列出所有测试结果。

示例网址:

GET https://dev.azure.com/{organization}/{project}/_apis/test/Runs/{RunID}/results

通过测试结果ID和测试运行ID为测试结果添加附件。

用于列出所有测试结果 ID 的示例 power shell 脚本

$connectionToken="{PAT}"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))
$URL = "https://dev.azure.com/{organization}/{project}/_apis/test/Runs/{RunID}/results"
$Result = Invoke-RestMethod -Uri $URL -Headers @{authorization = "Basic $base64AuthInfo"} -Method Get 
 foreach($Run in $Result.value){
 Write-Host "This test run contain" $Run.id "and the test reuslt name is" $Run.testCase.name
 }

更新3

$connectionToken="{PAT}"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))
$URL = "https://dev.azure.com/{organization}/{project}/_apis/test/Runs/134/results"
$Result = Invoke-RestMethod -Uri $URL -Headers @{authorization = "Basic $base64AuthInfo"} -Method Get 
#List all test result  get the test result ID via result
foreach($Run in $Result.value){

#Get the test result ID via result
If($Run.outcome -eq "Failed"){
$TestResultID = $Run.id
#Write-Host $TestResultID


#Add attachment via test run ID and test result ID
$TestResultAttachmentURL = "https://dev.azure.com/{organization}/{project}/_apis/test/Runs/{runId}/Results/$($TestResultID)/attachments?api-version=6.0-preview.1" 

$body =@"
{
  "stream": "VXNlciB0ZXh0IGNvbnRlbnQgdG8gdXBsb2FkLg==",
  "fileName": "textAsFileAttachment.txt",
  "comment": "Test attachment upload",
  "attachmentType": "GeneralAttachment"
}
"@
$TestResultAttachmentResult = Invoke-RestMethod -Uri $TestResultAttachmentURL -ContentType "application/json" -Body $body -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method POST
}
}

更新4

$AzureDevOpsPAT = {PAT}
$AzureDevOpsAuthenicationHeader = @{Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($AzureDevOpsPAT)")) }
$UriOrga = "https://dev.azure.com/{organization}/{project}/" 
$uriAccount = $UriOrga + "_apis/test/runs?api-version=6.0"

$response = Invoke-RestMethod -Uri $uriAccount -Headers $AzureDevOpsAuthenicationHeader -Method Get
$testRunsIdSorted = $response.value | sort-object id -Descending
Write-Host "##vso[task.setvariable variable=runId]$($testRunsIdSorted[0].id | ConvertTo-Json -Depth 100)"
$result = Invoke-RestMethod -Uri https://dev.azure.com/{organization}/{project}/_apis/test/runs/$($testRunsIdSorted[0].id)/results?api-version=6.0 -Headers $AzureDevOpsAuthenicationHeader -Method Get

#List all test result  get the test result ID via result
foreach($Run in $result.value){

#Get the test result ID via result
If($Run.outcome -eq "Failed"){
$TestResultID = $Run.id
#Write-Host $TestResultID


#Add attachment via test run ID and test result ID
$TestResultAttachmentURL = "https://dev.azure.com/{organization}/{project}/_apis/test/Runs/$($runId)/Results/$($TestResultID)/attachments?api-version=6.0-preview.1" 

$body =@"
{
  "stream": "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABlSURBVDhP7cxBCsAgDERR739pG/CnGJI0FopQ8O2cjNP6R85QbeNQU7wT1dkijaQ3vkZoWElaoTeJojW01cYh0jwfgiFBV/lEjOZtacijN/nLkOBHhIaVDgn+Wdycp6FXzlCl9wt0Y0cAzHo/zgAAAABJRU5ErkJggg==",
  "fileName": "imageAsFileAttachment.png",
  "comment": "Test attachment upload",
  "attachmentType": "GeneralAttachment"
}
"@
$TestResultAttachmentResult = Invoke-RestMethod -Uri $TestResultAttachmentURL -ContentType "application/json" -Body $body -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method POST
}
}

如果我点击 .png 文件,它不会显示任何内容。

【讨论】:

  • publishRunAttachments: 是的,我没有看到 VSTEST_RUNID 但我可以看到测试运行 id 变量。是一样的吗?要调用 Rest API 我应该添加 call rest api 任务吗?
  • 嗨@Gkm,检查更新1,我们需要添加任务电源外壳并调用rest api添加附件。你可以检查VS测试任务日志,它应该显示测试运行ID,然后将它与变量Test run id进行比较,它应该是相同的。
  • 我是否需要编写另一个脚本来传递此脚本的 runId 和 resultId?另外,我需要添加测试失败的屏幕截图,我也可以这样做,对吗?因为现在我在“添加附件”选项卡中看到了 .trx 文件,而之前在“调试”选项卡中看到了这个失败的测试描述,并且格式精美,已经可以阅读。
  • 嗨@Gkm,我已经添加了power shell脚本来列出所有测试结果ID,然后我们可以通过测试运行ID和测试结果ID添加附件。您可以尝试一下,然后在这里分享结果吗?
  • 嗨@Vito Liu-MSFT,你能看到update4。我已经添加了如何获取测试运行 ID。
猜你喜欢
  • 2021-10-27
  • 2021-10-25
  • 2021-04-19
  • 1970-01-01
  • 1970-01-01
  • 2019-08-26
  • 2019-06-24
  • 1970-01-01
  • 2019-07-19
相关资源
最近更新 更多