2010-11-03 34 views
10

Est-il possible d'utiliser nose pour exécuter un seul test simultanément (sur plusieurs processus) et agréger le résultat dans un seul résultat réussite/échec?Est-il possible d'utiliser Nose pour exécuter un test plusieurs fois, en même temps?

Nous avons besoin d'exécuter le même test plusieurs fois simultanément pour garantir que le verrouillage des ressources n'est pas affecté. Si le nez ne peut pas faire cela, existe-t-il un modèle de test/conception spécifique à suivre pour y parvenir?

+1

Alors oui, il est possible d'exécuter un seul test simultanément. Pouvez-vous décrire l'agrégation en un seul passage/échec plus en détail? Voulez-vous marquer un seul test comme «exécuter plusieurs fois» et en avoir d'autres comme «exécuter une seule fois» dans la même suite? Devrait être facile si oui. – TryPyPy

Répondre

9

Il est possible de run tests concurrently with nose:

Utilisation du plug-in nose.plugin.multiprocess , vous pouvez paralléliser un essai sur un nombre configurable de travailleurs processus. Bien que cela puisse accélérer exécutions test liées à l'UC, il est principalement utile pour les tests liés à l'E/S qui passent la plupart du temps en attente de données à arrivent d'ailleurs et peuvent bénéficier de la parallélisation.

J'ai adapté le plugin pour exécuter un seul test en parallèle comme vous le souhaitez. Télécharger à partir de http://paste.pocoo.org/show/319470/ et enregistrer sous nose/plugins/repeat.py. Ensuite, dans nose/plugins/builtin.py, ajoutez la ligne ('nose.plugins.repeat', 'RepeatMultiProcess'), à builtins. Appelez comme ceci:

c:\python27\python nose-1.0.0\selftest.py --repeat-processes=2 --repeat-times=3 test2.py 

Remarque: le support de configuration/démontage peut être cassé. Si oui, le correctif est simple, voir commentaire à la ligne

+0

Vous vous méprenez - j'ai besoin d'exécuter * un seul test * plusieurs fois simultanément. –

+0

Je n'ai pas mal compris, c'est la façon intégrée d'exécuter "sur plusieurs processus". J'essaie de comprendre comment l'utiliser pour exécuter le même test en parallèle. – TryPyPy

+0

En effet, mon hack fonctionne, mais en quelque sorte un test semble toujours fonctionner qu'une seule fois. Débogage ... – TryPyPy

11

Cela semble être quelque chose que vous voulez dans la définition de test elle-même, car vous voulez affirmer sur l'agrégation des résultats. Je voudrais jeter un oeil à l'aide de multiprocessing dans le test. Créez un pool pour exécuter votre code en parallèle. Vous pouvez utiliser un Queue pour agréger les résultats.