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,详细步骤如下:
例如,如果您使用 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 列出测试套件中的测试用例:
YAML 管道应该是这样的:
pool:
name: Azure Pipelines
steps:
- task: PythonScript@0
displayName: 'Run a Python script'
inputs:
scriptPath: yourpythonfilename.py
简单一点,你这边怎么做,需要自己设计。
我在 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,详细步骤如下:
例如,如果您使用 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 列出测试套件中的测试用例:
YAML 管道应该是这样的:
pool:
name: Azure Pipelines
steps:
- task: PythonScript@0
displayName: 'Run a Python script'
inputs:
scriptPath: yourpythonfilename.py
简单一点,你这边怎么做,需要自己设计。