Задача Azure DevOps PublishTestResults - как опубликовать результаты, если тесты не пройдены - PullRequest
0 голосов
/ 08 ноября 2018

Во время процесса сборки Azure DevOps я запускаю набор тестов на основе pytest. У меня есть две работы для выполнения этих тестов в двух разных средах.

В каждом задании я запускаю тесты pytest с помощью задачи сценария и генерирую выходной файл xml в стиле junit, а затем задаю задачу PublishTestResults для публикации этого файла xml. Это прекрасно работает, и я могу просмотреть результаты своих тестов в пользовательском интерфейсе отчета о тестах сборки Azure, но только если все тесты пройдены. Если какие-либо тесты не пройдены, задача публикации пропускается, и тесты не отображаются в пользовательском интерфейсе.

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 голосов
/ 14 мая 2019

В вашем описании задачи условие фактически указывается в качестве ввода задачи и, следовательно, вообще не будет учитываться.

Вы имели:

# 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()

Полный список того, что вы можете сделать с условиями: здесь

0 голосов
/ 14 ноября 2018

Я использую 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

Единственная проблема, с которой я столкнулся при использовании этого параметра, заключается в том, что в случае сбоя сборки он сообщает как «Частично успешно», а не как «Сбой».

редактирование:

Конечно, если ваш процесс сборки имеет какие-либо задачи развертывания после тестовой задачи, вы можете не использовать этот параметр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...