Azure DevOps PublishTestResults任务-测试失败时如何发布结果

时间:2018-11-08 17:57:00

标签: azure azure-devops pytest

我在Azure DevOps生成过程中正在运行基于pytest的测试套件。我安排了两个工作来针对两个不同的环境运行这些测试。

在每个作业中,我使用脚本任务运行pytest测试并生成junit样式的xml输出文件,然后让PublishTestResults任务发布该xml文件。这很好用,我可以在azure构建测试报告用户界面中细读我的测试结果-但前提是所有测试都通过。如果任何测试失败,则会跳过发布任务,并且不会在UI中报告测试。

YML提取物:

- job: 'RunTestsQA'
    continueOnError: True
    steps:
    - task: UsePythonVersion@0
      inputs:
        versionSpec: '3.6'
        architecture: 'x64'
    - task: DownloadSecureFile@1
      inputs:
        secureFile:  'ConfigFile'
    - script: pip install -r requirements.txt
      displayName: 'Install Requirements'
    - script: |
        pytest -m smoke --ENV=qa --log-file $SYSTEM_ARTIFACTSDIRECTORY/smoke-qa.log --junitxml="TEST-qa-smoke.xml"
      displayName: 'Test with pytest'
    # PUBLISH JUNIT RESULTS
    - task: PublishTestResults@2
      inputs:
        condition: succeededOrFailed()
        testResultsFormat: 'JUnit' # Options: JUnit, NUnit, VSTest, xUnit
        testResultsFiles: '**/TEST-*.xml' 
        #searchFolder: '$(System.DefaultWorkingDirectory)' # Optional
        mergeTestResults: false # Optional
        testRunTitle: 'API_CHECK QA'
        #buildPlatform: # Optional
        #buildConfiguration: # Optional
        publishRunAttachments: true # Optional

通过一些试验,我已经能够确认XML文件始终被创建。我需要在这里解决什么?如果仅在通过测试时显示测试报告,所以它并不是超级有用。

2 个答案:

答案 0 :(得分:0)

我正在使用Ruby和Minitest,但是我发现以下设置允许运行PublishTestResults任务:

- script: |
    pytest -m smoke --ENV=qa --log-file $SYSTEM_ARTIFACTSDIRECTORY/smoke-qa.log --junitxml="TEST-qa-smoke.xml"
  displayName: 'Test with pytest'
  continueOnError: true

我发现此设置的唯一问题是,如果构建失败,它将报告为“部分成功”而不是“失败”。

编辑:

当然,如果您的构建过程在测试任务之后有任何部署任务,则您可能不想使用此设置。

答案 1 :(得分:0)

在您的任务描述中,条件被有效地列为任务输入,因此完全不会考虑。

您有:

# PUBLISH JUNIT RESULTS
- task: PublishTestResults@2
  inputs:
    condition: succeededOrFailed()
    testResultsFormat: 'JUnit' # Options: JUnit, NUnit, VSTest, xUnit
    testResultsFiles: '**/TEST-*.xml' 

正确的设置是

# PUBLISH JUNIT RESULTS
- task: PublishTestResults@2
  inputs:
    testResultsFormat: 'JUnit' # Options: JUnit, NUnit, VSTest, xUnit
    testResultsFiles: '**/TEST-*.xml' 
  condition: succeededOrFailed()

您可以使用条件进行操作的完整列表为here