问题描述
我们有20多个程序集,需要通过将它们分为两个组运行在2个不同的VMS上,以运行单元测试。两个VM彼此独立并并行运行。但是,VM内的测试按顺序运行,并且需要很长时间才能完成(我们有很多UT)。 像这样:
- job: UnitTests1
timeoutInMinutes: 50
pool:
vmImage: $(hostedPool)
steps:
- template: ./templates/run-unittests.yml
parameters:
artifactName: $(buildArtifact)
testAssemblies: ['assembly1','assembly2','assembly3','assembly4','assembly5','assembly6','assembly7','assembly8','assembly9','assembly10']
runName: UnitTest1
- job: UnitTests2
timeoutInMinutes: 35
pool:
vmImage: $(hostedPool)
steps:
- template: ./templates/run-unittests.yml
parameters:
artifactName: $(buildArtifact)
testAssemblies: ['assembly11','assembly12','assembly13','assembly14','assembly15','assembly16','assembly17','assembly18','assembly19','assembly20']
runName: unitTest2
run-unittests.yml
- ${{ each testAssembly in parameters.testAssemblies }}:
- task: VSTest@2
displayName: 'UT: ${{ testAssembly }}'
inputs:
vsTestVersion: toolsInstaller
testAssemblyVer2: |
$(Pipeline.Workspace)\${{ parameters.artifactName }}\**\MyProject.${{ testAssembly }}.Tests.dll
runSettingsFile: build/default.runsettings
runInParallel: false
runOnlyImpactedTests: false # Test Impact Analysis was evaluated and returns incorrect results
codeCoverageEnabled: true # collect code coverage
platform: '$(buildplatform)'
configuration: '$(buildConfiguration)'
default.runsettings
进行测试
<!-- Configurations that affect the Test Framework -->
<runconfiguration>
<MaxcpuCount>1</MaxcpuCount>
<TargetPlatform>x64</TargetPlatform>
<ParallelizeAssemblies>false</ParallelizeAssemblies>
<ParallelizeTestCollections>false</ParallelizeTestCollections>
如何启动多个线程/进程以在1个VM中并行运行这些UT。 runInParallel
似乎无能为力。
解决方法
runInParallel
参数表示在多核计算机上并行运行测试。如果设置,测试将利用计算机的可用内核并行运行。如果在您的运行设置文件中指定了MaxCpuCount,它将覆盖MaxCpuCount。单击here,以了解有关如何并行运行测试的更多信息。因此,您需要检查您的VM是否为多核,并检查是否在runsettings文件中指定了MaxCpuCount。
您还可以参考以下文档,以使用Visual Studio测试(VSTest)任务跨多个代理并行运行测试: