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, компьютер должен установить следующее:
- .NET Framework 4.6.2 или более поздней версии
Значения по умолчанию для задач
Параметр по умолчанию использует формат 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.
Получение кода
Создайте файл
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)
Отправьте изменение в основную ветвь в репозитории.
Если вы используете реестр контейнеров Azure, убедитесь, что вы предварительно создали реестр на портале Azure. Скопируйте имя пользователя и пароль администратора, отображаемые в разделе "Ключи доступа ", раздела параметров реестра на портале Azure.
Обновите конвейер сборки следующим образом.
-
пула агентов:
Hosted Ubuntu 1604
- dockerId: задайте значение идентификатора Docker для DockerHub или имени пользователя администратора для реестра контейнеров Azure.
- dockerPassword: задайте значение пароля для DockerHub или реестра контейнеров Azure администратора.
-
пути к файлу YAML:
/.vsts-ci.docker.yml
-
пула агентов:
Очередь новой сборки и просмотр ее создания и отправки образа Docker в реестр и результатов теста в Azure DevOps.
Требования
Требование | Описание |
---|---|
Типы конвейеров | YAML, классическая сборка, классический выпуск |
Выполняется в | Агент, DeploymentGroup |
требования | Нет |
возможностей | Эта задача не удовлетворяет требованиям к последующим задачам в задании. |
ограничения команд | Любое |
переменные settable | Любое |
Версия агента | 2.0.0 или более поздней версии |
Категория задач | Тест |