Как показать результаты тестирования в случае сбоя конвейера

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

Вот полный Ямл

trigger: none
# Variable to store where the initial code checkout path
variables:
- name: BuildDir
  value: Test

stages:

  - stage: Checkout
    pool: $(PoolName)
    jobs:
      - job: CheckoutRedwoodAndSealink
        displayName: Checking out
        steps:
          - checkout: git://Redwood/Redwood@working/conifer
            path: 'Redwood'
            displayName: Checking out Redwood
          - checkout: self
            path: 'Sealink'
            displayName: Checking out Sealink
          - task: PowerShell@2
            displayName: Change the value of BuildDir
            # Store the checkout location
            inputs:
              targetType: 'inline'
              script: 'Write-Host "##vso[task.setvariable variable=BuildDir;isOutput=true]$(Agent.BuildDirectory)"'
            name: setvar 

  - stage: CopyThirdParty
    dependsOn: Checkout
    pool: $(PoolName)
    variables:
      # Set the build directory
      BuildDir: $[stageDependencies.Checkout.CheckoutRedwoodAndSealink.outputs['setvar.BuildDir'] ]

    jobs:
      - job: CopyRedwoodTP
        displayName: Copying Redwood Third Party 
        steps:
        - checkout: none
        - task: CmdLine@2
        - task: CopyFiles@2
          inputs:
            SourceFolder: 'C:\Redwood\third-party'
            Contents: '**'
            TargetFolder: '$(BuildDir)\Redwood\third-party'
            OverWrite: true

  - stage: Build
    dependsOn: 
      - Checkout
      - CopyThirdParty
    pool: $(PoolName)
    variables:
      # Set the build directory
      BuildDir: $[stageDependencies.Checkout.CheckoutRedwoodAndSealink.outputs['setvar.BuildDir'] ]
    jobs:      
    - job: Configure
      displayName: Configuring CMake
      steps:
        - checkout: none
        
        - task: CMake@1
          inputs:
              cmakeArgs: -S ./ -B ./build
              workingDirectory: $(BuildDir)/Sealink
        - task: CMake@1
          inputs:
              cmakeArgs: -S ./ -B ./build
              workingDirectory: $(BuildDir)/Sealink
    - job: Build
      displayName: Building
      dependsOn: Configure
      steps:
        - checkout: none
        
        - task: CMake@1
          inputs:
              cmakeArgs: '--build ./build --config Debug'
              workingDirectory: $(BuildDir)/Sealink
          continueOnError: true
    # if first build failed - try again      
    - job: Build2
      condition: failed()
      dependsOn: Build 
      steps:
        - checkout: none 
        - task: CMake@1
          displayName: Configuring CMake )2)
          inputs:
              cmakeArgs: -S ./ -B ./build
              workingDirectory: $(BuildDir)/Sealink
        - task: CMake@1
          displayName: Building (2)
          inputs:
              cmakeArgs: '--build ./build --config Debug'
              workingDirectory: $(BuildDir)/Sealink

  - stage: RunTests
    pool: $(PoolName)
    dependsOn: 
      - Build
      - Checkout
    variables:
      BuildDir: $[stageDependencies.Checkout.CheckoutRedwoodAndSealink.outputs['setvar.BuildDir'] ]
    jobs:
      - job: RunTests
        displayName: Running Unit Tests
        continueOnError: true
        steps:
        - checkout: none
        - task: PowerShell@2
          inputs:
            targetType: 'inline'
            script: '$(BuildDir)/Sealink/build/UnitTesting/Debug/Test.exe --gtest_output = "xml:./TestResults/"'
            
  - stage: Publish
    pool: $(PoolName)
    dependsOn: 
      - RunTests
      - Checkout
    jobs:
      - job: publish
        
        steps:
        - checkout: none
        - task: PublishTestResults@2
          displayName: Publishng unit test results
          inputs:
            testResultsFormat: 'JUnit'
            testResultsFiles: '*.xml'
            searchFolder: '$(System.DefaultWorkingDirectory)/TestResults'
            failTaskOnFailedTests: true              
              

При использовании continueOnError конвейер продолжает работать, но результаты теста не отображаются.

Привет @RoachFIsher, какова последняя ситуация с проблемой? Находится ли ваш файл результатов теста в указанной вами папке поиска?

Ziyang Liu-MSFT 29.05.2024 11:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Убедитесь, что ваш тест был запущен и результат теста сгенерирован успешно. Ниже приведен мой yaml для справки.

steps:
- script: |
    cmake -B build && cmake --build build
  displayName: 'Build'

- script: |
    cmake -E chdir build ctest -T Test
  displayName: 'Test'

- task: PublishTestResults@2
  inputs:
    testResultsFormat: 'CTest'
    testResultsFiles: '**/Test.xml'

- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Agent.BuildDirectory)'
    ArtifactName: 'drop'
    publishLocation: 'Container'

Результат теста:

  • В журнале шага тестирования:
  • На странице сводки:

В yaml, которым вы поделились, есть только сборка, но нет теста. Вы можете использовать опцию -T, за которой следует ctest, чтобы создать файл результатов теста Test.xml. Этот файл будет создан в каталоге Testing в текущем каталоге сборки. Вы можете добавить задачу PublishBuildArtifacts@1 в свой конвейер для дальнейшей проверки.

Спасибо за это. Я запускаю и публикую тесты согласно моему первоначальному вопросу. Я отредактировал вопрос, чтобы дать полный ЯМЛ.

RoachFIsher 10.05.2024 08:48

Добавьте две PublishBuildArtifacts@1 задачи в свой конвейер. Первый добавляется после PowerShell@2 задачи RunTests задания. PathtoPublish: '$(BuildDir)'. Вы можете проверить, был ли успешно создан файл результатов теста. Второй добавляется после PublishTestResults@2 задачи publish задания. PathtoPublish: '$(System.DefaultWorkingDirectory)/TestResults'. Вы можете проверить, находится ли файл результатов вашего теста в указанном вами searchFolder.

Ziyang Liu-MSFT 10.05.2024 10:18

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