失败的测试不会使 YAML 中的任务失败

Failed Test does not fail task in YAML

我有一个构建管道,如下所示

    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 测试任务中遗漏了什么吗?

保罗

当您为 dotnet 测试任务将 publishTestResults 字段设置为 true 时。请参阅下面摘自 here.

This option appends --logger trx --results-directory $(Agent.TempDirectory) to the command line arguments.

以上命令会生成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的任务。对于 dotnet 测试任务 publishTestResults 设置为 true ,测试结果将由 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