Bog*_*SFT 56 c# parallel-processing unit-testing web-services visual-studio
我正在寻找并行运行测试套件的方法.
我知道 .testrunconfig设置.这允许您多路复用 CPU的数量.
我想并行运行1000个测试.这是有道理的,因为我正在测试一个Web服务,所以在测试中花费的90%的时间都在等待服务响应.
关于如何解决这个问题的任何想法?测试是为VS编写的,但我愿意在VS之外运行它们.
稍后编辑:Visual Studio测试团队已在VS 2015 Update 1中添加了此内容.请参阅Mark Sowul的答案.
Ran*_*ric 29
通过使用Visual Studio Team Test Blog中的方法,您最多可以获得5个
请记住,使用它可能会出现并发问题,因为MSTest并没有完全隔离每个测试(静态结转,例如,对于运行一次的代码使事情变得有趣).
(不知道为什么限制为5,但如果parallelTestCount设置为大于5,MSTest将不会并行运行它们.根据下面的注释,此规则显然随Visual Studio 2013而变化)
Ale*_*lex 26
此页面上的大多数asnwers忘记提及MSTest 在单独的程序集中并行化测试.你必须将你的单元测试分成多个.dll来对其进行并行化.
但!最近的版本- MSTest的V2 -现在CAN并行"在组装"(耶!),你只需要安装一对夫妇的NuGet包的测试项目- TestFramework和TestAdapter -喜欢这里描述https://blogs.msdn.microsoft的.com/DEVOPS/2018/01/30/MSTEST-V2-在组装-并行测试执行/
然后只需将其添加到您的测试项目中
[assembly: Parallelize(Workers = 4, Scope = ExecutionScope.ClassLevel)]
Run Code Online (Sandbox Code Playgroud)
Mar*_*wul 21
Visual Studio 2015 Update 1添加了此功能. https://docs.microsoft.com/visualstudio/releasenotes/vs2015-update1-vs#misc
对于Update 2,在Test Explorer窗格顶部的工具栏中有一个UI切换按钮(在'grouping'和'search'框之间).
对于Update 1,在.runsettings中设置以下内容
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<RunConfiguration>
<MaxCpuCount>0</MaxCpuCount>
</RunConfiguration>
</RunSettings>
Run Code Online (Sandbox Code Playgroud)
MaxCpuCount的值具有以下语义:
•'n'(其中1 <= n <=核心数):将启动upto'n'进程.
•任何其他值的"n":启动的进程数量与计算机上的可用核心数量一样多.
我发现C:\ Program Files(x86)\ Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe将使用如下所示的.testsettings文件运行并行测试:
<?xml version="1.0" encoding="UTF-8"?>
<TestSettings name="TestSettings1" id="21859d0f-7bdc-4165-b9ad-05fc803c9ee9" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
<Description>These are default test settings for a local test run.</Description>
<Deployment enabled="false" />
<Execution parallelTestCount="8">
<TestTypeSpecific>
<UnitTestRunConfig testTypeId="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b">
<AssemblyResolution>
<TestDirectory useLoadContext="true" />
</AssemblyResolution>
</UnitTestRunConfig>
</TestTypeSpecific>
<AgentRule name="Execution Agents">
</AgentRule>
</Execution>
</TestSettings>
Run Code Online (Sandbox Code Playgroud)
参考资料可以在这里找到http://msdn.microsoft.com/en-us/library/vstudio/jj155796.aspx
上面的答案肯定有助于为我澄清一些事情,但是,这一点来自John Koerner的博客:https://johnkoerner.com/vs2015/parallel-test-execution-in-visual-studio-2015-update-1-might-not - 你期待什么/我们失踪的那一点.
"并行测试执行利用机器上的可用内核,并通过在每个可用内核上启动测试执行引擎作为一个独特的进程,并将其交给容器(程序集,DLL或包含要执行的测试的相关工件)来实现,值得进行的测试."
- >"单独的容器位是我缺少的部分.为了使我的测试并行运行,我需要将测试分成不同的测试程序集.在这之后,我看到不同程序集中的测试并行运行."
所以,是的,我们通过使用方便的"并行运行"标志在VSTS中并行运行测试,但这还不够,我们不得不将测试分成单独的测试项目.从逻辑上分组,而不是每个测试的项目,这将是荒谬的