2011-09-28 4 views
0

특정 SOA 스타일 응용 프로그램에서 저는 각 서비스에서 많은 수의 단위 테스트를 수행하고 있습니다. 각 서비스에 대한 테스트가 순차적으로 실행되며 각 서비스에 대한 테스트를 병렬로 실행하여 테스트하고 싶습니다. 따라서 그들이 발견/해당 검색으로 발탁 maxbuild를 사용하여 msbuild에서 단위 테스트를 병렬화 하시겠습니까?

<Target Name="RunUnitTests"> 
    <ItemGroup Condition="'@(UnitTestsOutput)' == ''"> 
     <UnitTestsOutput Include="$(UnitTestsOutputFolder)\**\*Tests.dll" /> 
    </ItemGroup> 

    <Exec Command="$(NUnitRunner) /nologo /labels /timeout=30000 @(UnitTestsOutput, ' ')" /> 
</Target> 

그래서 모든 테스트 프로젝트 어셈블리는, 이름이 "테스트"로 끝 : 우리의 MSBuild 파일에서

는이 다음이다. 이와 같은 작업을 수행 할 수 있습니까?

<Target Name="RunUnitTests"> 
    <ItemGroup Condition="'@(UnitTestsOutput)' == ''"> 
     <UnitTestsOutputService1 Include="$(UnitTestsOutputFolder)\*Service1*\*Tests.dll" /> 
     <UnitTestsOutputService2 Include="$(UnitTestsOutputFolder)\*Service2*\*Tests.dll" /> 
     <UnitTestsOutputService3 Include="$(UnitTestsOutputFolder)\*Service3*\*Tests.dll" /> 
     <UnitTestsOutputService4 Include="$(UnitTestsOutputFolder)\*Service4*\*Tests.dll" /> 
     <UnitTestsOutputService5 Include="$(UnitTestsOutputFolder)\*Service5*\*Tests.dll" /> 
    </ItemGroup> 

    <Exec Command="$(NUnitRunner) /nologo /labels /timeout=30000 @(UnitTestsOutputService1, ' ')" /> 
    <Exec Command="$(NUnitRunner) /nologo /labels /timeout=30000 @(UnitTestsOutputService2, ' ')" /> 
    <Exec Command="$(NUnitRunner) /nologo /labels /timeout=30000 @(UnitTestsOutputService3, ' ')" /> 
    <Exec Command="$(NUnitRunner) /nologo /labels /timeout=30000 @(UnitTestsOutputService4, ' ')" /> 
    <Exec Command="$(NUnitRunner) /nologo /labels /timeout=30000 @(UnitTestsOutputService5, ' ')" /> 
</Target> 

그리고 빌드를 사용하여 실행하면 다음/그것은 아마도 테스트의 그 세트를 parallelise 수 maxcpucount ?

답변

1

당신은 사용할 수 있습니다 BuildInParallel = true로 지정 대상 :

<Project .... DefaultTargets="RunAll" /> 
... 
    <Target Name="RunSingle"> 
     <ItemGroup> 
      <UnitTestsOutputService Include="$(UnitTestsOutputFolder)\*Service$(ServiceNum)*\*Tests.dll" /> 
     </ItemGroup> 
     <Exec Command="$(NUnitRunner) /nologo /labels /timeout=30000 @(UnitTestsOutputService , ' ')" /> 
    </Target> 

    <ItemGroup> 
    <Parallel Include="1;2;3;4;5" /> 
    <ItemGroup> 

    <Target Name="RunAll"> 

    <ItemGroup> 
     <Projects Include="$(MSBuildProjectFile)" > <-- for recursive call to same build file --> 
     <Properties>ServiceNum=%(parallel.identity)</Properties> <-- Service1, Service2 .. --> 
     </Projects> 
    </ItemGroup> 
    <MSBuild Projects="@(Projects)" BuildInParallel="true" Targets="RunSingle" /> 
    </Target> 
관련 문제