Azure devops mutil 代理 parallalsim 拆分 Nunit 测试顺序

问题描述 投票:0回答:1

下面的 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/
nunit azure-pipelines-yaml
1个回答
0
投票

您可以在测试中使用 Category 属性对测试进行分组,并在

testFiltercriteria
任务中使用
VSTest@2
来过滤此任务中运行的测试。使用矩阵作业策略而不是并行作业策略来并行运行作业并运行相应的测试。请参阅以下详细步骤。

  1. 在测试中使用
    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)

...
  1. 在工作中使用矩阵工作策略。对于矩阵中每次出现 string1,都会生成作业的副本。名称 string1 是副本的名称,并附加到作业的名称中。对于每次出现 string2,作业都可以使用名为 string2 且值为 string3 的变量。
strategy:
  matrix: { string1: { string2: string3 } }
  maxParallel: number
  1. testFiltercriteria
    任务中使用
    VSTest@2
    来过滤将在此任务中运行的测试。例如,
    testFiltercriteria: 'TestCategory=$(Category)'

  2. 示例 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)'
  1. 结果:测试用例 1-3 在一个代理上运行,测试用例 4-5 在另一代理上运行。两个作业并行运行。 enter image description here
© www.soinside.com 2019 - 2024. All rights reserved.