0

我想限制并行运行大量测试的并行量。我有超过 100 个要运行的测试 dll,我想限制并行运行的数量,这样它就不会消耗我机器上的所有 cpu 和内存资源。我有 24 个内核,因此默认情况下它将并行 24 个程序集,这可以最大限度地利用我机器上的内存。

出于讨论目的,我有 4 个测试程序集要并行运行,最多 2 个并行运行。

  • 创建值列表.dll
  • CustomStatesSanityCheck.dll
  • DataLoaderUnitTests.dll
  • 数据清除.dll

我创建了一个 testsettings 文件,将 maxcpucount 指定为 2。我的期望是这会将其限制为 2 个运行测试的进程。

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <RunConfiguration>
    <MaxCpuCount>2</MaxCpuCount>
    <ResultsDirectory>.\TestResultsKevin</ResultsDirectory>
  </RunConfiguration>
</RunSettings>

然后我使用以下参数运行测试。

vstest.console.exe CreateValueList.dll CustomStatesSanityCheck.dll DataLoaderUnitTests.dll DataPurging.dll --Parallel --InIsolation  /Settings:'c:\src\apm4\bin\x64\release\.runsettings' /Diag:test-diag.txt /logger:'console;verbosity=detailed'

问题:

我最终运行了 4 个 testhost.net471.exe 进程,这意味着它忽略了我的MaxCpuCount设置。我可以确认它实际上是在使用设置文件,因为我的测试输出记录到子文件夹 TestResultsKevin。如果我检查 test-diag.txt 文件,我可以看到它使用的 maxcpu 计数为 0,这意味着使用所有内核。

... removed lines to simplify reading ...
 
TpTrace Information: 0 : 11856, 1, 2022/02/02, 12:29:47.655, 165366630750, vstest.console.exe, AssemblyResolver.OnResolve: Microsoft.TestPlatform.TestHostRuntimeProvider, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a: Resolving assembly.
TpTrace Information: 0 : 11856, 1, 2022/02/02, 12:29:47.655, 165366631700, vstest.console.exe, AssemblyResolver.OnResolve: Microsoft.TestPlatform.TestHostRuntimeProvider, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a: Searching in: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\Extensions\TestPlatform\Extensions'.
TpTrace Information: 0 : 11856, 1, 2022/02/02, 12:29:47.655, 165366642384, vstest.console.exe, AssemblyResolver.OnResolve: Microsoft.TestPlatform.TestHostRuntimeProvider, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a: Loading assembly 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\Extensions\TestPlatform\Extensions\Microsoft.TestPlatform.TestHostRuntimeProvider.dll'.
TpTrace Information: 0 : 11856, 1, 2022/02/02, 12:29:47.655, 165366643551, vstest.console.exe, AssemblyResolver.OnResolve: Resolved assembly: Microsoft.TestPlatform.TestHostRuntimeProvider, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, from path: C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\Extensions\TestPlatform\Extensions\Microsoft.TestPlatform.TestHostRuntimeProvider.dll
TpTrace Information: 0 : 11856, 1, 2022/02/02, 12:29:47.655, 165366648136, vstest.console.exe, TestPluginManager.CreateTestExtension: Attempting to load test extension: Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Hosting.DefaultTestHostManager
TpTrace Verbose: 0 : 11856, 1, 2022/02/02, 12:29:47.655, 165366669590, vstest.console.exe, TestEngine: Initializing Parallel Execution as MaxCpuCount is set to: 24
TpTrace Verbose: 0 : 11856, 1, 2022/02/02, 12:29:47.655, 165366670411, vstest.console.exe, TestEngine: ParallelExecution set to 'True' as the parallel level is adjusted to '4' based on number of sources
TpTrace Information: 0 : 11856, 1, 2022/02/02, 12:29:47.655, 165366677924, vstest.console.exe, TestEngine.ShouldRunInNoIsolation: running test in isolation
TpTrace Verbose: 0 : 11856, 1, 2022/02/02, 12:29:47.675, 165366817901, vstest.console.exe, TestRequestSender is acting as server
TpTrace Verbose: 0 : 11856, 1, 2022/02/02, 12:29:47.675, 165366821419, vstest.console.exe, TestRequestSender is acting as server
TpTrace Verbose: 0 : 11856, 1, 2022/02/02, 12:29:47.675, 165366822435, vstest.console.exe, TestRequestSender is acting as server
TpTrace Verbose: 0 : 11856, 1, 2022/02/02, 12:29:47.675, 165366823347, vstest.console.exe, TestRequestSender is acting as server
TpTrace Verbose: 0 : 11856, 1, 2022/02/02, 12:29:47.675, 165366855666, vstest.console.exe, TestRunRequest.ExecuteAsync: Creating test run request.
TpTrace Verbose: 0 : 11856, 1, 2022/02/02, 12:29:47.675, 165366869415, vstest.console.exe, TestRunRequest.ExecuteAsync: Starting.
TpTrace Information: 0 : 11856, 1, 2022/02/02, 12:29:47.675, 165366874158, vstest.console.exe, TestRunRequest.ExecuteAsync: Starting run with settings:TestRunCriteria:
   KeepAlive=False,FrequencyOfRunStatsChangeEvent=10,RunStatsChangeEventTimeout=00:00:01.5000000,TestCaseFilter=,TestExecutorLauncher=
   Settingsxml=<RunSettings>
  <RunConfiguration>
    <MaxCpuCount>0</MaxCpuCount>
    <ResultsDirectory>c:\src\apm4\bin\x64\release\TestResultsKevin</ResultsDirectory>
    <TargetPlatform>X64</TargetPlatform>
    <TargetFrameworkVersion>.NETFramework,Version=v4.7.1</TargetFrameworkVersion>
    <InIsolation>true</InIsolation>
    <DesignMode>False</DesignMode>
    <CollectSourceInformation>False</CollectSourceInformation>
  </RunConfiguration>
  <RunSettingsDirectory>c:\src\apm4\bin\x64\release</RunSettingsDirectory>
  <LoggerRunSettings>
    <Loggers>
      <Logger friendlyName="console" assemblyQualifiedName="Microsoft.VisualStudio.TestPlatform.CommandLine.Internal.ConsoleLogger, vstest.console, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" codeBase="C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\Extensions\TestPlatform\vstest.console.exe" enabled="True">
        <Configuration>
          <verbosity>detailed</verbosity>
        </Configuration>
      </Logger>
    </Loggers>
  </LoggerRunSettings>
</RunSettings>


... removed lines to simplify reading ...



TpTrace Verbose: 0 : 11856, 12, 2022/02/02, 12:29:48.323, 165373312109, vstest.console.exe, TcpClientExtensions.MessageLoopAsync: Polling on remoteEndPoint: 127.0.0.1:49680 localEndPoint: 127.0.0.1:49677
TpTrace Verbose: 0 : 11856, 10, 2022/02/02, 12:29:48.339, 165373497097, vstest.console.exe, TestRequestSender.StartTestRun: Sending test run with message: {"Version":5,"MessageType":"TestExecution.StartWithSources","Payload":{"AdapterSourceMap":{"_none_":["C:\\src\\apm4\\bin\\x64\\Release\\CustomStatesSanityCheck.dll"]},"RunSettings":"<RunSettings>\r\n  <RunConfiguration>\r\n    <MaxCpuCount>0</MaxCpuCount>\r\n    <ResultsDirectory>c:\\src\\apm4\\bin\\x64\\release\\TestResultsKevin</ResultsDirectory>\r\n    <TargetPlatform>X64</TargetPlatform>\r\n    <TargetFrameworkVersion>.NETFramework,Version=v4.7.1</TargetFrameworkVersion>\r\n    <InIsolation>true</InIsolation>\r\n    <DesignMode>False</DesignMode>\r\n    <CollectSourceInformation>False</CollectSourceInformation>\r\n  </RunConfiguration>\r\n  <RunSettingsDirectory>c:\\src\\apm4\\bin\\x64\\release</RunSettingsDirectory>\r\n  <LoggerRunSettings>\r\n    <Loggers>\r\n      <Logger friendlyName=\"console\" assemblyQualifiedName=\"Microsoft.VisualStudio.TestPlatform.CommandLine.Internal.ConsoleLogger, vstest.console, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" codeBase=\"C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Professional\\Common7\\IDE\\Extensions\\TestPlatform\\vstest.console.exe\" enabled=\"True\">\r\n        <Configuration>\r\n          <verbosity>detailed</verbosity>\r\n        </Configuration>\r\n      </Logger>\r\n    </Loggers>\r\n  </LoggerRunSettings>\r\n</RunSettings>","TestExecutionContext":{"FrequencyOfRunStatsChangeEvent":10,"RunStatsChangeEventTimeout":"00:00:01.5000000","InIsolation":false,"KeepAlive":false,"AreTestCaseLevelEventsRequired":false,"IsDebug":false,"TestCaseFilter":null,"FilterOptions":null},"Package":null}}
TpTrace Verbose: 0 : 11856, 9, 2022/02/02, 12:29:48.339, 165373497228, vstest.console.exe, TestRequestSender.StartTestRun: Sending test run with message: {"Version":5,"MessageType":"TestExecution.StartWithSources","Payload":{"AdapterSourceMap":{"_none_":["C:\\src\\apm4\\bin\\x64\\Release\\CreateValueList.dll"]},"RunSettings":"<RunSettings>\r\n  <RunConfiguration>\r\n    <MaxCpuCount>0</MaxCpuCount>\r\n    <ResultsDirectory>c:\\src\\apm4\\bin\\x64\\release\\TestResultsKevin</ResultsDirectory>\r\n    <TargetPlatform>X64</TargetPlatform>\r\n    <TargetFrameworkVersion>.NETFramework,Version=v4.7.1</TargetFrameworkVersion>\r\n    <InIsolation>true</InIsolation>\r\n    <DesignMode>False</DesignMode>\r\n    <CollectSourceInformation>False</CollectSourceInformation>\r\n  </RunConfiguration>\r\n  <RunSettingsDirectory>c:\\src\\apm4\\bin\\x64\\release</RunSettingsDirectory>\r\n  <LoggerRunSettings>\r\n    <Loggers>\r\n      <Logger friendlyName=\"console\" assemblyQualifiedName=\"Microsoft.VisualStudio.TestPlatform.CommandLine.Internal.ConsoleLogger, vstest.console, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" codeBase=\"C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Professional\\Common7\\IDE\\Extensions\\TestPlatform\\vstest.console.exe\" enabled=\"True\">\r\n        <Configuration>\r\n          <verbosity>detailed</verbosity>\r\n        </Configuration>\r\n      </Logger>\r\n    </Loggers>\r\n  </LoggerRunSettings>\r\n</RunSettings>","TestExecutionContext":{"FrequencyOfRunStatsChangeEvent":10,"RunStatsChangeEventTimeout":"00:00:01.5000000","InIsolation":false,"KeepAlive":false,"AreTestCaseLevelEventsRequired":false,"IsDebug":false,"TestCaseFilter":null,"FilterOptions":null},"Package":null}}
TpTrace Verbose: 0 : 11856, 5, 2022/02/02, 12:29:48.339, 165373497430, vstest.console.exe, TestRequestSender.StartTestRun: Sending test run with message: {"Version":5,"MessageType":"TestExecution.StartWithSources","Payload":{"AdapterSourceMap":{"_none_":["C:\\src\\apm4\\bin\\x64\\Release\\DataLoaderUnitTests.dll"]},"RunSettings":"<RunSettings>\r\n  <RunConfiguration>\r\n    <MaxCpuCount>0</MaxCpuCount>\r\n    <ResultsDirectory>c:\\src\\apm4\\bin\\x64\\release\\TestResultsKevin</ResultsDirectory>\r\n    <TargetPlatform>X64</TargetPlatform>\r\n    <TargetFrameworkVersion>.NETFramework,Version=v4.7.1</TargetFrameworkVersion>\r\n    <InIsolation>true</InIsolation>\r\n    <DesignMode>False</DesignMode>\r\n    <CollectSourceInformation>False</CollectSourceInformation>\r\n  </RunConfiguration>\r\n  <RunSettingsDirectory>c:\\src\\apm4\\bin\\x64\\release</RunSettingsDirectory>\r\n  <LoggerRunSettings>\r\n    <Loggers>\r\n      <Logger friendlyName=\"console\" assemblyQualifiedName=\"Microsoft.VisualStudio.TestPlatform.CommandLine.Internal.ConsoleLogger, vstest.console, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" codeBase=\"C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Professional\\Common7\\IDE\\Extensions\\TestPlatform\\vstest.console.exe\" enabled=\"True\">\r\n        <Configuration>\r\n          <verbosity>detailed</verbosity>\r\n        </Configuration>\r\n      </Logger>\r\n    </Loggers>\r\n  </LoggerRunSettings>\r\n</RunSettings>","TestExecutionContext":{"FrequencyOfRunStatsChangeEvent":10,"RunStatsChangeEventTimeout":"00:00:01.5000000","InIsolation":false,"KeepAlive":false,"AreTestCaseLevelEventsRequired":false,"IsDebug":false,"TestCaseFilter":null,"FilterOptions":null},"Package":null}}
TpTrace Verbose: 0 : 11856, 7, 2022/02/02, 12:29:48.339, 165373497547, vstest.console.exe, TestRequestSender.StartTestRun: Sending test run with message: {"Version":5,"MessageType":"TestExecution.StartWithSources","Payload":{"AdapterSourceMap":{"_none_":["C:\\src\\apm4\\bin\\x64\\Release\\DataPurging.dll"]},"RunSettings":"<RunSettings>\r\n  <RunConfiguration>\r\n    <MaxCpuCount>0</MaxCpuCount>\r\n    <ResultsDirectory>c:\\src\\apm4\\bin\\x64\\release\\TestResultsKevin</ResultsDirectory>\r\n    <TargetPlatform>X64</TargetPlatform>\r\n    <TargetFrameworkVersion>.NETFramework,Version=v4.7.1</TargetFrameworkVersion>\r\n    <InIsolation>true</InIsolation>\r\n    <DesignMode>False</DesignMode>\r\n    <CollectSourceInformation>False</CollectSourceInformation>\r\n  </RunConfiguration>\r\n  <RunSettingsDirectory>c:\\src\\apm4\\bin\\x64\\release</RunSettingsDirectory>\r\n  <LoggerRunSettings>\r\n    <Loggers>\r\n      <Logger friendlyName=\"console\" assemblyQualifiedName=\"Microsoft.VisualStudio.TestPlatform.CommandLine.Internal.ConsoleLogger, vstest.console, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" codeBase=\"C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Professional\\Common7\\IDE\\Extensions\\TestPlatform\\vstest.console.exe\" enabled=\"True\">\r\n        <Configuration>\r\n          <verbosity>detailed</verbosity>\r\n        </Configuration>\r\n      </Logger>\r\n    </Loggers>\r\n  </LoggerRunSettings>\r\n</RunSettings>","TestExecutionContext":{"FrequencyOfRunStatsChangeEvent":10,"RunStatsChangeEventTimeout":"00:00:01.5000000","InIsolation":false,"KeepAlive":false,"AreTestCaseLevelEventsRequired":false,"IsDebug":false,"TestCaseFilter":null,"FilterOptions":null},"Package":null}}
TpTrace Verbose: 0 : 11856, 20, 2022/02/02, 12:29:49.010, 165380214391, vstest.console.exe, TcpClientExtensions.MessageLoopAsync: NotifyDataAvailable remoteEndPoint: 127.0.0.1:49682 localEndPoint: 127.0.0.1:49673
TpTrace Verbose: 0 : 11856, 20, 2022/02/02, 12:29:49.010, 165380216370, vstest.console.exe, TestRequestSender.OnExecutionMessageReceived: Received message: {"Version":5,"MessageType":"TestSession.Message","Payload":{"MessageLevel":0,"Message":"NUnit Adapter 4.1.0.0: Test execution started"}}
...

任何人都可以就如何使这项工作提供任何建议吗?

4

0 回答 0