如何让VSTest把失败记录为真正的失败,而不是当作警告?
我们有一个YAML测试脚本,其步骤对前面的作业有依赖。
作业1 将构建烟雾测试应用并随后运行它。如果VSTest步骤失败,我们看到的状态是警告状态,而不是失败,如下所示。

这会导致后续步骤出现问题,其中一个步骤的条件设为成功,另一个设为失败;尽管测试失败,已成功的步骤仍会执行,而不是失败的步骤。如何让测试步骤在测试失败时被标记为失败?下面显示的YAML:
- stage: RunTheSmokeTests
displayName: Smoke Tests
jobs:
- job: GetAndRunSmokes
steps:
- task: NuGetToolInstaller@1
displayName: 'Install NuGetTool'
- task: NuGetCommand@2
displayName: 'NuGet Restore'
inputs:
restoreSolution: '$(solution)'
- task: VSBuild@1
displayName: DeltaTestsBuild
inputs:
solution: '$(solution)'
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)"'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- script: pwsh D:\a\1\s\DeltaSmokeTests\bin\Release\net9.0\playwright.ps1 install chromium --with-deps --only-shell
displayName: 'Install Playwright runtimes'
- task: VSTest@3
displayName: VsTest - Dashboard
inputs:
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
testSelector: testAssemblies
testAssemblyVer2: |
D:\a\1\s\DeltaSmokeTests\bin\Release\net9.0\SmokeTests.dll
!**\obj\**
testFiltercriteria: 'TestCategory=DeltaDashboard'
testRunTitle: 'Delta Regression DeltaDashboard'
runTestsInIsolation: true
rerunFailedTests: true
rerunFailedThreshold: 50
rerunMaxAttempts: 2
continueOnError: true
condition: succeededOrFailed()
timeoutInMinutes: 10
- job: NotifyTeamsChannelIfTestsPass
dependsOn: DeletaGetAndRunSmokes
condition: succeeded()
steps:
- task: PowerShell@2
displayName: 'Notify Teams Channel all tests passed'
condition: succeededOrFailed()
inputs: etc etc
- job: NotifyTeamsChannelIfTestsFail
dependsOn: DeletaGetAndRunSmokes
condition: failed()
steps:
- task: PowerShell@2
displayName: 'Notify Teams Channel some tests failed'
condition: succeededOrFailed()
inputs: etc etc
- job: CreateReportFiles
dependsOn: DeletaGetAndRunSmokes
condition: always()
steps:
- task: CopyFiles@2
displayName: 'Copy Report Files to: $(build.artifactstagingdirectory)'
inputs:
SourceFolder: '$(system.defaultworkingdirectory)'
Contents: '**/TestResults/**'
TargetFolder: '$(build.artifactstagingdirectory)'
condition: succeededOrFailed()
- task: PublishBuildArtifacts@1
displayName: 'Publish HTML Report Files'
inputs:
PathtoPublish: '$(build.artifactstagingdirectory)'
condition: succeededOrFailed()
解决方案
你的 vstest 步骤包含 continueOnError: true,这将导致任务的状态无论结果如何都被标记为 succeeded。
如果你希望测试失败时将该步骤标记为失败,需要把 continueOnError 设置为 false。
如果你还想在失败后继续执行其他步骤,可以添加 condition: always()(在管道被取消时也会执行)或 condition: succeededOrFailed(),就像现在的情况一样。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。