2010-06-24 10 views
7

Ich habe ein Verzeichnis mit vielen .py-Dateien (sagen Sie test_1.py, test_2.py und so weiter) Jeder von ihnen ist richtig geschrieben, um mit der Nase verwendet werden. Wenn ich also das Skript nosetests ausführe, findet es alle Tests in allen .py-Dateien und führt sie aus.Getests parallelisieren mit Nase in Python

Ich möchte sie jetzt parallelisieren, so dass alle Tests in allen .py-Dateien als parallelisierbar behandelt und an Worker-Prozesse delegiert werden.

Es scheint, dass standardmäßig tun:

nosetests --processes=2 

stellt keine Parallelität bei allen und alle Tests in allen Py-Dateien laufen nach wie vor in einem nur Prozess

ich eine _multiprocess_can_split_ versucht Putting = True in jede der .py-Dateien aber das macht keinen Unterschied

Danke für alle Eingaben!

+0

Wie Bestimmung fügen Sie, ob es parallelisiert überhaupt? Ich habe ein ähnliches Ziel, aber ich * denke * Ich habe ein anderes Problem von dir ... möglicherweise nicht. – fholo

Antwort

12

Es scheint, dass Nase, eigentlich das Multiprocess Plugin, Test parallel laufen lässt. Der Vorbehalt ist, dass die Art und Weise, wie es funktioniert, Sie am Ende keine Tests für mehrere Prozesse ausführen können. Das Plugin erstellt eine Testwarteschlange, erstellt mehrere Prozesse, und dann verarbeitet jeder Prozess die Warteschlange gleichzeitig. Es gibt keinen Testversand für jeden Prozess. Wenn Ihr Test also sehr schnell ausgeführt wird, könnte er im selben Prozess ausgeführt werden.

Das folgende Beispiel zeigt diese beaviour:

Datei test1.py

import os 
import unittest 

class testProcess2(unittest.TestCase): 

    def test_Dummy2(self): 
     self.assertEqual(0, os.getpid()) 

Datei test2.py

import os 
import unittest 

class testProcess2(unittest.TestCase): 

    def test_Dummy2(self): 
     self.assertEqual(0, os.getpid()) 

nosetests --processes = 2 Ausgänge Lauf (man beachte das identische Verfahren ID)

FF 
====================================================================== 
FAIL: test_Dummy2 (test1.testProcess2) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "C:\temp\test1.py", line 7, in test_Dummy2 
    self.assertEqual(0, os.getpid()) 
AssertionError: 0 != 94048 

====================================================================== 
FAIL: test_Dummy1 (test2.testProcess1) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "C:\temp\test2.py", line 8, in test_Dummy1 
    self.assertEqual(0, os.getpid()) 
AssertionError: 0 != 94048 

---------------------------------------------------------------------- 
Ran 2 tests in 0.579s 

FAILED (failures=2) 

Nun, wenn wir einen Schlaf in einem der Test

import os 
import unittest 
import time 

class testProcess2(unittest.TestCase): 

    def test_Dummy2(self): 
     time.sleep(1) 
     self.assertEqual(0, os.getpid()) 

Wir bekommen (man beachte die verschiedenen Prozess-ID)

FF 
====================================================================== 
FAIL: test_Dummy1 (test2.testProcess1) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "C:\temp\test2.py", line 8, in test_Dummy1 
    self.assertEqual(0, os.getpid()) 
AssertionError: 0 != 80404 

====================================================================== 
FAIL: test_Dummy2 (test1.testProcess2) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "C:\temp\test1.py", line 10, in test_Dummy2 
    self.assertEqual(0, os.getpid()) 
AssertionError: 0 != 92744 

---------------------------------------------------------------------- 
Ran 2 tests in 1.422s 

FAILED (failures=2) 
Verwandte Themen