Azure DO:从发布结果任务获取测试运行ID

时间:2020-01-10 12:40:58

标签: azure-devops

我正在使用Azure DO管道运行测试,最后,我具有“发布测试结果”任务。该任务会生成一个指向测试结果的链接,其外观类似于: private void runTextRecognition() { FirebaseVisionImage image = FirebaseVisionImage.fromBitmap(mSelectedImage); FirebaseVisionTextRecognizer recognizer = FirebaseVision.getInstance() .getOnDeviceTextRecognizer(); mTextButton.setEnabled(false); recognizer.processImage(image) .addOnSuccessListener( new OnSuccessListener<FirebaseVisionText>() { @Override public void onSuccess(FirebaseVisionText texts) { mTextButton.setEnabled(true); processTextRecognitionResult(texts); } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Task failed with an exception mTextButton.setEnabled(true); e.printStackTrace(); } }); } 。是否有任何方法可以获取https://.../.../.../.../Runs?runId=1031864&_a=runCharts(在示例中为1031864)或整个链接,以将其用作以下任务中的变量?我试图在发布变量中分配runId并在以下任务中传递它,但未给出结果。有人可以帮忙吗?提前谢谢?

1 个答案:

答案 0 :(得分:1)

有没有办法获取runId或整个 链接以在以下任务中将其用作变量?

对于此问题,您可以在powershell任务中使用脚本调用Runs - List api以获取测试运行列表。

GET https://dev.azure.com/{organization}/{project}/_apis/test/runs?api-version=5.1

然后,我们需要获取最新的测试runId,因为返回的结果是底部的最新测试运行,因此我们需要按降序对返回的结果进行排序。

由于最近的测试运行具有最大的ID,因此我们可以检索测试运行的列表,其排序顺序是ID的结果。然后获得结果的第一项。

下面是一个示例powershell脚本,有关详细信息,您可以参考此case

$testRuns = Invoke-RestMethod -Uri "https://dev.azure.com/{organization}/{project}/_apis/test/runs?api-version=5.1" -Headers $headers -Method Get 

$testRunsIdSorted = $testRuns.value | sort-object id -Descending

$mostRecentTestRun = Invoke-RestMethod -Uri "https://dev.azure.com/{organization}/{project}/_apis/test/runs/$($testRunsIdSorted[0].id)?api-version=5.1" -Headers $headers -Method Get 

获取mostRecentTestRun之后,我们可以使用脚本##vso[task.setvariable variable=mostRecentTestRun;isOutput=true]$mostRecentTestRun“将其输出到以下任务。

更新

这是我在powershell任务中的完整脚本:

$url = 'https://dev.azure.com/{orgName}/{proName}/_apis/test/runs?api-version=5.1';

$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"} -Method Get

$testRunsIdSorted = $response.value | sort-object id -Descending

Write-Host "results = $($testRunsIdSorted | ConvertTo-Json -Depth 100)"

$result = Invoke-RestMethod -Uri https://dev.azure.com/{org}/{pro}/_apis/test/runs/$($testRunsIdSorted[0].id)?api-version=5.1 -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"} -Method Get

Write-Host "results = $($result | ConvertTo-Json -Depth 100)"

Write-Host "result = $($result.id | ConvertTo-Json -Depth 100)"

对于此身份验证,您需要单击代理作业中的Allow scripts to access the OAuth token选项。

enter image description here

我可以在输出中获取runId:

enter image description here

Update2

将变量传递到以下任务时遇到问题

对于此问题,您需要像下面这样设置变量:

Write-Host "##vso[task.setvariable variable=runId]$($result.id | ConvertTo-Json -Depth 100)"

然后在以下任务中,您只需使用此格式$(runId)即可获取变量。例如:

Write-Host "$(runId)"