提问人:Oxana Viktorovna 提问时间:10/20/2023 更新时间:10/20/2023 访问量:72
Yaml 策略忽略 MSTest 类并行化
Yaml strategy ignores MSTest Class Parallelization
问:
我们有 MSTest 框架,可在类级别设置并行化。这意味着,类中的测试是按顺序运行的。来自不同类的测试可以并行运行。
[assembly: Parallelize(Workers = 0, Scope = ExecutionScope.ClassLevel)]
这些测试在启用策略的 ADO yaml 管道上运行。
- job: UITestsRun
strategy:
parallel: 10
steps:
- checkout: none
- download: ${{parameters.TestDllArtifactName}}
- task: VSTest@2
inputs:
testAssemblyVer2: '**\Automation.Tests.dll'
searchFolder: 'TestDllPath'
resultsFolder: 'TestResults'
testFiltercriteria: '${{parameters.AdditionalTestCriterias}}'
runSettingsFile: 'testsettings.runsettings'
publishRunAttachments: true
batchingBasedOnAgentsOption: customBatchSize
customBatchSizeValue: 10
rerunFailedTests: true
rerunFailedThreshold: 100
rerunMaxAttempts: 1
我们注意到的是,来自同一类的测试可以在不同的作业(代理)上同时运行。
例如,作业1 正在运行 ClassA。Test1,而作业2 正在运行 ClassA。测试2.
这导致了很多失败,因为测试不是这样设计的。
我们希望测试在并行作业中运行,同时也考虑了类级并行化。 有谁知道有没有办法做到这一点?
答:
1赞
Bright Ran-MSFT
10/20/2023
#1
默认情况下,VSTest@2任务应用“basedOnTestCases
”(基于测试和代理的数量)作为批量测试切片方法。此方法仅根据参与测试运行的测试和代理的数量来划分测试。因此,这可能会将来自同一测试程序集的测试划分为不同的并行作业来运行。
对于您的情况,您可以尝试选择“basedOnAssembly
”(基于测试程序集)方法。此方法将来自同一测试程序集的测试划分为要运行的相同并行作业。同一测试程序集中的测试按顺序运行。
有关详细信息,请参阅“设置并行测试 (VSTest) - 测试切片”。
评论
0赞
Jeremy Thompson
10/20/2023
OP:为了更精细地控制这一点,您可以将测试进一步拆分为不同的项目。
0赞
Oxana Viktorovna
10/20/2023
目前我们有 100+ 测试类。因此,如果要将每个类移动到新项目下,它将是 100+ 个项目。似乎不是一个可维护的解决方案:(
0赞
Bright Ran-MSFT
10/20/2023
@OxanaViktorovna,只需在管道中VSTest@2任务上尝试“basedOnAssembly
”方法即可。
0赞
Oxana Viktorovna
10/23/2023
@BrightRan-MSFT,我已经使用 basedOnAssembly 执行了运行。这对我们不起作用。它在同一作业中运行所有测试。所以没有并行化代理 whise
0赞
Bright Ran-MSFT
10/23/2023
@OxanaViktorovna,看起来,您只有一个测试程序集。
评论
[SetUp]
[TearDown]
[DoNotParallelize]
[assembly: Parallelizable(ParallelScope.Fixtures)]
[TestFixture]