82 votes

Comment puis-je exécuter des tests NUnit en parallèle?

J'ai un grand test d'acceptation (~10 secondes par test) test de la suite écrite à l'aide de NUnit. Je voudrais utiliser le fait que mes machines sont toutes multiples boîtes à noyaux. Idéalement, je serais capable d'avoir un essai de fonctionnement par cœur, indépendamment des autres tests.

Il est PNUnit, mais il est conçu pour les tests pour le filetage des problèmes de synchronisation et des choses comme ça, et je ne voyais pas d'une manière évidente de l'accomplir.

Est-il un switch/outil/option que je peux utiliser pour exécuter les tests en parallèle?

53voto

David_001 Points 2825

La norme nunit coureur ne prend pas en charge l'exécution de tests en parallèle. Vous pouvez créer votre propre lanceur de test pour exécuter les tests en parallèle (en utilisant vos tests nunit). Je ne suis pas sûr pourquoi, la nunit équipe ne l'avez pas déjà fait.

Sinon, MBUnit a la possibilité de créer parallélisables tests, et comme MBUnit a à peu près la même syntaxe que NUnit, il pourrait ne pas prendre que beaucoup d'efforts à faire la transition.

10voto

chillitom Points 5731

Si votre projet contient plusieurs test, Dll, vous pouvez les exécuter en parallèle à l'aide de ce script MSBuild. Évidemment, vous aurez besoin d'ajuster les chemins pour répondre à votre projet d'agencement.

Courir avec 8 cœurs d'exécuter avec: c:\proj> msbuild /m:8 RunTests.xml

RunTests.xml

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="RunTestsInParallel" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
    <Nunit Condition=" '$(Nunit)' == '' ">$(MSBuildProjectDirectory)\..\tools\nunit-console-x86.exe</Nunit>
  </PropertyGroup>

  <!-- see http://mikefourie.wordpress.com/2010/12/04/running-targets-in-parallel-in-msbuild/ -->

  <Target Name="RunTestsInParallel">
    <ItemGroup> 
      <TestDlls Include="..\bin\Tests\$(Configuration)\*.Tests.dll" />
    </ItemGroup>

    <ItemGroup> 
      <TempProjects Include="$(MSBuildProjectFile)" > 
        <Properties>TestDllFile=%(TestDlls.FullPath)</Properties> 
      </TempProjects> 
    </ItemGroup> 

    <MSBuild Projects="@(TempProjects)" BuildInParallel="true" Targets="RunOneTestDll" /> 
  </Target>

  <Target Name="RunOneTestDll"> 
    <Message Text="$(TestDllFile)" />
    <Exec Command="$(Nunit) /exclude=Integration $(TestDllFile)  /labels /xml:$(TestDllFile).results.xml"
      WorkingDirectory="$(MSBuildProjectDirectory)\..\bin\Tests\$(Configuration)" /> 
  </Target>

</Project>

4voto

kniemczak Points 354

Dans cet article , il est mentionné que, dans le but d'accélérer les tests de l'affiche exécute plusieurs instances de NUnit avec la commande paramètres de la spécification des tests de chaque instance doit s'exécuter.

ALE:

J'ai couru dans un curieux problème.

Nous utilisons nunit-console pour exécuter le test sur notre serveur d'intégration continue. Récemment, nous avons été en mouvement à partir de Nunit 2.4.8 à 2.5.5 et de .Net 3.5 et 4.0. Pour accélérer l'exécution du test de nous exécuter plusieurs instances de Nunit dans parallèle avec les différentes ligne de commande arguments

  • Nous avons deux copies de nos montages d'essai et la nunit binaires dans dossier de A et B.
  • Dans Un dossier que nous exécutons

nunit-console-x86.exe Model.dll Test.dll /exclure:MyCategory /xml=TestResults.xml /cadre=net 4.0 /noshadow

  • Dans le dossier B-nous l'exécuter

nunit-console-x86.exe Model.dll Test.dll /include:MyCategory /xml=TestResults.xml /cadre=net 4.0 /noshadow

Si nous exécutons les commandes en séquence les deux fonctionnent avec succès. Mais si nous les exécuter en parallèle un seul réussit. Aussi loin que je peux dire c'est celui qui se charge tout d'abord le test appareils d'éclairage. De l'autre échoue avec l' message "Impossible de trouver le luminaire".

Ce problème est-il déjà connu? Je pourrais de ne pas trouver tout ce qui est lié au bug liste sur launchpad. BTW Notre serveur s'exécute Windows Server 2008 64-bit. Je pourrais aussi reproduire le problème sur Windows 7 64 bits.

En supposant que ce bug est corrigé ou vous n'êtes pas en cours d'exécution la plus récente version(s) du logiciel mentionné, vous devriez être en mesure de reproduire leur technique.

Mise à jour

TeamCity ressemble à un outil que vous pouvez utiliser pour exécuter automatiquement tests NUnit. Ils ont un NUnit lanceur discuté ici, qui pourrait être utilisée pour lancer plusieurs NUnit instances. Ici est un blog de discuter de la mergind de plusieurs NUnit résultats XML en un seul fichier de résultat.

Donc, théoriquement, vous pourriez avoir TeamCity automatiquement lancer plusieurs tests NUnit basé sur ce que vous voulez diviser la charge de travail et de fusionner les résultats dans un fichier unique pour le post traitement.

Est automatisé suffisant pour vos besoins?

3voto

ZXX Points 3216

Tout simplement parce que PNUnit pouvez effectuer la synchronisation à l'intérieur de test de code ne signifie pas que vous avez réellement à utiliser cet aspect. Aussi loin que je peux voir il n'y a rien pour vous empêcher de juste fraie un ensemble et en ignorant le reste jusqu'à ce que vous besoin.

BTW, je n'ai pas le temps de lire la totalité de leur source, mais qui était curieux de vérifier la Barrière de la classe et il est très simple de verrouillage compteur. Il attend simplement jusqu'au N threads entrée et envoie ensuite le pouls de tous pour continuer à s'exécuter en même temps. C'est tout là est à lui - si vous ne la touchez pas, il ne sera pas vous mordre.

Peut-être un peu contre-intuitif pour une normale de filetée de développement (écluses sont normalement utilisé pour sérialiser l'accès - 1 de 1), mais il est tout à fait un fougueux diversion :-)

3voto

Rickard Points 1892

Vous pouvez maintenant utiliser NCrunch pour paralléliser des tests unitaires et vous pouvez même configurer le nombre de noyaux doit être utilisé par les NCrunch et combien devraient être utilisés par Visual Studio.

plus vous obtenez des essais en continu comme un bonus :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X