Поделиться через


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

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

Синтаксис

# 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.

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

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

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


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

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

  • Можно использовать подстановочные знаки с одной папкой (*) и рекурсивные подстановочные знаки (**). Например, **/TEST-*.xml выполняет поиск всех 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, задача создает отдельный тестовый запуск для каждого файла результатов теста. Чтобы оптимизировать производительность, результаты всегда будут объединены в один запуск, если существует более 100 файлов результатов, даже если для этого параметра задано значение 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, задача отправляет все файлы результатов теста в виде вложений в тестовый запуск.


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

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

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

Нет.

Замечания

Эта задача публикует результаты тестирования в 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 и JaCo. Если вы используете любую из этих задач, в конвейере не требуется отдельная задача публикации результатов тестирования.

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

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

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

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

Предпосылки

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

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

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

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

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

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

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

Область действия Поле Тест Visual Studio (TRX)
тестового запуска Заголовок заголовок запуска теста, указанный в задаче
Дата начала /TestRun/Times.Attributes["запустить"]. Ценность
Дата завершения /TestRun/Times.Attributes["завершить"]. Ценность
Продолжительность Дата завершена — дата начала
Вложения Дополнительные сведения о поддержке вложений см. в разделе ниже
результата теста Заголовок /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["длительность"]. Значение или /TestRun/Results/WebTestResult.Attributes["startTime"]. Значение + /TestRun/Results/WebTestResult.Attributes["длительность"]. Значение или /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Значение + /TestRun/Results/TestResultAggregation.Attributes["длительность"]. Ценность
Продолжительность /TestRun/Results/UnitTestResult.Attributes["длительность"]. Значение или /TestRun/Results/WebTestResult.Attributes["длительность"]. Значение или /TestRun/Results/TestResultAggregation.Attributes["длительность"]. Ценность
Владелец /TestRun/TestDefinitions/UnitTest/Owner.Attributes["имя"]. Ценность
Результат /TestRun/Results/UnitTestResult.Attributes["результат"]. Значение или /TestRun/Results/WebTestResult.Attributes[""]. Значение или /TestRun/Results/TestResultAggregation.Attributes["результат"]. Ценность
Сообщение об ошибке /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 Or /TestRun/Results/TestResultAggregation/Output/StdErr.InnerText
Имя агента /TestRun/Results/UnitTestResult.Attributes["computerName"]. Значение или /TestRun/Results/WebTestResult.Attributes["имя_компьютера"]. Значение или /TestRun/Results/TestResultAggregation.Attributes["имя_компьютера"]. Ценность
Тестовый файл /TestRun/TestDefinitions/UnitTest.Attributes["хранилище"]. Ценность
Приоритет /TestRun/TestDefinitions/UnitTest.Attributes["приоритет"]. Ценность

Примечание.

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

Полный формат имени для 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["пути"]. Ценность
Объем протестированного кода /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["binaryFile"]. Значение и /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["пути"]. Значение или /TestRun/Results/WebTestResult/ResultFiles/ResultFile.Attributes["пути"]. Значение или /TestRun/Results/TestResultAggregation/ResultFiles/ResultFile.Attributes["пути"]. Ценность

Примечание.

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

Примеры

Докер

Для приложений на основе 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. Отправьте изменение в основную ветвь в репозитории.

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

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

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

Требования

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