我们可以将屏幕截图作为附件添加到 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 上?

Azure 仪表板可以动态添加小部件吗?

iOS Safari 添加到我的 Angular Web 应用程序图标的主屏幕作为屏幕截图而不是 apple-touch-icon

Unity抓取相机截图/抓取屏幕截图

Firebase 测试实验室是不是支持 iOS XCUITests 附件?