如何并行运行unit testing(MSTest)?

我正在寻找并行运行testing套件的方法。

我知道.testrunconfig设置。 这使您可以复用 CPU的数量。

我想并行运行1000个testing。 这是有道理的,因为我正在testing一个Web服务,所以在testing中花费的时间有90%正在等待服务响应。

任何想法如何把这个closures? testing是为VS写的,但我打开在VS之外运行它们。

稍后编辑 :Visual Studiotesting团队已经在VS 2015 Update 1中添加了这个。请参阅Mark Sowul的答案。

Visual Studio 2015 Update 1增加了这一点。 https://www.visualstudio.com/en-us/news/releasenotes/vs2015-update1-vs#a-idmisc-a-miscellaneous

对于更新2,在“testing资源pipe理器”窗格顶部的工具栏中(“分组”和“search”框之间)有一个UI切换button。

对于更新1,在.runsettings中设置以下内容

 <?xml version="1.0" encoding="utf-8"?> <RunSettings> <RunConfiguration> <MaxCpuCount>0</MaxCpuCount> </RunConfiguration> </RunSettings> 

MaxCpuCount的值具有以下语义:

•'n'(其中1 <= n <=内核数量):启动“n”进程。

•任何其他值的“n”:启动的进程数将与机器上的可用内核数一样多。

您可以使用Visual Studio Team Test Blog中的方法来达到5

请记住,使用它可能会有并发问题,因为MSTest不能完全隔离每个testing(例如静态代码,使代码运行一次才有意思)。

(不知道为什么限制是5,但是如果parallelTestCount设置为5以上,MSTest将不会并行地运行它们。根据下面的注释,这个规则在Visual Studio 2013中明显地改变了)

我发现C:\ Program Files文件(x86)\ Microsoft Visual Studio 11.0 \ Common7 \ IDE \ CommonExtensions \ Microsoft \ TestWindow \ vstest.console.exe将运行一个.testsettings文件并行testing,如下所示:

 <?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> 

参考可以在这里findhttp://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 – 你期望/是我们失踪的那一点。

“并行testing的执行利用了机器上可用的内核,并通过在每个可用内核上启动testing执行引擎作为一个独立的过程,并将容器(包含要执行的testing的程序集,DLL或相关工件)交给它来实现,值得执行的testing“。

– >“单独的容器位是我所缺less的,为了让我的testing平行运行,我需要把testing分解成单独的testing程序集,在这之后,我看到了不同程序集中的testing并行运行“。

所以是的,我们通过使用他们方便的“并行运行”标志,在VSTS中同时运行testing,但这还不够,我们不得不将testing分解成单独的testing项目。 当然,逻辑上分组,不是一个每个testing,这将是荒谬的