2010-11-03 8 views
10

Ist es möglich noseeinen einzigen Test gleichzeitig zu verwenden (über mehrere Prozesse hinweg) und das Ergebnis zu einem einzigen Bestanden/Fehler-Ergebnis zu aggregieren?Ist es möglich, mit Nase mehrere Tests gleichzeitig durchzuführen?

Wir müssen denselben Test mehrmals gleichzeitig ausführen, um sicherzustellen, dass die Ressourcensperrung nicht beeinträchtigt wird. Wenn die Nase dies nicht kann, gibt es dann ein spezifisches Test-/Designmuster, um dies zu erreichen?

+1

Also ja, es ist möglich, einen einzigen Test gleichzeitig auszuführen. Können Sie die Aggregation zu einem einzelnen Pass/Fail detaillierter beschreiben? Möchten Sie einen einzelnen Test als "viele Male ausführen" markieren und andere als "ein Mal ausführen" in derselben Suite verwenden? Sollte in diesem Fall einfach sein. – TryPyPy

Antwort

9

Es ist möglich, run tests concurrently with nose:

das Plugin nose.plugin.multiprocess verwenden, können Sie einen Testlauf über eine konfigurierbare Anzahl von Arbeits Prozesse parallelisieren. Während dies CPU-gebundene Testläufe beschleunigen kann, ist es hauptsächlich nützlich für IO-gebundene Tests, die verbringen die meiste Zeit warten auf Daten zu kommen von irgendwo anders und können profitieren von der Parallelisierung.

Ich habe das Plugin angepasst, um einen einzelnen Test parallel auszuführen, wie Sie wollen. Download von http://paste.pocoo.org/show/319470/ und speichern Sie als nose/plugins/repeat.py. Fügen Sie dann in nose/plugins/builtin.py die Zeile ('nose.plugins.repeat', 'RepeatMultiProcess'), zu builtins hinzu. Anruf wie folgt:

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

Hinweis: Setup/Teardown-Unterstützung möglicherweise gebrochen. Wenn ja, ist die Lösung einfach, siehe Kommentar in Zeile

+0

Sie missverstehen - ich muss * einen einzigen Test * mehrmals gleichzeitig ausführen. –

+0

Ich habe nicht falsch verstanden, das ist die eingebaute Möglichkeit, "über mehrere Prozesse hinweg" zu laufen. Ich versuche herauszufinden, wie ich denselben Test parallel ausführen kann. – TryPyPy

+0

In der Tat funktioniert mein Hack, aber irgendwie scheint ein Test immer nur einmal zu laufen. Debugging ... – TryPyPy

11

Dies scheint etwas, was Sie in der Testdefinition selbst wollen, weil Sie auf die Aggregation der Ergebnisse behaupten möchten. Ich würde einen Blick auf multiprocessing im Test werfen. Erstellen Sie einen Pool, um Ihren Code parallel auszuführen. Sie können eine Queue verwenden, um die Ergebnisse zu aggregieren.

Verwandte Themen