我们可以将屏幕截图作为附件添加到 Azure 管道中的测试结果吗
Posted
技术标签:
【中文标题】我们可以将屏幕截图作为附件添加到 Azure 管道中的测试结果吗【英文标题】:Can we add screenshots as an attachment to the test result in Azure pipeline 【发布时间】:2019-12-28 14:40:38 【问题描述】:我正在使用 JUnit 来报告测试用例结果。根据我的理解,我们不能将屏幕截图或视频作为附件附加到 Azure 管道中的 JUnit 格式的“发布测试结果”任务生成的结果。
下面是我用来生成屏幕截图和视频的代码,而不是附加到测试结果报告中。
jobs:
- job: Cypress_e2e_tests
pool:
vmImage: 'windows-latest'
variables:
npm_config_cache: C:\Users\VssAdministrator\AppData\Local\npm-cache
steps:
- task: NodeTool@0
inputs:
versionSpec: '10.x'
- task: CacheBeta@1
inputs:
key: npm | $(Agent.OS) | package-lock.json
path: $(npm_config_cache)
restoreKeys: npm | $(Agent.OS) | package-lock.json
displayName: Cache NPM packages
- task: CacheBeta@1
inputs:
key: 'cypress | $(Agent.OS) | package-lock.json'
path: 'C:\Users\VssAdministrator\AppData\Local\Cypress'
restoreKeys: 'cypress | $(Agent.OS) | package-lock.json'
displayName: Cache cypress binary
- script: npm cache verify
displayName: 'NPM verify'
- script: npm ci
displayName: 'Install NPM dependencies'
- script: npm run cy:verify
displayName: 'Cypress verify'
- script: |
npx cypress run --browser chrome
displayName: 'Run Cypress tests'
workingDirectory: $(System.DefaultWorkingDirectory)
- task: PublishPipelineArtifact@0
displayName: 'Publish Screenshots (Cypress)'
condition: failed()
inputs:
artifactName: 'screenshots'
targetPath: '$(Build.SourcesDirectory)/cypress/screenshots'
- task: PublishPipelineArtifact@0
displayName: 'Publish Videos (Cypress)'
condition: failed()
inputs:
artifactName: 'videos'
targetPath: '$(Build.SourcesDirectory)/cypress/videos'
- task: PublishTestResults@2
inputs:
testResultsFormat: 'JUnit'
testResultsFiles: '*.xml'
failTaskOnFailedTests: true
testRunTitle: 'Cypress Test Results'
publishRunAttachments: true
condition: succeededOrFailed()
有没有办法将这些工件附加到测试结果中,而不是将这两个部分保留为单独的部分?
如果我们可以从节点项目生成带有附件的测试结果(我们可以使用可用于 .Net 项目的报告器附加文件,但我的工作项目完全基于节点),这对我来说将是最好的解决方案。
【问题讨论】:
我正在使用cypress进行UI测试,请看cypress支持的记者docs.cypress.io/guides/tooling/reporters.html#Reporter-Options 【参考方案1】:我们可以将屏幕截图作为附件添加到 azure 中的测试结果吗 管道
对于这个问题,答案是是。您可以在 PowerShell 任务中编写脚本并在其中调用 Create Test Result Attachmentrest api。通过这个rest api,您可以将文件附加到测试结果中。
请求网址:
POST https://dev.azure.com/organization/project/_apis/test/Runs/runId/Results/testCaseResultId/attachments?api-version=5.1-preview.1
示例请求正文:
"stream": "VXNlciB0ZXh0IGNvbnRlbnQgdG8gdXBsb2FkLg==",
"fileName": "Notifications.png",
"comment": "Test attachment upload",
"attachmentType": "GeneralAttachment"
以下是我在邮递员中的测试:
【讨论】:
是的,我认为这可能有助于我上传附件。但我不确定我是否可以自动化上述过程,从某种意义上说,我有一组测试,赛普拉斯将为失败的每个测试运行创建屏幕截图,屏幕截图的文件名应该与文件名相同测试。如何遍历每个测试运行结果并将相应的文件附加到结果中? 根据你的yaml脚本,你把截图发布到s / cypress / screenshots
文件夹,然后你可以通过Results-List遍历测试结果,然后从screenshots
文件夹中获取最新的文件名(您可以参考this),然后将文件添加为附件。
嗨 Hugh Lin - MSFT,我们在 cypress/azure 中是否有任何其他选项/功能可用于将文件附加到测试结果,因为循环遍历每个测试并调用 API 会产生更多开销,如果我们有大量的测试用例的数量。
AFAIK,除了使用rest api,只能通过UI手动添加。以上是关于我们可以将屏幕截图作为附件添加到 Azure 管道中的测试结果吗的主要内容,如果未能解决你的问题,请参考以下文章
我们如何使用管道将azure devops中的应用程序部署到具有不同订阅和组织的azure app服务
如何在 Pytest JUNIT xml 中附加屏幕截图以显示在 Azure DevOps 上?
iOS Safari 添加到我的 Angular Web 应用程序图标的主屏幕作为屏幕截图而不是 apple-touch-icon