PublishTestResults@2 — задача "Публикация результатов теста" версии 2

Публикация результатов тестирования в Azure Pipelines.

Публикация результатов тестирования в Azure Pipelines/TFS.

Публикация результатов теста в VSTS/TFS.

Синтаксис

# Publish Test Results v2
# Publish test results to Azure Pipelines.
- task: PublishTestResults@2
  inputs:
    testResultsFormat: 'JUnit' # 'JUnit' | 'NUnit' | 'VSTest' | 'XUnit' | 'CTest'. Alias: testRunner. Required. Test result format. Default: JUnit.
    testResultsFiles: '**/TEST-*.xml' # string. Required. Test results files. Default: **/TEST-*.xml.
    #searchFolder: '$(System.DefaultWorkingDirectory)' # string. Search folder. Default: $(System.DefaultWorkingDirectory).
    #mergeTestResults: false # boolean. Merge test results. Default: false.
    #failTaskOnFailedTests: false # boolean. Fail if there are test failures. Default: false.
    #failTaskOnFailureToPublishResults: false # boolean. Fail if there is failure in publishing test results. Default: false.
    #failTaskOnMissingResultsFile: false # boolean. Fail if no result files are found. Default: false.
    #testRunTitle: # string. Test run title. 
  # Advanced
    #buildPlatform: # string. Alias: platform. Build Platform. 
    #buildConfiguration: # string. Alias: configuration. Build Configuration. 
    #publishRunAttachments: true # boolean. Upload test results files. Default: true.
# Publish Test Results v2
# Publish test results to Azure Pipelines.
- task: PublishTestResults@2
  inputs:
    testResultsFormat: 'JUnit' # 'JUnit' | 'NUnit' | 'VSTest' | 'XUnit' | 'CTest'. Alias: testRunner. Required. Test result format. Default: JUnit.
    testResultsFiles: '**/TEST-*.xml' # string. Required. Test results files. Default: **/TEST-*.xml.
    #searchFolder: '$(System.DefaultWorkingDirectory)' # string. Search folder. Default: $(System.DefaultWorkingDirectory).
    #mergeTestResults: false # boolean. Merge test results. Default: false.
    #failTaskOnFailedTests: false # boolean. Fail if there are test failures. Default: false.
    #testRunTitle: # string. Test run title. 
  # Advanced
    #buildPlatform: # string. Alias: platform. Build Platform. 
    #buildConfiguration: # string. Alias: configuration. Build Configuration. 
    #publishRunAttachments: true # boolean. Upload test results files. Default: true.
# Publish Test Results v2
# Publish Test Results to Azure Pipelines/TFS.
- task: PublishTestResults@2
  inputs:
    testResultsFormat: 'JUnit' # 'JUnit' | 'NUnit' | 'VSTest' | 'XUnit'. Alias: testRunner. Required. Test result format. Default: JUnit.
    testResultsFiles: '**/TEST-*.xml' # string. Required. Test results files. Default: **/TEST-*.xml.
    #searchFolder: '$(System.DefaultWorkingDirectory)' # string. Search folder. Default: $(System.DefaultWorkingDirectory).
    #mergeTestResults: false # boolean. Merge test results. Default: false.
    #testRunTitle: # string. Test run title. 
  # Advanced
    #buildPlatform: # string. Alias: platform. Build Platform. 
    #buildConfiguration: # string. Alias: configuration. Build Configuration. 
    #publishRunAttachments: true # boolean. Upload test results files. Default: true.
# YAML Syntax is not supported in TFS 2018.
# Use the classic designer to add and configure tasks.
# See the following Inputs section for details on the inputs that this task supports.

Входные данные

testResultsFormat - Формат результатов теста
Входной псевдоним: testRunner. string. Обязательный. Допустимые значения: JUnit, NUnit, VSTest, XUnit, CTest. Значение по умолчанию: JUnit.

Задает формат файлов результатов, которые требуется опубликовать. Поддерживаются следующие форматы: CTest, JUnit, NUnit 2, NUnit 3, Visual Studio Test (TRX) и xUnit 2.


testResultsFormat - Формат результатов теста
Входной псевдоним: testRunner. string. Обязательный. Допустимые значения: JUnit, NUnit, VSTest, XUnit. Значение по умолчанию: JUnit.

Задает формат файлов результатов, которые требуется опубликовать. Поддерживаются следующие форматы: CTest, JUnit, NUnit 2, NUnit 3, Visual Studio Test (TRX) и xUnit 2.


testResultsFiles - Файлы результатов тестирования
string. Обязательный. Значение по умолчанию: **/TEST-*.xml.

Указывает один или несколько файлов результатов теста.

  • Можно использовать подстановочный знак с одной папкой (*) и рекурсивные подстановочные знаки (**). Например, выполняет поиск всех XML-файлов, **/TEST-*.xml имена которых начинаются с TEST- во всех подкаталогах. При использовании VSTest в качестве формата результатов теста тип файла следует изменить на .trx , например. **/TEST-*.trx
  • Можно указать несколько путей, разделенных новой строкой.
  • Кроме того, принимает шаблоны мини-сопоставления.

Например, !TEST[1-3].xml исключает файлы с именами TEST1.xml, TEST2.xmlили TEST3.xml.


testResultsFiles - Файлы результатов тестирования
string. Обязательный. Значение по умолчанию: **\TEST-*.xml.

Указывает один или несколько файлов результатов теста.

  • Можно использовать подстановочный знак с одной папкой (*) и рекурсивные подстановочные знаки (**). Например, выполняет поиск всех XML-файлов, **/TEST-*.xml имена которых начинаются с TEST- во всех подкаталогах. При использовании VSTest в качестве формата результатов теста тип файла следует изменить на .trx , например. **/TEST-*.trx
  • Можно указать несколько путей, разделенных новой строкой.
  • Кроме того, принимает шаблоны мини-сопоставления.

Например, !TEST[1-3].xml исключает файлы с именами TEST1.xml, TEST2.xmlили TEST3.xml.


searchFolder - Папка поиска
string. Значение по умолчанию: $(System.DefaultWorkingDirectory).

Необязательный элемент. Указывает папку для поиска файлов результатов теста.


mergeTestResults - Объединение результатов теста
boolean. Значение по умолчанию: false.

Если значение этого логического значения равно true, задача сообщает о результатах теста из всех файлов при одном тестовом запуске. Если значение равно false, задача создает отдельный тестовый запуск для каждого файла результатов теста.

Примечание

Используйте параметр результаты теста слиянием для объединения файлов из одной платформы тестирования, чтобы обеспечить правильное вычисление сопоставления результатов и длительности.


failTaskOnFailedTests - Сбой при сбое теста
boolean. Значение по умолчанию: false.

Необязательный элемент. Если значение этого логического значения равно true, задача завершится ошибкой, если какой-либо из тестов в файле результатов помечен как неудачный. По умолчанию используется значение false, которое просто публикует результаты из файла результатов.


failTaskOnFailureToPublishResults - Сбой при сбое при публикации результатов теста
boolean. Значение по умолчанию: false.

Если trueзадано значение , задача завершается сбоем при публикации результатов теста.


failTaskOnMissingResultsFile - Сбой, если файлы результатов не найдены
boolean. Значение по умолчанию: false.

Если результирующих файлов не найдено, не удастся выполнить задачу.


testRunTitle - Заголовок тестового запуска
string.

Необязательный элемент. Указывает имя тестового запуска, для которого будут представлены результаты. Можно использовать имена переменных, объявленные в конвейере сборки или выпуска.


buildPlatform - Платформа сборки
Входной псевдоним: platform. string.

Необязательный элемент. Указывает платформу сборки, для которой следует сообщить о тестовом запуске. Пример: x64 или x86. Если вы определили переменную для платформы в задаче сборки, используйте ее здесь.


buildConfiguration - Конфигурация сборки
Входной псевдоним: configuration. string.

Необязательный элемент. Указывает конфигурацию сборки, по которой следует сообщать о тестовом запуске. Пример: Debug или Release. Если вы определили переменную для конфигурации в задаче сборки, используйте ее здесь.


publishRunAttachments - Отправка файлов результатов теста
boolean. Значение по умолчанию: true.

Необязательный элемент. Если значение этого логического значения равно true, задача передает все файлы результатов теста в виде вложений в тестовый запуск.


testRunner - Формат результатов теста
string. Обязательный. Допустимые значения: JUnit, NUnit, VSTest, XUnit. Значение по умолчанию: JUnit.

Задает формат файлов результатов, которые требуется опубликовать. Поддерживаются следующие форматы: CTest, JUnit, NUnit 2, NUnit 3, Visual Studio Test (TRX) и xUnit 2.


platform - Платформы
string.

Необязательный элемент. Указывает платформу сборки, для которой следует сообщить о тестовом запуске. Пример: x64 или x86. Если вы определили переменную для платформы в задаче сборки, используйте ее здесь.


configuration - Конфигурации
string.

Необязательный элемент. Указывает конфигурацию сборки, по которой следует сообщать о тестовом запуске. Пример: Debug или Release. Если вы определили переменную для конфигурации в задаче сборки, используйте ее здесь.


Параметры управления задачами

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

Выходные переменные

Нет.

Remarks

Эта задача публикует результаты тестирования в Azure Pipelines или TFS при выполнении тестов, чтобы обеспечить комплексные отчеты и аналитику тестов. Вы можете использовать выбранное средство выполнения тестов, которое поддерживает нужный формат результатов. Поддерживаемые форматы результатов: CTest, JUnit (включая PHPUnit), NUnit 2, NUnit 3, Visual Studio Test (TRX) и xUnit 2.

Другие встроенные задачи, такие как тестовая задача Visual Studio и задача Dot NetCore CLI , автоматически публикуют результаты теста в конвейере. Такие задачи, как Ant, Maven, Gulp, Grunt и Xcode , предоставляют результаты публикации в качестве варианта в рамках задачи или создают библиотеки, такие как Cobertura и JaCoCo. Если вы используете какую-либо из этих задач, отдельная задача "Публикация результатов тестирования " в конвейере не требуется.

Опубликованные результаты теста отображаются на вкладке Тесты в сводке конвейера. Результаты помогают измерить качество конвейера, проверить возможность трассировки, устранить неполадки и владение сбоем диска.

В следующем примере показано, что задача настроена для публикации результатов теста.

Открытие страницы журнала тестов

Эту задачу также можно использовать в конвейере сборки для публикации результатов протестированного кода , полученных при выполнении тестов, в Azure Pipelines или TFS для получения отчетов об охвате.

Предварительные требования

Если вы используете локальный агент Windows, на компьютере должны быть установлены следующие необходимые компоненты:

Значения по умолчанию для задач

Параметр по умолчанию использует формат JUnit для публикации результатов теста. При использовании VSTest в качестве testRunner параметр testResultsFiles следует изменить на **/TEST-*.trx.

testResultsFormat — это псевдоним входного имени testRunner . Файлы результатов могут быть созданы несколькими средствами выполнения, а не только определенными средствами выполнения. Например, формат результатов jUnit поддерживается многими средствами выполнения, а не только jUnit.

Сведения о публикации результатов тестирования для Python с помощью YAML см. в разделе Python в разделе Экосистемы этих разделов , в котором также содержатся примеры для других языков.

Сопоставление форматов результатов

В этой таблице перечислены поля, указанные на вкладке Тесты в сводке по сборке или выпуску, а также соответствующее сопоставление с атрибутами в поддерживаемых форматах результатов теста.

Область Поле Тест Visual Studio (TRX)
Тестовый запуск Заголовок Заголовок тестового запуска , указанный в задаче
Дата начала /TestRun/Times.Attributes["start"]. Значение
Дата завершения /TestRun/Times.Attributes["finish"]. Значение
Duration Дата завершения — дата начала
Вложения См. раздел поддержки вложений ниже.
Результат теста Заголовок /TestRun/Results/UnitTestResult.Attributes["testName"]. Значение или /TestRun/Results/WebTestResult.Attributes["testName"]. Значение или /testRun/Results/TestResultAggregation.Attributes["testName"]. Значение
Дата начала /TestRun/Results/UnitTestResult.Attributes["startTime"]. Значение или /TestRun/Results/WebTestResult.Attributes["startTime"]. Значение или /testRun/Results/TestResultAggregation.Attributes["startTime"]. Значение
Дата завершения /TestRun/Results/UnitTestResult.Attributes["startTime"]. Значение + /TestRun/Results/UnitTestResult.Attributes["duration"]. Значение или /TestRun/Results/WebTestResult.Attributes["startTime"]. Value + /TestRun/Results/WebTestResult.Attributes["duration"]. Значение или /testRun/Results/TestResultAggregation.Attributes["startTime"]. Value + /TestRun/Results/TestResultAggregation.Attributes["duration"]. Значение
Duration /TestRun/Results/UnitTestResult.Attributes["duration"]. Значение или /TestRun/Results/WebTestResult.Attributes["duration"]. Значение или /testRun/Results/TestResultAggregation.Attributes["duration"]. Значение
Владелец /TestRun/TestDefinitions/UnitTest/Owners/Owner.Attributes["name"]. Значение
Результат /TestRun/Results/UnitTestResult.Attributes["outcome"]. Value или /TestRun/Results/WebTestResult.Attributes["outcome"]. Value или /testRun/Results/TestResultAggregation.Attributes["outcome"]. Значение
Сообщение об ошибке /TestRun/results/UnitTestResult/Output/ErrorInfo/Message.InnerText или /TestRun/results/WebTestResultOutput/ErrorInfo/Message.InnerText или /TestRun/results/testResultAggregation/Output/ErrorInfo/Message.InnerText
Трассировка стека /TestRun/Results/UnitTestResult/Output/ErrorInfo/StackTrace.InnerText или /TestRun/Results/WebTestResultOutput/ErrorInfo/StackTrace.InnerText или /TestRun/Results/TestResultAggregation/Output/ErrorInfo/StackTrace.InnerText
Вложения См. раздел поддержки вложений ниже.
Журнал консоли /TestRun/Results/UnitTestResult/Output/StdOut.InnerText или /TestRun/results/WebTestResultOutput/Output/StdOut.InnerText или /TestRun/Results/TestResultAggregation/Output/StdOut.InnerText
Журнал ошибок консоли /TestRun/Results/UnitTestResult/Output/StdErr.InnerText или /TestRun/results/WebTestResultOutput/Output/StdErr.InnerText или /TestRun/Results/TestResultAggregation/Output/StdErr.InnerText
Имя агента /TestRun/Results/UnitTestResult.Attributes["computerName"]. Значение или /TestRun/Results/WebTestResult.Attributes["computerName"]. Значение или /testRun/Results/TestResultAggregation.Attributes["computerName"]. Значение
Тестовый файл /TestRun/TestDefinitions/UnitTest.Attributes["storage"]. Значение
Приоритет /TestRun/TestDefinitions/UnitTest.Attributes["priority"]. Значение

Примечание

Длительность используется только в том случае, если недоступны дата начала и дата завершения .

Полный формат имени для testNameNamespace.Testclass.Methodname с ограничением символов 512. Если тест управляется данными и имеет параметры, ограничение символов будет включать параметры.

При публикации результата теста может появиться следующая ошибка: Не удалось опубликовать результаты теста: указан недопустимый приоритет

Эта ошибка возникает, если какой-либо из методов теста имеет приоритет выше 255, исправьте приоритет метода теста в коде и выполните тесты снова. Вы можете просмотреть созданный TRX-файл, чтобы увидеть все тесты с приоритетом более 255.

Поддержка вложений

Задача "Опубликовать результаты теста" обеспечивает поддержку вложений для тестового запуска и результатов теста в следующих форматах. Для общедоступных проектов поддерживается 2 ГБ общих вложений.

Тест Visual Studio (TRX)

Область Тип Путь
Тестовый запуск Сборщик данных /TestRun/ResultSummary/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Значение
Результат теста /TestRun/ResultSummary/ResultFiles/ResultFile.Attributes["path"]. Значение
Покрытие кода /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["binaryFile"]. Value And /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["pdbFile"]. Значение
Результат теста Сборщики данных /TestRun/Results/UnitTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Значение или /testRun/Results/WebTestResult/collectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Значение или /testRun/Results/TestResultAggregation/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Значение
Результат теста /TestRun/Results/UnitTestResult/ResultFiles/ResultFile.Attributes["path"]. Value Or /TestRun/Results/WebTestResult/ResultFiles/ResultFile.Attributes["path"]. Value Or /TestRun/Results/TestResultAggregation/ResultFiles/ResultFile.Attributes["path"]. Значение

Примечание

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

Примеры

Docker

Для приложений на основе Docker существует множество способов создания приложения и выполнения тестов.

  • Сборка и тестирование в конвейере сборки: сборки и тесты выполняются в конвейере, а результаты теста публикуются с помощью задачи Публикация результатов теста .
  • Сборка и тестирование с помощью многоэтапного Dockerfile: сборки и тесты выполняются в контейнере с помощью многоэтапного файла Docker, так как такие результаты теста не публикуются в конвейере.
  • Сборка, тестирование и публикация результатов с помощью Dockerfile: сборки и тесты выполняются внутри контейнера, а результаты публикуются обратно в конвейер. См. пример ниже.

Сборка, тестирование и публикация результатов с помощью файла Docker

При таком подходе вы создаете код и выполняете тесты в контейнере с помощью файла Docker. Затем результаты теста копируются на узел для публикации в конвейере. Чтобы опубликовать результаты теста в Azure Pipelines, можно использовать задачу Публикация результатов теста . Окончательный образ будет опубликован в Docker или Реестр контейнеров Azure.

Получите код
  1. Создайте Dockerfile.build файл в корне каталога проекта со следующим кодом:

    # Build and run tests inside the docker container
    FROM mcr.microsoft.com/dotnet/sdk:2.1
    WORKDIR /app
    # copy the contents of agent working directory on host to workdir in container
    COPY . ./
    # dotnet commands to build, test, and publish
    RUN dotnet restore
    RUN dotnet build -c Release
    RUN dotnet test dotnetcore-tests/dotnetcore-tests.csproj -c Release --logger "trx;LogFileName=testresults.trx"
    RUN dotnet publish -c Release -o out
    ENTRYPOINT dotnet dotnetcore-sample/out/dotnetcore-sample.dll
    

    Этот файл содержит инструкции по сборке кода и выполнению тестов. Затем тесты копируются в файл testresults.trx внутри контейнера.

  2. Чтобы сделать окончательный образ как можно меньше, содержащий только артефакты среды выполнения и развертывания, замените содержимое существующего Dockerfile на следующее:

    # This Dockerfile creates the final image to be published to Docker or
    # Azure Container Registry
    # Create a container with the compiled asp.net core app
    FROM mcr.microsoft.com/dotnet/aspnet:2.1
    # Create app directory
    WORKDIR /app
    # Copy only the deployment artifacts
    COPY /out .
    ENTRYPOINT ["dotnet", "dotnetcore-sample.dll"]
    
Определение конвейера сборки
  1. Если у вас есть учетная запись Docker Hub и вы хотите отправить образ в реестр Docker, замените содержимое .vsts-ci.docker.yml файла следующим кодом:

    # Build Docker image for this app, to be published to Docker Registry
    pool:
      vmImage: 'ubuntu-latest'
    variables:
      buildConfiguration: 'Release'
    steps:
    - script: |
        docker build -f Dockerfile.build -t $(dockerId)/dotnetcore-build:$BUILD_BUILDID .
        docker run --name dotnetcoreapp --rm -d $(dockerId)/dotnetcore-build:$BUILD_BUILDID
        docker cp dotnetcoreapp:app/dotnetcore-tests/TestResults $(System.DefaultWorkingDirectory)
        docker cp dotnetcoreapp:app/dotnetcore-sample/out $(System.DefaultWorkingDirectory)
        docker stop dotnetcoreapp
    
    - task: PublishTestResults@2
      inputs:
        testRunner: VSTest
        testResultsFiles: '**/*.trx'
        failTaskOnFailedTests: true
    
    - script: |
        docker build -f Dockerfile -t $(dockerId)/dotnetcore-sample:$BUILD_BUILDID .
        docker login -u $(dockerId) -p $pswd
        docker push $(dockerId)/dotnetcore-sample:$BUILD_BUILDID
      env:
        pswd: $(dockerPassword)
    

    Кроме того, если вы настраиваете Реестр контейнеров Azure и хотите отправить образ в этот реестр, замените содержимое .vsts-ci.yml файла следующим кодом:

    # Build Docker image for this app to be published to Azure Container Registry
    pool:
      vmImage: 'ubuntu-latest'
    variables:
      buildConfiguration: 'Release'
    
    steps:
    - script: |
        docker build -f Dockerfile.build -t $(dockerId)/dotnetcore-build:$BUILD_BUILDID .
        docker run --name dotnetcoreapp --rm -d $(dockerId)/dotnetcore-build:$BUILD_BUILDID
        docker cp dotnetcoreapp:app/dotnetcore-tests/TestResults $(System.DefaultWorkingDirectory)
        docker cp dotnetcoreapp:app/dotnetcore-sample/out $(System.DefaultWorkingDirectory)
        docker stop dotnetcoreapp
    
    - task: PublishTestResults@2
      inputs:
        testRunner: VSTest
        testResultsFiles: '**/*.trx'
        failTaskOnFailedTests: true
    
    - script: |
        docker build -f Dockerfile -t $(dockerId).azurecr.io/dotnetcore-sample:$BUILD_BUILDID .
        docker login -u $(dockerId) -p $pswd $(dockerid).azurecr.io
        docker push $(dockerId).azurecr.io/dotnetcore-sample:$BUILD_BUILDID 
      env:
        pswd: $(dockerPassword)
    
  2. Отправьте изменение в ветвь main в репозитории.

  3. Если вы используете Реестр контейнеров Azure, убедитесь, что вы предварительно создали реестр в портал Azure. Скопируйте имя пользователя и пароль администратора, указанные в разделе Ключи доступа параметров реестра в портал Azure.

  4. Обновите конвейер сборки следующим образом:

    • Пул агентов: Hosted Ubuntu 1604
      • dockerId. Задайте значение идентификатора Docker для DockerHub или имя администратора для Реестр контейнеров Azure.
      • dockerPassword. Задайте пароль для DockerHub или пароль администратора Реестр контейнеров Azure.
    • Путь к файлу YAML: /.vsts-ci.docker.yml
  5. Поставьте новую сборку в очередь и watch создать и отправить образ Docker в реестр, а результаты тестирования — в Azure DevOps.

Требования

Требование Описание
Типы конвейеров YAML, классическая сборка, классический выпуск
Выполняется в Агент, DeploymentGroup
Требования Нет
Capabilities Эта задача не удовлетворяет требованиям для последующих задач в задании.
Ограничения команд Любой
Устанавливаемые переменные Любой
Версия агента 2.0.0 или более поздней версии
Категория задач Тест