Azure DevOps YAML流水线如何排除带指定标签的测试?
问题:YAML流水线中TestCategory过滤规则无效,带数据库依赖的测试仍执行
我们使用YAML流水线执行构建与单元测试,部分需要已部署数据库的测试标记如下:
[TestCategory("DoNotRunOnBuild")] [TestClass] public class PersistencySqlServerTests { ... }
我们的YAML配置如下:
- task: DotNetCoreCLI@2 displayName: 'Run tests' inputs: command: test projects: | **\*Test.csproj !**\*.IntegrationTest.csproj arguments: '--collect "Code coverage" --logger trx --results-directory $(Build.ArtifactStagingDirectory)/TestResults/' testFiltercriteria: 'TestCategory!=DoNotRunOnBuild' publishTestResults: false testRunTitle: KooService
从经典流水线通过“显示为YAML”功能复制了testFiltercriteria: 'TestCategory!=DoNotRunOnBuild'配置,但该配置无效,标记的测试仍会运行导致构建失败,请问遗漏了什么?
解决方法
1. 修复YAML缩进错误
你的YAML配置存在缩进错误:arguments被错误嵌套在projects的多行内容中,导致该参数未被任务正确识别,同时testFiltercriteria的作用也受此影响。
正确的缩进应让arguments与command、projects同级,属于inputs的直接子项:
- task: DotNetCoreCLI@2 displayName: 'Run tests' inputs: command: test projects: | **\*Test.csproj !**\*.IntegrationTest.csproj arguments: '--collect "Code coverage" --logger trx --results-directory $(Build.ArtifactStagingDirectory)/TestResults/' testFiltercriteria: 'TestCategory!=DoNotRunOnBuild' publishTestResults: false testRunTitle: KooService
2. 改用命令行参数传递过滤规则(更可靠)
部分版本的DotNetCoreCLI@2任务中,独立的testFiltercriteria参数可能存在兼容性问题,建议直接将过滤规则添加到arguments中,移除testFiltercriteria参数:
- task: DotNetCoreCLI@2 displayName: 'Run tests' inputs: command: test projects: | **\*Test.csproj !**\*.IntegrationTest.csproj arguments: '--collect "Code coverage" --logger trx --results-directory $(Build.ArtifactStagingDirectory)/TestResults/ --filter "TestCategory!=DoNotRunOnBuild"' publishTestResults: false testRunTitle: KooService
这样dotnet test命令会直接接收--filter参数,确保MSTest框架正确跳过标记了DoNotRunOnBuild的测试类。
内容的提问来源于stack exchange,提问作者k.c.
相关产品推荐
相关产品推荐

