下面的 YML 设置将有序的 Nunit 测试拆分到 2 个代理之间。
假设 MyTestFixture 已排序测试用例 ([Test, order(1)], [Test, order(2)], [Test, order(3)], [Test, order(4)], [Test, order(4)] (5)]) 并且此测试文件是在 agent1 上运行的最后一个测试文件,则 ([Test, order(1)], [Test, order(2)], [Test, order(3)]) 在 agent 上运行1 和其他 2 个案例在代理 2 上运行。这导致代理 2 上的 2 个测试案例失败。
如何防止在同一代理上运行有序测试,同时保持多代理方法和并行性?
- job: Job_2
displayName: Integration tests
timeoutInMinutes: 45
pool:
vmImage: windows-2019
strategy:
parallel: 2
.........
- task: VSTest@2
displayName: 'Run Integration Tests'
inputs:
testAssemblyVer2: |
**\bin\**\*.IntegrationTest.dll
resultsFolder: $(Build.SourcesDirectory)/tests-results/
runInParallel: true
codeCoverageEnabled: true
otherConsoleOptions: /platform:X64
diagnosticsEnabled: true
collectCoverage: true
coverageOutputFormat: cobertura
coverageDirectory: $(Build.SourcesDirectory)/tests-results/
您可以在测试中使用 Category 属性对测试进行分组,并在
testFiltercriteria
任务中使用 VSTest@2
来过滤此任务中运行的测试。使用矩阵作业策略而不是并行作业策略来并行运行作业并运行相应的测试。请参阅以下详细步骤。
Category
属性对测试进行分组。例如,将测试分为两组,分别在两个代理上运行。 [Test, Order(1), Category("Group1")]
[TestCase(0)]
public void IsPrime_ValuesLessThan2_ReturnFalseTest1(int value)
...
[Test, Order(4), Category("Group2")]
[TestCase(3)]
public void IsPrime_PrimesLessThan10_ReturnTrueTest4(int value)
...
strategy:
matrix: { string1: { string2: string3 } }
maxParallel: number
在
testFiltercriteria
任务中使用VSTest@2
来过滤将在此任务中运行的测试。例如,testFiltercriteria: 'TestCategory=$(Category)'
。
示例 YAML:
jobs:
- job: Test
displayName: Integration tests
timeoutInMinutes: 45
pool:
vmImage: windows-latest
strategy:
matrix:
group1:
Category: 'Group1'
group2:
Category: 'Group2'
maxParallel: 2
steps:
- task: VSTest@2
displayName: Run tests in $(Category)
inputs:
testSelector: 'testAssemblies'
testAssemblyVer2: |
**\bin\**\*test.dll
**\bin\**\*tests.dll
searchFolder: '$(System.DefaultWorkingDirectory)'
runInParallel: true
codeCoverageEnabled: true
testFiltercriteria: 'TestCategory=$(Category)'