Тестовые отчеты

Для каждой опции отчета требуется пакет расширения, указанный в соответствующем разделе. Добавьте пакет напрямую или используйте конфигурацию или профиль тестового пакета SDK, включающую его. Расширения отчетов не являются частью ядра MTP, поэтому такой параметр --report-trx не распознается, когда тестовое приложение не регистрирует его расширение. Запустите тестовое приложение с помощью --help, либо запустите dotnet test --help в режиме MTP, чтобы убедиться, что параметр доступен.

Подсказка

При использовании Microsoft.Testing.Platform.MSBuild (включается транзитивно MSTest, NUnit и xUnit runners), эти расширения регистрируются автоматически при установке пакетов NuGet — изменения кода не требуются. Регистрация вручную, указанная в этой статье, требуется только в том случае, если вы отключили автоматическую точку входа, задав параметр <GenerateTestingPlatformEntryPoint>false</GenerateTestingPlatformEntryPoint>.

Имена файлов отчета

Каждое расширение отчёта записывает свой файл в каталог результатов тестов, который можно задать с помощью параметра --results-directory. Чтобы переопределить имя, используйте соответствующий --report-*-filename параметр. Каждый раздел отчета содержит имя по умолчанию для этого отчета.

Имя файла может содержать относительный путь, который остается в каталоге результатов теста, и он может использовать следующие элементы замены (заполнители):

Placeholder Description
{asm} Имя сборки записи или unknown если она недоступна.
{tfm} Идентификатор целевой платформы, определяемый во время выполнения, например net9.0.
{arch} Архитектура процесса, например x64, x86или arm64.
{pname} имя процесса;
{pid} Идентификатор процесса.
{time} Метка времени высокой точности.

Например, --report-trx-filename "{asm}_{tfm}_{arch}.trx" воспроизводит имя TRX по умолчанию.

Если имя файла по умолчанию или явное TRX, HTML или JUnit уже существует для источника тестирования, расширение предупреждает и перезаписывает файл. Начиная с предварительной версии MTP 2.4, CTRF использует то же поведение. Чтобы сохранить журнал отчетов, включите {time}.

Замечание

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

Консолидация отчетов

Начиная с MTP 2.4.0, MTP автоматически выполняет постобработку артефактов отчётов после вызова dotnet test, если оно запускает несколько тестовых модулей, или после того, как механизм повторных попыток выполняет несколько попыток. Эта функция экспериментальна в MTP 2.4.0.

Расширения TRX, JUnit, CTRF и HTML группируют совместимые артефакты по виду отчета и создают сводный отчет в подкаталоге merged каталога результатов тестов. Консолидация CTRF объединяет результаты модулей и сводит повторные попытки к итоговому результату теста с историей повторных попыток. Консолидация HTML создает объединенную сводку и сохраняет исходные отчеты для каждого процесса.

Для пользовательских расширений отчетов экспериментальный IArtifactPostProcessor API предоставляет отдельные TestModules режимы обработки и RetryAttempts режимы обработки. Дополнительные сведения см. в разделе "РасширенияIArtifactPostProcessor".

Visual Studio тестовые отчеты (TRX)

Файл результатов теста Visual Studio (или TRX) — это формат по умолчанию для публикации результатов теста. Для этого расширения требуется пакет NuGet Microsoft.Testing.Extensions.TrxReport .

Регистрация вручную

var builder = await TestApplication.CreateBuilderAsync(args);
builder.AddTrxReportProvider();

Замечание

При использовании ручной регистрации зарегистрируйте поставщика отчетов TRX последний раз. Текущая реализация зависит от порядка регистрации, поэтому регистрация ее после всех остальных расширений гарантирует, что она записывает все тестовые данные.

Замечание

Доступно в MTP начиная с версии 1.9.0, отчет TRX включает поле тестирования Description .

Замечание

Начиная с версии 2.3.0 в MTP результаты TRX записываются на диск по мере выполнения. Если тестовый узел завершает работу, TRX-файл сохраняет собранные результаты до сбоя.

Начиная с предварительной версии MTP 2.4, файл TRX, созданный MTP, сохраняет метаданные MSTest [WorkItem] и [GitHubWorkItem].

Options

Опция Description
--report-trx Создает отчет TRX.
--report-trx-filename Имя созданного отчета TRX. Начиная с MTP 2.3.0, по умолчанию используется детерминированная {asm}_{tfm}_{arch}.trx форма; до MTP 2.3.0 значение по умолчанию.<UserName>_<MachineName>_<yyyy-MM-dd_HH_mm_ss.fffffff>.trx Сведения о настройке имени см. в разделе "Имена файлов отчета".

Отчет сохраняется в папке по умолчанию TestResults, которую можно указать с помощью аргумента командной строки --results-directory.

HTML-отчеты

HTML-отчет создает интерактивный самодостаточный HTML-файл для сеанса тестирования. Для этого расширения требуется пакет NuGet Microsoft.Testing.Extensions.HtmlReport.

Замечание

Доступно в MTP начиная с версии 2.3.0. Это расширение является экспериментальным, а его параметры и формат выходных данных могут измениться в будущей версии.

Регистрация вручную

var builder = await TestApplication.CreateBuilderAsync(args);
builder.AddHtmlReportProvider();

Options

Опция Description
--report-html Создает HTML-отчет.
--report-html-filename Имя созданного HTML-отчета. Значение должно оканчиваться на .html. Значение по умолчанию — {asm}_{tfm}_{arch}.html. Сведения о настройке имени см. в разделе "Имена файлов отчета". Требует использования --report-html.

Отчеты JUnit

Отчет JUnit создает XML-файл, совместимый с JUnit, для тестового сеанса. Для этого расширения требуется пакет NuGet Microsoft.Testing.Extensions.JUnitReport.

Замечание

Доступно в MTP начиная с версии 2.3.0. Это расширение является экспериментальным, а его параметры и формат выходных данных могут измениться в будущей версии.

Начиная с MSTest.Sdk 4.3, включите это расширение с помощью <EnableMicrosoftTestingExtensionsJUnitReport>true</EnableMicrosoftTestingExtensionsJUnitReport>. Расширение не является частью профилей DefaultMSTest.SdkAllMicrosoft.

Регистрация вручную

var builder = await TestApplication.CreateBuilderAsync(args);
builder.AddJUnitReportProvider();

Options

Опция Description
--report-junit Создает XML-отчет JUnit.
--report-junit-filename Имя созданного XML-отчета JUnit. Значение должно оканчиваться на .xml. Значение по умолчанию — {asm}_{tfm}_{arch}.xml. Сведения о настройке имени см. в разделе "Имена файлов отчета". Требует использования --report-junit.

Отчеты CTRF

Отчет CTRF создает JSON-файл в формате Common Test Report Format для сеанса тестирования. Для этого расширения требуется пакет NuGet Microsoft.Testing.Extensions.CtrfReport.

Замечание

Доступно в MTP начиная с версии 2.3.0. Это расширение является экспериментальным, а его параметры и формат выходных данных могут измениться в будущей версии.

Регистрация вручную

var builder = await TestApplication.CreateBuilderAsync(args);
builder.AddCtrfReportProvider();

Options

Опция Description
--report-ctrf Создает отчет CTRF в формате JSON.
--report-ctrf-filename Имя созданного отчета CTRF JSON. Значение должно оканчиваться на .json. Значение по умолчанию — <UserName>_<MachineName>_<assembly>_<tfm>_<timestamp>.ctrf.json. Сведения о настройке имени см. в разделе "Имена файлов отчета". Требует использования --report-ctrf.

Начиная с предварительной версии MTP 2.4, CTRF сохраняет каждый результат, если несколько тестов используют один и тот же UID. Он также включает в себя вложения для каждого теста и предыдущих попыток и выводит их типы MIME из имен файлов.

Для повторных тестов CTRF сопоставляет попытки только в том случае, если связь является однозначной. Затем он записывает предыдущие попытки в retryAttempts, задает retriesи помечает последующий успешный результат как flaky: true. Неоднозначные результаты с одинаковым UID сохраняются раздельно, поэтому отчет не сопоставляет диагностические данные с неверным тестом.

Сводка в терминале показывает нестабильные и повторно запущенные тесты. TRX и JUnit отчеты сохраняют один окончательный результат для каждого теста вместо записи каждой попытки.

Отчеты Azure DevOps

Расширение Azure DevOps для отчетов интегрирует запуски тестов MTP с Azure Pipelines. Он форматирует ошибки и предупреждения для журналов конвейера, добавляет заметки для неудачных и пропущенных тестов, создает сводку задания Markdown и может группировать выходные данные по тестовой сборке. Расширение также может определять нестабильные сбои или сбои, помещенные в карантин, отправлять тестовые артефакты и передавать результаты в тестовый запуск Azure DevOps.

Если вы размещаете свой код на GitHub, но запускаете тесты на агентах Azure Pipelines, аннотации об ошибках могут отображаться непосредственно в pull request в GitHub:

Аннотация ошибки в представлении файлов в GitHub PR

Для этого расширения требуется пакет NuGet Microsoft.Testing.Extensions.AzureDevOpsReport .

Регистрация вручную

var builder = await TestApplication.CreateBuilderAsync(args);
builder.TestHost.AddAzureDevOpsProvider();

Options

Опция Версия MTP Description
--report-azdo 1.9.0 Включает генератор отчетов Azure DevOps. Ошибки и предупреждения записываются в выходные данные в формате, который Azure DevOps понимает.
--report-azdo-severity 1.9.0 Уровень серьезности для регистрируемых событий. Допустимые значения: error (по умолчанию) и warning.
--report-azdo-groups 2.4.0 Включает или отключает группы журналов для каждой сборки. При включении вывод каждой тестовой сборки отображается в сворачиваемом разделе журнала Azure Pipelines. Допустимые значения — on и off. Предварительные сборки MTP 2.4.0 по умолчанию используют off; стабильный выпуск MTP 2.4.0 по умолчанию использует on. Требует использования --report-azdo.
--report-azdo-annotations 2.4.0 Включает или отключает аннотации для неудачных и пропущенных тестов. Допустимые значения: on (по умолчанию) и off. Требует использования --report-azdo.
--report-azdo-flaky-history 2.3.0 Запрашивает историю результатов тестов в Azure DevOps за последние N дней (1–90) и помечает зарегистрированные сбои сведениями о нестабильности. Требует использования --report-azdo.
--report-azdo-demote-known-flaky 2.3.0 Понижает статус сбоев, которые в окне истории Azure DevOps считаются достаточно нестабильными (пороговое значение по умолчанию — 25%), с ошибок до предупреждений. Требуется --report-azdo и --report-azdo-flaky-history.
--report-azdo-slow-test-history 2.3.0 Запрашивает в Azure DevOps историю результатов тестов за указанное количество дней и снижает пороговое значение продолжительности выполнения для отдельных тестов с известным коротким временем выполнения. Принимает ровно одно целое число от 1 до 90. При наличии достаточного количества исторических выборок порог равен меньшему из двух значений: 60 секунд или исторической длительности p99, умноженной на настроенный множитель. Требует использования --report-azdo.
--report-azdo-slow-test-history-min-sample 2.3.0 Задает минимальное количество исторических данных, необходимое для того, чтобы расширение начало использовать историю теста для корректировки порога медленного теста или добавления сведений из истории в строки вывода медленных тестов. Принимает ровно одно целое число больше или равно 1. По умолчанию используется значение 10. Требует использования --report-azdo-slow-test-history.
--report-azdo-slow-test-history-multiplier 2.3.0 Задает коэффициент, применяемый к исторической длительности теста на уровне p99 для вычисления порога медленного теста. Принимает ровно одно число с плавающей запятой в инвариантном формате больше 0 и не больше 10 000. Значение по умолчанию — 3. Требует использования --report-azdo-slow-test-history.
--report-azdo-quarantine-file 2.3.0 Путь к текстовому файлу, который содержит полные имена или шаблоны глобов в карантине. Ошибки сопоставления отображаются как предупреждения. Требует использования --report-azdo.
--report-azdo-summary 2.3.0 Записывает сводку задания Markdown в конце тестового запуска и отправляет его через ##vso[task.uploadsummary]. Необязательный аргумент пути к файлу переопределяет расположение по умолчанию ({testResultsDir}/azdo-summary-{assembly}-{tfm}-{arch}.md). Требует использования --report-azdo.
--report-azdo-stackframe-filter 2.3.0 Добавляет шаблоны регулярных выражений, которые сопоставляются с полным префиксом имени типа каждого кадра стека и игнорируются, когда расширение определяет место вызова пользователя для аннотирования. Этот параметр можно повторять, до 16 шаблонов, и каждый шаблон компилируется с временем ожидания совпадения 500 мс. Эти шаблоны дополняют встроенные в расширение префиксы реализации утверждений MSTest. Требует использования --report-azdo.
--report-azdo-upload-artifacts 2.3.0 Отправляет файлы результатов теста и /или добавляет теги сборки в Azure DevOps. Допустимые значения: off (по умолчанию), tags-onlyfiles, и all.
--report-azdo-upload-artifact-include 2.3.0 Включает файлы в отправку артефактов Azure DevOps с помощью glob-шаблонов относительно каталога результатов тестов. По умолчанию — **/*. Значение --report-azdo-upload-artifacts должно отличаться от off.
--report-azdo-upload-artifact-exclude 2.3.0 Исключает файлы из отправки артефактов в Azure DevOps с помощью glob-шаблонов относительно каталога результатов тестов. Значение --report-azdo-upload-artifacts должно отличаться от off.
--report-azdo-upload-artifact-name 2.3.0 Переопределяет имя контейнера артефактов Azure DevOps. По умолчанию — TestResults_{assemblyName}_{tfm}. Значение --report-azdo-upload-artifacts должно отличаться от off.
--publish-azdo-test-results 2.3.0 Передает результаты в тестовый запуск Azure DevOps по мере завершения тестов. На вкладке "Тесты сборки" перечислены завершенные запуски.
--publish-azdo-run-name 2.3.0 Задает пользовательское имя запуска тестов Azure DevOps для публикации результатов тестирования в реальном времени. Требует использования --publish-azdo-test-results.

Предупреждение

Не включите группы, если несколько тестовых сборок выполняются параллельно. Команды Azure DevOps ##[group] и команды форматирования ##[endgroup] являются последовательными и безымянными. Вывод при параллельной сборке может перемешиваться, вызывать неправильную вложенность групп и относить строки не к той сборке. Если вы используете сборку предварительной версии MTP 2.4.0, передайте --report-azdo-groups off для отключения групп. Стабильный выпуск MTP 2.4.0 по умолчанию отключает группы. Передавайте --report-azdo-groups on только для одной сборки или при последовательном выполнении сборок.

Замечание

Столбец версии MTP содержит первую версию MTP, содержащую каждый параметр. Само расширение Azure DevOps стало стабильным в MTP 1.9.0 с --report-azdo и --report-azdo-severity; остальные параметры были добавлены в MTP 2.3.0 или 2.4.0.

Расширение автоматически определяет, что работает в среде непрерывной интеграции (CI), проверяя значение переменной среды TF_BUILD.

Important

Для запросов журнала Azure DevOps требуются TF_BUILD=true, SYSTEM_COLLECTIONURI, SYSTEM_TEAMPROJECT, SYSTEM_ACCESSTOKEN и BUILD_DEFINITIONID. Если какие-либо значения отсутствуют, MTP продолжает работу без исторических данных, пропускает аннотации flaky-history и использует статический порог в 60 секунд для строк медленных тестов.

Для публикации в реальном времени с --publish-azdo-test-results требуются TF_BUILD=true, SYSTEM_COLLECTIONURI, SYSTEM_TEAMPROJECT, SYSTEM_ACCESSTOKEN и BUILD_BUILDID. Если какое-либо значение отсутствует или недопустимо, MTP предупреждает и не публикует тестовое выполнение.

Начиная с MTP 2.4.0, Azure DevOps Markdown суммирует результаты в каждом тестовом модуле в вызовеdotnet test. При включении покрытия кода сводка включает в себя охватываемое и общее количество, проценты, пороговые результаты и индикатор, когда данные покрытия являются частичными.

В предварительной версии MTP 2.4 публикация в режиме реального времени автоматически отправляет вложения файлов для неуспешных результатов тестов к результатам тестов в Azure DevOps. Неуспешные результаты включают результаты со статусом «сбой», «ошибка», «превышено время ожидания» и «отменено».

Если результат содержит стандартный вывод или стандартный поток ошибок, расширение может прикрепить до 256 КиБ каждого такого встроенного потока. Каждое поддерживаемое файлом вложение имеет ограничение 16-MiB.

Расширение также загружает файлы уровня выполнения .coverage, .cobertura.xml и .opencover.xml как вложения покрытия кода. Эти вложения тестовых запусков и результатов отдельны от --report-azdo-upload-artifacts, который загружает выбранные файлы как артефакты сборки Azure Pipelines.

Для тестов, выполненных повторно, Azure DevOps публикует предыдущие попытки как подрезультаты и прикрепляет артефакты каждой попытки к тому подрезультату, в результате которого они были созданы. Если безопасная корреляция при повторной попытке недоступна, расширение публикует отдельный результат вместо того, чтобы отбросить его.

При публикации в реальном времени создаётся запуск, и выводится его URL-адрес, чтобы можно было отслеживать результаты ещё до его завершения. Он также отправляет pipelineReference и дату начала, если среда конвейера их предоставляет. Вкладка сборки Tests не отображает выполняющийся запуск; она отображает запуск только после его завершения.

Отчеты GitHub Actions

Отчет GitHub Actions генерирует собственные команды workflow GitHub Actions, благодаря чему тестовые прогоны дают полноценное представление результатов в среде выполнения: отдельные группы журналов для каждой сборки, аннотации о неудачных и пропущенных тестах (они отображаются на вкладке Annotations workflow, а если удается определить расположение в исходном коде — и в диффе Files changed запроса на включение изменений), сводка задания в формате Markdown, добавляемая в файл, на который указывает GITHUB_STEP_SUMMARY, и уведомления о медленных тестах.

Для этого расширения требуется пакет NuGet Microsoft.Testing.Extensions.GitHubActionsReport.

Расширение активируется только в том случае, если запуск выполняется в GitHub Actions (переменная среды GITHUB_ACTIONS имеет значение true) и включён переключатель --report-gh; в противном случае расширение ничего не делает. Когда параметр активен, каждая функция включена по умолчанию, и её можно отключить отдельно с помощью параметра --report-gh-*.

Important

Параметр --report-gh принадлежит Microsoft.Testing.Extensions.GitHubActionsReport. Пакет GitHubActionsTestLogger предоставляет другой вариант --report-github. Параметры не являются псевдонимами и работают только в том случае, если тестовый проект регистрирует пакет, принадлежащий параметру.

Замечание

Расширение доступно начиная с MTP 2.3.0. Начиная с MTP 2.4.0, его общедоступные точки входа больше не экспериментальны.

Регистрация вручную

var builder = await TestApplication.CreateBuilderAsync(args);
builder.AddGitHubActionsProvider();

Options

Опция Версия MTP Description
--report-gh 2.3.0 Включает генератор отчётов GitHub Actions, при котором тестовые запуски выдают команды workflow. Требуется, чтобы выполнение выполнялось в GitHub Actions.
--report-gh-groups 2.3.0 Включает или отключает группы журналов для каждой сборки. Допустимые значения: on (по умолчанию) и off. Требует использования --report-gh.
--report-gh-annotations 2.3.0 Включает или отключает аннотации для неудачных и пропущенных тестов. Допустимые значения: on (по умолчанию) и off. Требует использования --report-gh.
--report-gh-step-summary 2.3.0 Определяет, записывает ли расширение сводку задания в формате Markdown в файл, указанный в GITHUB_STEP_SUMMARY. Допустимые значения: on (по умолчанию) offи, начиная с MTP 2.4.0, on-failure. Требует использования --report-gh.
--report-gh-step-summary-sections 2.4.0 Выбирает сводное содержимое. Допустимые значения: test-results, coverageslow-testsи all (по умолчанию). Требуется --report-gh и режим сводки, отличный от off.
--report-gh-failure-details 2.4.0 Включает или отключает ограниченные сведения о сбоях в сводке по заданию. Используйте on (по умолчанию) или off. Сведения включают сообщение, тип исключения, расположение источника и трассировку стека при наличии. Требует использования --report-gh.
--report-gh-history 2.4.0 Считывает и обновляет ограниченный локальный моментальный снимок журнала тестов по указанному пути к файлу. Процесс должен скачать предыдущий снимок перед выполнением и загрузить обновлённый файл после него. Требует использования --report-gh.
--report-gh-history-window 2.4.0 Задает период хранения журнала от 1 до 90 дней. Значение по умолчанию — 30 дней. Требует использования --report-gh-history.
--report-gh-slow-test-notices 2.3.0 Включает или отключает уведомления о медленном тестировании. Допустимые значения: on (по умолчанию) и off. Требует использования --report-gh.
--report-gh-slow-test-threshold 2.3.0 Время, в течение которого может выполняться тест, прежде чем будет выдано уведомление о медленном выполнении теста. Принимает голое количество секунд или значение с суффиксом единицы, например 90s, 2mили 1.5h. Значение по умолчанию — 60s. Требует использования --report-gh.

Начиная с MTP 2.4.0, GitHub Actions Markdown суммирует результаты по каждому тестовому модулю в вызовеdotnet test. Если вы также включите покрытие кода, выберите coverage или all, чтобы включить количество покрытых и общее количество, проценты, результаты проверки пороговых значений и индикатор того, что данные о покрытии являются неполными.

Сведения о сбоях остаются в ограниченном сообщении, стеке, счетчике сбоев и суммарных бюджетах. Когда содержимое превышает лимит, отчет усекает или сокращает его и указывает на это сокращение в сводке.