У меня есть конвейер сборки, как показано ниже
variables:
- name: BuildParameters.solution
value: '**/*.sln'
- name: buildConfiguration
value: Release
name: $(date:yyyyMMdd)$(rev:.r)
trigger: none
resources:
repositories:
- repository: self
type: git
stages:
- stage: __default
jobs:
- job: Job_1
displayName: Agent job 1
pool:
vmImage: windows-2019
steps:
- task: UseDotNet@2
displayName: '.NET Core 3.1.404'
inputs:
version: '3.1.404'
packageType: sdk
- task: DotNetCoreCLI@2
enabled: true
displayName: dotnet test
continueOnError: true
timeoutInMinutes: 0
inputs:
command: test
projects: '**/*test/*.csproj'
arguments: --configuration $(buildConfiguration) --verbosity n --collect "Code coverage"
publishTestResults: true
- task: PublishTestResults@2
inputs:
testResultsFormat: XUnit
testResultsFiles: '**/TEST.xml'
mergeTestResults: true
failTaskOnFailedTests: true
Я намеренно сломал тест
Этот тест не пройден, но задача публикации результатов теста не проваливается полностью
я получаю предупреждение
##[warning]No test result files matching **/TEST.xml were found. xunit
Было ли у кого-нибудь такое?
Досадно, что если тест терпит неудачу, конвейер Azure классифицирует это как частичный успех, что не идеально. Я пытаюсь попасть в ситуацию, когда в случае сбоя теста мой конвейер не работает.
Этот пайплайн используется для проверки запросов на вытягивание — т. е. для сборки кода в PR и обеспечения прохождения всех тестов.
Когда я искал это, были ссылки на установку .NET 4.6.2 или более поздней версии, но это используется внутри конвейера сборки, поэтому не знаю, как это сделать.
Я что-то пропустил в тестовом задании dot net?
Павел
Когда вы устанавливаете в поле publishTestResults
значение true
для тестовой задачи dotnet. Смотрите ниже отрывок из здесь.
Этот параметр добавляет --logger trx --results-directory $(Agent.TempDirectory) к аргументам командной строки.
Приведенные выше команды сгенерируют результат теста в формате VSTest (trx) и выведут результат в папку $(Agent.TempDirectory)
Поэтому вам нужно изменить задачу PublishTestResults@2
, как показано ниже:
- task: PublishTestResults@2
inputs:
testResultsFormat: VSTest #change the format to VSTest
testResultsFiles: '**/*.trx' #change to find .trx file
mergeTestResults: true
failTaskOnFailedTests: true
searchFolder: '$(Agent.TempDirectory)' #search the .trx file in $(Agent.TempDirectory)
Обычно в поле continueOnError
по умолчанию установлено значение false
. И тестовая задача dotnet завершится ошибкой, если какой-либо тест не пройден. См. ниже:
Если в поле continueOnError
установлено значение true
. Тестовая задача dotnet и конвейер покажут состояние Warnig
.
Таким образом, вы можете попробовать установить в поле continueOnError
значение false
, что приведет к сбою задачи и конвейера, если какой-либо тест не пройден. И не будет необходимости использовать PublishTestResults
задачу. Если для publishTestResults
установлено значение true
для тестовой задачи dotnet, результат теста будет автоматически опубликован тестовой задачей dotnet. См. ниже:
- task: DotNetCoreCLI@2
enabled: true
displayName: dotnet test
continueOnError: false
timeoutInMinutes: 0
inputs:
command: test
projects: '**/*test/*.csproj'
arguments: --configuration $(buildConfiguration) --verbosity n --collect "Code coverage"
publishTestResults: true
В тестовой задаче @Paul dotnet нет параметра mergetestresults. Если вы имели в виду отображение результатов тестирования различных тестовых проектов на вкладке «Тесты» на странице сводки сборки, использование только тестовой задачи dotnet также может отображать все результаты тестирования на вкладке «Тесты». Если вам нужно использовать опцию mergetestresults. Затем вы можете просто изменить свою задачу publishtestresult, как показано выше.
Спасибо, это выглядит обнадеживающе, однако я видел, что в задаче публикации результатов теста есть опция для mergetestresults, но я не вижу, как это сделать в тестовой задаче dotnet?