PublishTestResults@2 — задача "Публикация результатов теста" версии 2
Публикация результатов теста в Azure Pipelines.
Публикация результатов теста в Azure Pipelines/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.
Входные данные
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
.
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
, задача отправляет все файлы результатов теста в виде вложений в тестовый запуск.
Параметры управления задачами
Помимо входных данных, все задачи имеют параметры управления. Дополнительные сведения см. в разделе Параметры управления и общие свойства задачи.
Выходные переменные
Нет.
Remarks
- Предварительные требования
- Значения по умолчанию для задач
- Сопоставление форматов результатов
- Поддержка вложений
Эта задача публикует результаты тестов в Azure Pipelines или TFS при выполнении тестов, чтобы обеспечить комплексные отчеты и аналитику тестов. Вы можете использовать средство выполнения тестов по своему выбору, которое поддерживает нужный формат результатов. Поддерживаемые форматы результатов: CTest, JUnit (включая PHPUnit), NUnit 2, NUnit 3, Visual Studio Test (TRX) и xUnit 2.
Другие встроенные задачи, такие как Задача Тестирования Visual Studio и Задача Cli Dot NetCore , автоматически публикуют результаты теста в конвейере. Такие задачи, как Ant, Maven, Gulp, Grunt и Xcode , предоставляют результаты публикации в рамках задачи или библиотеки сборки, такие как Cobertura и JaCoCo. Если вы используете какую-либо из этих задач, вам не требуется отдельная задача Публикации результатов теста в конвейере.
Опубликованные результаты теста отображаются на вкладке Тесты в сводке конвейера. Результаты помогут измерить качество конвейера, проверить возможность трассировки, устранить неполадки и владение сбоем диска.
В следующем примере показано, что задача настроена для публикации результатов теста.
Эту задачу также можно использовать в конвейере сборки для публикации результатов протестированного кода , полученных при выполнении тестов, в Azure Pipelines или TFS для получения отчетов об охвате.
Предварительные требования
Если вы используете локальный агент Windows, на компьютере должны быть установлены следующие необходимые компоненты:
- платформа .NET Framework 4.6.2 или более поздней версии
Значения по умолчанию для задач
Параметр по умолчанию использует формат 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"]. Значение |
Примечание
Длительность используется только в том случае, если дата начала и дата завершения недоступны.
Полный формат имени для testName — Namespace.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"]. Значение или /TestRun/Results/WebTestResult/ResultFiles/ResultFile.Attributes["path"]. Value Или /TestRun/Results/TestResultAggregation/ResultFiles/ResultFile.Attributes["path"]. Значение |
Примечание
Параметр отправки файла результатов теста в виде вложения является параметром по умолчанию в задаче, применимым ко всем форматам.
Примеры
Docker
Для приложений на основе Docker существует множество способов создания приложения и выполнения тестов.
- Сборка и тестирование в конвейере сборки: сборки и тесты выполняются в конвейере, а результаты тестирования публикуются с помощью задачи Публикация результатов теста .
- Сборка и тестирование с помощью многоэтапного файла Dockerfile: сборки и тесты выполняются в контейнере с помощью многоэтапного файла Docker, так как результаты теста не публикуются обратно в конвейер.
- Сборка, тестирование и публикация результатов с помощью Dockerfile: сборки и тесты выполняются внутри контейнера, а результаты публикуются обратно в конвейер. См. пример ниже.
Создание, тестирование и публикация результатов с помощью файла Docker
При таком подходе вы создаете код и выполняете тесты в контейнере с помощью файла Docker. Затем результаты теста копируются на узел для публикации в конвейере. Чтобы опубликовать результаты теста в Azure Pipelines, можно использовать задачу Публикация результатов теста . Окончательный образ будет опубликован в Docker или Реестр контейнеров Azure.
Получите код
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
внутри контейнера.Чтобы сделать окончательный образ как можно меньше, содержащий только артефакты среды выполнения и развертывания, замените содержимое существующего
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"]
Определение конвейера сборки
Если у вас есть учетная запись 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)
Отправьте изменение в ветвь main в репозитории.
Если вы используете Реестр контейнеров Azure, убедитесь, что вы предварительно создали реестр в портал Azure. Скопируйте имя администратора и пароль, указанные в разделе Ключи доступа параметров реестра в портал Azure.
Обновите конвейер сборки следующими параметрами:
- Пул агентов:
Hosted Ubuntu 1604
- dockerId: задайте значение идентификатора Docker для DockerHub или имя пользователя администратора для Реестр контейнеров Azure.
- dockerPassword: задайте значение пароля для DockerHub или пароля администратора Реестр контейнеров Azure.
- Путь к файлу YAML:
/.vsts-ci.docker.yml
- Пул агентов:
Очередь новой сборки и watch ее создания и отправки образа Docker в реестр, а результаты тестирования — в Azure DevOps.
Требования
Требование | Описание |
---|---|
Типы конвейеров | YAML, классическая сборка, классический выпуск |
Выполняется в | Агент, DeploymentGroup |
Требования | None |
Capabilities | Эта задача не удовлетворяет требованиям для последующих задач в задании. |
Ограничения команд | Любой |
Устанавливаемые переменные | Любой |
Версия агента | 2.0.0 или более поздней версии |
Категория задач | Тест |