Добавить в корзинуПозвонить
Найти в Дзене

xUnit v3, Azure DevOps, и отчеты по тестам

Как всегда, ничего не предвещало. Я всего-то хотел встроить модульные тесты xUnit в конвейер сборки Azure DevOps. Тут-то все и началось.... Отличные тесты у xUnit, никаких вопросов. Все было замечательно, пока я не попробовал их гонять через dotnet test. Запускаем, для начала, в консоли, смотрим на отличный результат. Здорово! А теперь мне, пожалуйста, отчетик. Фиг тебе, сказал dotnet test. Точнее, просто молча проигнорировал все параметры на эту тему. Создал лог выполнения в каталоге TestResults, причем не там, где я просил, а в размещении по умолчанию. И на этом все. Ладно, я решил попробовать запустить dotnet test непосредственно для готовой сборки. С теми же остальными параметрами. А, так тебе отчет нужен, - сказал dotnet test. - Так вот же он! Вот только ни одного теста для отчета для теста найдено не было. Ничего не поделаешь! Пока искал хоть что-то по такой странной проблеме, я как-то где-то на форумах краем глаза заметил, что можно запускать прямо само консольное приложение, гд

Как всегда, ничего не предвещало. Я всего-то хотел встроить модульные тесты xUnit в конвейер сборки Azure DevOps. Тут-то все и началось....

Отличные тесты у xUnit, никаких вопросов. Все было замечательно, пока я не попробовал их гонять через dotnet test. Запускаем, для начала, в консоли, смотрим на отличный результат. Здорово! А теперь мне, пожалуйста, отчетик. Фиг тебе, сказал dotnet test. Точнее, просто молча проигнорировал все параметры на эту тему. Создал лог выполнения в каталоге TestResults, причем не там, где я просил, а в размещении по умолчанию. И на этом все.

Ладно, я решил попробовать запустить dotnet test непосредственно для готовой сборки. С теми же остальными параметрами.

А, так тебе отчет нужен, - сказал dotnet test. - Так вот же он! Вот только ни одного теста для отчета для теста найдено не было. Ничего не поделаешь!

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

Отлично! Сейчас как запустим из конвейера сборки! Написал скрипт на PowerShell (очень не сразу), запускаем сборку и тесты.... Фиг там! Нету результатов! И ошибок тоже нет!

Попробовал еще задачу VSTest использовать в конвейере. Запустилась задача, полтора экрана изрисовала, а результат - нету тут тестов. Не найдено!

Тут мне мысль в голову прокралась внезапная. Вот у меня агент запускается из под учетки NETWORK_SERVICE (или как-то так). А вдруг это как-то мешает порожденным процессам? Поменял я учетку на выделенного пользователя, вернул на место скрипт на PowerShell. И, подумать только, - заработало!

Так что формирование отчетов по тестам и их публикация, у меня теперь выглядят так:

- task: PowerShell@2
displayName: 'Выполнение тестов'
inputs:
targetType: inline
script: |
Write-Host "Выбираем файлы в каталоге $(Build.ArtifactStagingDirectory)"
$files = Get-ChildItem -Path "$(Build.ArtifactStagingDirectory)" -Recurse -Filter "*.UnitTests.exe"
for ($i=0; $i -lt $files.Count; $i++) {
$testfile = $files[$i].FullName
$testresultfile = "$(Build.ArtifactStagingDirectory)\TestResults\$i.trx"
Write-Host $testfile
Write-Host $testresultfile
$argliststr = '-trx "' + $testresultfile + '" -noAutoReporters -diagnostics'
Write-Host $argliststr
Start-Process -FilePath $testfile -ArgumentList $argliststr -Wait
}
- task: PublishTestResults@2
displayName: 'Публикация результатов тестов'
inputs:
testResultsFormat: 'VSTest'
failTaskOnFailedTests: true
testResultsFiles: '$(Build.ArtifactStagingDirectory)\TestResults\*.trx'