2012-03-28 4 views
2

Ich mag einige umfangreichen Tests gegen ein meine Testfall (zum Beispiel ein Dokument erstellen, einige seltsamen Dinge zu debuggen mir begegnet ist ..) auszuführenWie kann ich meinen Django-Testfall mehrmals ausführen?

Meine brutale Gewalt war python manage.py test myapp in einer Schleife zu feuern entweder mit Popen oder os.system, aber jetzt bin ich wieder auf reine Art und Weise? .....

def SimpleTest(unittest.TestCase): 
    def setUp(self): 

    def test_01(self): 

    def tearDown(self): 

def suite(): 
    suite = unittest.TestCase() 
    suite.add(SimpleTest("setUp")) 
    suite.add(SimpleTest("test_01")) 
    suite.add(SimpleTest("tearDown")) 
    return suite 

def main(): 
    for i in range(n): 
    suite().run("runTest") 

lief ich python manage.py test myapp und ich bekam

File "/var/lib/system-webclient/webclient/apps/myapps/tests.py", line 46, in suite 
    suite = unittest.TestCase() 
    File "/usr/lib/python2.6/unittest.py", line 216, in __init__ 
    (self.__class__, methodName) 
ValueError: no such test method in <class 'unittest.TestCase'>: runTest 

ich den Fehler gegoogelt habe, aber ich noch ahnungslos (Ich wurde gesagt, eine leere runTest Methode hinzufügen, aber das klingt nicht richtig auf alle ...)

Nun, nach Pythons unittest.TestCase:

Die einfachste Testcase Unterklasse wird einfach überschreiben die runTest() Methode, um spezifische Testcode

ausführen Wie Sie mein ganzes Ziel sehen können, ist meine SimpleTest N-mal ausgeführt werden. Ich muss den Überblick behalten, Fehler gegen N.

Welche Option habe ich?

Danke.

+2

Was ist der Sinn es mehr als einmal zu laufen? Suchst du nach Rennbedingungen? –

+0

@AlexLebedev Ja, ich glaube, das ist meine Absicht. Ich bin auf diesen "mysteriösen Fehler" gestoßen, der gelegentlich auftritt. Ich will damit sagen, dass es nichts mit dem Netzwerk zu tun hat. Ich verstehe, dass dies kein fairer Unit-Test ist. Laut der Dokumentation gibt es eine Möglichkeit zu sagen, wie viele in Ordnung sind und wie viele nach einem Test ausfallen. Aber ich bin mir nicht sicher, ob es einen richtigen Weg gibt zu tun, was ich will oder nicht. – User007

Antwort

0

Die Verfolgung von Race-Bedingungen über Komponententests ist schwierig. Manchmal ist es besser, wenn Sie Ihr Frontend mit einem automatisierten Test-Tool wie Selenium anfassen - anders als beim Komponententest ist die Umgebung gleich und es ist keine zusätzliche Arbeit erforderlich, um die Parallelität sicherzustellen. Hier ist eine Möglichkeit, in Tests gleichzeitig Code auszuführen: http://www.caktusgroup.com/blog/2009/05/26/testing-django-views-for-concurrency-issues/

Denken Sie daran, dass der gleichzeitige Test kein eindeutiger Beweis dafür ist, dass Sie keine Race Conditions haben - es gibt keine Garantie, dass sie alle neu erstellen mögliche Kombinationen der Ausführungsreihenfolge zwischen Prozessen.