Неудачный тест не приводит к сбою задачи в YAML

У меня есть конвейер сборки, как показано ниже

    variables:
    - name: BuildParameters.solution
      value: '**/*.sln'
    - name: buildConfiguration
      value: Release
    name: $(date:yyyyMMdd)$(rev:.r)
    trigger: none
    resources:
      repositories:
      - repository: self
        type: git
    stages:
    - stage: __default
      jobs:
      - job: Job_1
        displayName: Agent job 1
        pool:
          vmImage: windows-2019
        steps:
        - task: UseDotNet@2
          displayName: '.NET Core 3.1.404'
          inputs:
            version: '3.1.404'
            packageType: sdk
        - task: DotNetCoreCLI@2
          enabled: true
          displayName: dotnet test
          continueOnError: true
          timeoutInMinutes: 0
          inputs:
            command: test
            projects: '**/*test/*.csproj'
            arguments: --configuration $(buildConfiguration) --verbosity n --collect "Code coverage"
            publishTestResults: true        
        - task: PublishTestResults@2
          inputs:
            testResultsFormat: XUnit
            testResultsFiles: '**/TEST.xml'
            mergeTestResults: true
            failTaskOnFailedTests: true

Я намеренно сломал тест

Этот тест не пройден, но задача публикации результатов теста не проваливается полностью

я получаю предупреждение

##[warning]No test result files matching **/TEST.xml were found. xunit

Было ли у кого-нибудь такое?

Досадно, что если тест терпит неудачу, конвейер Azure классифицирует это как частичный успех, что не идеально. Я пытаюсь попасть в ситуацию, когда в случае сбоя теста мой конвейер не работает.

Этот пайплайн используется для проверки запросов на вытягивание — т. е. для сборки кода в PR и обеспечения прохождения всех тестов.

Когда я искал это, были ссылки на установку .NET 4.6.2 или более поздней версии, но это используется внутри конвейера сборки, поэтому не знаю, как это сделать.

Я что-то пропустил в тестовом задании dot net?

Павел

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
963
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда вы устанавливаете в поле publishTestResults значение true для тестовой задачи dotnet. Смотрите ниже отрывок из здесь.

Этот параметр добавляет --logger trx --results-directory $(Agent.TempDirectory) к аргументам командной строки.

Приведенные выше команды сгенерируют результат теста в формате VSTest (trx) и выведут результат в папку $(Agent.TempDirectory)

Поэтому вам нужно изменить задачу PublishTestResults@2, как показано ниже:

 - task: PublishTestResults@2
         inputs:
           testResultsFormat: VSTest  #change the format to VSTest
           testResultsFiles: '**/*.trx'  #change to find .trx file
           mergeTestResults: true
           failTaskOnFailedTests: true
           searchFolder: '$(Agent.TempDirectory)' #search the .trx file in $(Agent.TempDirectory)

Обычно в поле continueOnError по умолчанию установлено значение false. И тестовая задача dotnet завершится ошибкой, если какой-либо тест не пройден. См. ниже:

Если в поле continueOnError установлено значение true. Тестовая задача dotnet и конвейер покажут состояние Warnig.

Таким образом, вы можете попробовать установить в поле continueOnError значение false, что приведет к сбою задачи и конвейера, если какой-либо тест не пройден. И не будет необходимости использовать PublishTestResults задачу. Если для publishTestResults установлено значение true для тестовой задачи dotnet, результат теста будет автоматически опубликован тестовой задачей dotnet. См. ниже:

 - task: DotNetCoreCLI@2
          enabled: true
          displayName: dotnet test
          continueOnError: false
          timeoutInMinutes: 0
          inputs:
            command: test
            projects: '**/*test/*.csproj'
            arguments: --configuration $(buildConfiguration) --verbosity n --collect "Code coverage"
            publishTestResults: true   

Спасибо, это выглядит обнадеживающе, однако я видел, что в задаче публикации результатов теста есть опция для mergetestresults, но я не вижу, как это сделать в тестовой задаче dotnet?

Paul 24.12.2020 12:28

В тестовой задаче @Paul dotnet нет параметра mergetestresults. Если вы имели в виду отображение результатов тестирования различных тестовых проектов на вкладке «Тесты» на странице сводки сборки, использование только тестовой задачи dotnet также может отображать все результаты тестирования на вкладке «Тесты». Если вам нужно использовать опцию mergetestresults. Затем вы можете просто изменить свою задачу publishtestresult, как показано выше.

Levi Lu-MSFT 25.12.2020 09:06

Другие вопросы по теме

Похожие вопросы