我想限制并行运行大量测试的并行量。我有超过 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"}}
...
任何人都可以就如何使这项工作提供任何建议吗?