Azure DevOps:将文件附加到来自 YAML 管道的测试结果/运行

Azure DevOps: Attach files to test result / run from YAML pipeline

我在 Azure DevOps 中通过 YAML 管道进行了一些(编剧)自动化测试运行。

我启用了 Playwright 的跟踪功能,因此每次测试都会生成一个包含跟踪的 zip 文件。我的目标是让失败的测试将跟踪 zip 文件附加到测试结果,使我们能够轻松点击并查看究竟出了什么问题。这些文件最大可达 15MB。

这是我希望它们出现在 Azure DevOps 中的位置:

查看 documentation 我看到有一个 REST API 到 post 附件,但我不清楚如何从 YAML 管道调用此 API .即为 API 进行身份验证,获取测试用例 ID 并将 zip 文件作为 base64 发送。

我想我正在寻找执行此操作的示例 YAML 任务。

更新:

嗨,对之前的回复进行了一些更新,通过拦截网络流量,我找到了一种比 REST API 更简单的方法。首先请参考this document,可以通过预定义变量Build.BuildId轻松获取当前管道的buildid。然后,请运行这个请求通过get方法得到测试结果(根据你的构建管道运行):https://vstmr.dev.azure.com/<orgname>/<projectname>/_apis/testresults/resultsbypipeline?pipelineId=<buildid>

此方法没有官方文档或参考,但它有效并且我已经测试过。

原答案:

but I'm unclear how to invoke this API from the YAML pipeline. i.e. authenticating for the API, getting the test case ID & sending the zip file as base64.

您可以使用您想要发送请求的任何 language/script 语言。

身份验证可以使用PAT token,详细步骤如下:

https://docs.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops&tabs=Windows

例如,如果您使用 Python,

这是通过 base64(Python) 编写 zip 文件的方法:

base64 encode a zip file in Python

然后使用下面的代码上传 zip 文件。

import http.client
import json

conn = http.client.HTTPSConnection("dev.azure.com")
payload = json.dumps({
  "Stream": <zip stream data here>,
  "FileName": "test.zip"
})
headers = {
  'Authorization': 'Basic <Your PAT Token here>',
  'Content-Type': 'application/json'
}
conn.request("POST", "/<orgname>/<projectname>/_apis/test/Runs/<runid>/Results/<testresultid>/attachments?api-version=6.0-preview.1", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))

测试用例id,可以在workitem中获取url:

或者您可以使用此 REST API 列出测试套件中的测试用例:

https://docs.microsoft.com/en-us/rest/api/azure/devops/test/test-suites/get-test-cases?view=azure-devops-rest-5.0

YAML 管道应该是这样的:

pool:
  name: Azure Pipelines
steps:
- task: PythonScript@0
  displayName: 'Run a Python script'
  inputs:
    scriptPath: yourpythonfilename.py

简单一点,你这边怎么做,需要自己设计。