Как гарантировать, что Azure Pipelines принимает мои файлы trx для публикации результатов тестов?

Я создал файл trx в своем конвейере для своих интеграционных тестов, созданных с помощью конвейеров Azure. Он работает и выглядит так, как ожидалось.

<?xml version = "1.0" encoding = "utf-8"?>
<TestRun id = "d5c0721d-bdc9-4900-a1bb-dcd38397a39a" name = "VssAdministrator@fv-az520-777 2024-07-22 10:19:50" runUser = "fv-az520-777\VssAdministrator" xmlns = "http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
  <Times creation = "2024-07-22T10:19:50.2469008+00:00" queuing = "2024-07-22T10:19:50.2469017+00:00" start = "2024-07-22T10:19:47.3501168+00:00" finish = "2024-07-22T10:19:50.2550498+00:00" />
  <TestSettings name = "default" id = "f3d1a7c1-f83b-4d16-801a-b5e375be3fba">
    <Deployment runDeploymentRoot = "VssAdministrator_fv-az520-777_2024-07-22_10_19_50" />
  </TestSettings>
  <Results>
    <UnitTestResult executionId = "7e3e6863-f27c-4832-a2ca-aa0589a48439" testId = "45ece44b-8380-88b4-513f-f71b031f1b40" testName = "MyCompany.ConsumerApi.IntegrationTest.MyApproachContextTest.ProcessTest" computerName = "fv-az520-777" duration = "00:00:01.8936378" startTime = "2024-07-22T10:19:50.1224192+00:00" endTime = "2024-07-22T10:19:50.1224444+00:00" testType = "13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome = "Passed" testListId = "8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory = "7e3e6863-f27c-4832-a2ca-aa0589a48439">
      <Output>
        <StdOut>2024-07-22 10:19:48 [Information] Application starting up...&#xD;
2024-07-22 10:19:48 [Information] KeyVault found False&#xD;
2024-07-22 10:19:50 [Information] Executed DbCommand (38ms) [Parameters=[], CommandType='Text', CommandTimeout='30']&#xD;
SELECT [b].[Id], [b].[FileMetadataId], [b].[Identifier]&#xD;
FROM [AttachmentSource] AS [b]</StdOut>
      </Output>
    </UnitTestResult>
  </Results>
  <TestDefinitions>
    <UnitTest name = "MyCompany.ConsumerApi.IntegrationTest.MyApproachContextTest.ProcessTest" storage = "d:\a\1\s\10 - MyApproach\c2woo.MyApproach\MyCompany.ConsumerApi.integrationtest\bin\release\net8.0\MyCompany.ConsumerApi.integrationtest.dll" id = "45ece44b-8380-88b4-513f-f71b031f1b40">
      <Execution id = "7e3e6863-f27c-4832-a2ca-aa0589a48439" />
      <TestMethod codeBase = "D:\a\1\s\10 - MyApproach\c3wdd.MyApproach\MyCompany.ConsumerApi.IntegrationTest\bin\Release\net8.0\MyCompany.ConsumerApi.IntegrationTest.dll" adapterTypeName = "executor://xunit/VsTestRunner2/netcoreapp" className = "MyCompany.ConsumerApi.IntegrationTest.MyApproachContextTest" name = "ProcessTest" />
    </UnitTest>
  </TestDefinitions>
  <TestEntries>
    <TestEntry testId = "45ece44b-8380-88b4-513f-f71b031f1b40" executionId = "7e3e6863-f27c-4832-a2ca-aa0589a48439" testListId = "8c84fa94-04c1-424b-9868-57a2d4851a1d" />
  </TestEntries>
  <TestLists>
    <TestList name = "Results Not in a List" id = "8c84fa94-04c1-424b-9868-57a2d4851a1d" />
    <TestList name = "All Loaded Results" id = "19431567-8539-422a-85d7-44ee4e166bda" />
  </TestLists>
  <ResultSummary outcome = "Completed">
    <Counters total = "1" executed = "1" passed = "1" failed = "0" error = "0" timeout = "0" aborted = "0" inconclusive = "0" passedButRunAborted = "0" notRunnable = "0" notExecuted = "0" disconnected = "0" warning = "0" completed = "0" inProgress = "0" pending = "0" />
    <Output>
      <StdOut>[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.5.3.1+6b60a9e56a (64-bit .NET 8.0.7)&#xD;
[xUnit.net 00:00:00.12]   Discovering: MyCompany.ConsumerApi.IntegrationTest&#xD;
[xUnit.net 00:00:00.21]   Discovered:  MyCompany.ConsumerApi.IntegrationTest&#xD;
[xUnit.net 00:00:00.22]   Starting:    MyCompany.ConsumerApi.IntegrationTest&#xD;
[xUnit.net 00:00:02.21]   Finished:    MyCompany.ConsumerApi.IntegrationTest&#xD;
</StdOut>
    </Output>
  </ResultSummary>
</TestRun>

Стандартный вывод соответствует ожиданиям. Количество результатов тестов соответствует ожидаемому. Все хорошо и хорошо.

У меня много файлов trx (на это есть веские причины, которые я не хочу здесь обсуждать). Но Azure Pipelines «не хочет» видеть результаты моих тестов при их публикации.

- task: PublishTestResults@2
  inputs:
    testResultsFiles: '**/*.trx'
    searchFolder: '$(System.DefaultWorkingDirectory)'
    testRunTitle: 'Test Results'
    publishRunAttachments: true
    failTaskOnFailedTests: true  # This ensures the task fails if any test fails  

Я получил такой вывод

2024-07-22T10:20:08.6511447Z No Result Found to Publish 'D:\a\1\s\TestResults\VssAdministrator_fv-az520-777_2024-07-22_10_19_37.trx'.
2024-07-22T10:20:08.6512662Z No Result Found to Publish 'D:\a\1\s\TestResults\VssAdministrator_fv-az520-777_2024-07-22_10_19_37[1].trx'.
2024-07-22T10:20:08.6526375Z No Result Found to Publish 'D:\a\1\s\TestResults\VssAdministrator_fv-az520-777_2024-07-22_10_19_40.trx'.
2024-07-22T10:20:08.6527626Z No Result Found to Publish 'D:\a\1\s\TestResults\VssAdministrator_fv-az520-777_2024-07-22_10_19_41.trx'.
2024-07-22T10:20:08.6632274Z No Result Found to Publish 'D:\a\1\s\TestResults\VssAdministrator_fv-az520-777_2024-07-22_10_19_44.trx'.
2024-07-22T10:20:08.6633882Z No Result Found to Publish 'D:\a\1\s\TestResults\VssAdministrator_fv-az520-777_2024-07-22_10_19_46.trx'.
2024-07-22T10:20:08.6635084Z No Result Found to Publish 'D:\a\1\s\TestResults\VssAdministrator_fv-az520-777_2024-07-22_10_19_48.trx'.
2024-07-22T10:20:08.6637200Z No Result Found to Publish 'D:\a\1\s\TestResults\VssAdministrator_fv-az520-777_2024-07-22_10_19_50.trx'.
2024-07-22T10:20:08.6638387Z No Result Found to Publish 'D:\a\1\s\TestResults\VssAdministrator_fv-az520-777_2024-07-22_10_19_52.trx'.
2024-07-22T10:20:08.6639614Z No Result Found to Publish 'D:\a\1\s\TestResults\VssAdministrator_fv-az520-777_2024-07-22_10_19_54.trx'.
2024-07-22T10:20:08.6640816Z No Result Found to Publish 'D:\a\1\s\TestResults\VssAdministrator_fv-az520-777_2024-07-22_10_19_56.trx'.
2024-07-22T10:20:08.6642046Z No Result Found to Publish 'D:\a\1\s\TestResults\VssAdministrator_fv-az520-777_2024-07-22_10_19_58.trx'

На самом деле это длиннее, но я все время получал сообщение «Нет результатов для публикации». Это крайне неприятно.

Позвольте мне объяснить, что происходит хорошо:

  1. Мои тесты прошли успешно
  2. Я доволен своим TRX
  3. На этапе публикации распознаются все файлы trx для публикации.
  4. Файлы trx действительно имеют правильное содержимое и содержат результаты тестов.

Что не получается.

  • Публикация PublishTestResults@2 жалуется, что не может найти результаты теста.

По сути, это «ложь». Если бы PublishTestResults@2 был бы коллегой, его бы уволили. Каждый может легко увидеть, остальные результаты можно найти. Сказать, что это не так, это просто «ложь» и не более того.

Однако, поскольку это не коллега, мне нужно найти другое решение, чтобы обеспечить правильную публикацию результатов моих тестов в конвейерах Azure.

Что это за другое решение!?

Если это поможет ответить на вопрос: Вот пример (сгенерированной и выполненной) команды «dotnet test».

dotnet test -c Release --no-restore --no-build  "SOME SOLUTIONFILE" --filter FullyQualifiedName='SOMETESTNAME' -p:Platform=AnyCPU --results-directory "./TestResults" --logger "trx" -- RunConfiguration.TreatNoTestsAsError=True

Как ответил Руй Джаримба, причина проблемы в том, что вы не определили testResultsFormat в задаче PublishTestResults. Это обязательное поле, и по умолчанию для него будет установлено значение Junit. Вам нужно установить VSTest. Мы можем обратиться к этому документу для получения дополнительной информации: Learn.microsoft.com/en-us/azure/devops/pipelines/tasks/…

Kevin Lu-MSFT 22.07.2024 13:52
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не устанавливаете свойство testResultsFormat — его значение по умолчанию — Junit, возможно, поэтому тесты не публикуются.

Допустимые значения:

  • JUnit
  • NUnit
  • VSTest
  • XUnit
  • CTest

Попробуйте что-то вроде:

- task: PublishTestResults@2
  inputs:
    testResultsFiles: '**/*.trx'
    testResultsFormat: 'VSTest' # <------------------------ Set format here
    searchFolder: '$(System.DefaultWorkingDirectory)'
    testRunTitle: 'Test Results'
    publishRunAttachments: true
    failTaskOnFailedTests: true  # This ensures the task fails if any test fails 

См. PublishTestResults@2 для более подробной информации.

Другие вопросы по теме