2013-07-10 15 views
12

Ich verwende Pytest. Ich habe zwei Dateien in einem Verzeichnis. In einer der Dateien gibt es einen lange laufenden Testfall, der eine Ausgabe erzeugt. In der anderen Datei befindet sich ein Testfall, der diese Ausgabe liest. Wie kann ich die ordnungsgemäße Ausführung der beiden Testfälle sicherstellen? Gibt es eine andere Alternative als die Testfälle in derselben Datei in der richtigen Reihenfolge zu platzieren?Testfall Ausführungsreihenfolge in Pytest

+3

Im Allgemeinen ist es keine gute Idee, Testfälle voneinander abhängig zu machen. Wenn Sie dieselben Daten in 2 Testfällen verwenden müssen, warum fügen Sie sie nicht dem Abschnitt "setup" hinzu? – Brad

+0

Ich weiß. Ich mag es auch nicht, aber im Moment brauche ich es. – Kocka

+1

Ich möchte es nicht zum Setup-Abschnitt hinzufügen, weil es etwa 15-20 Minuten dauert. – Kocka

Antwort

7

Im Allgemeinen können Sie das Verhalten von grundsätzlich jedem Teil von pytest unter Verwendung seiner well-specified hooks konfigurieren.

In Ihrem Fall möchten Sie den "pytest_collection_modifyitems" Hook, mit dem Sie die gesammelten Tests neu anordnen können.

Das sagte, es scheint, als ob die Bestellung Ihrer Tests einfacher sein sollte - das ist schließlich Python! Also habe ich ein Plugin geschrieben, um Tests zu bestellen. Überprüfen Sie die docs oder installieren Sie es von pypi. Im Moment empfehle ich die Verwendung von @ pytest.mark.first und @ pytest.mark.second oder einer der @ pytest.mark.order # -Marker, aber ich habe einige Ideen über nützlichere APIs. Vorschläge willkommen :)

+0

Hey. Danke, dass du dieses Plugin erstellt hast. Können Sie es so ändern, dass es nur nachfolgende Ziffern als Reihenfolge extrahiert. ZB wenn ich @ pytest.mark.custom1 sage, dann sollte 1 die Bestellung sein. Dies würde sehr helfen! –

+0

Ich kann es versuchen. Ich denke, v0.2 hat dieses Verhalten mit einem "Order" -Marker anstelle von beliebigen Markern. Könnten Sie dies als Feature-Anfrage auf der github-Seite von pytest-ordering aufschreiben? https://github.com/ftobia/pytest-order –

+0

Die Hooks Link sollte gehen zu: http://pytest.org/latest/writing_plugins.html#well-specified-hooks –

1

Vielleicht können Sie dependency pytest Plugin prüfen, mit, in dem Sie die Test Abhängigkeiten leicht einstellen:

@pytest.mark.dependency() 
def test_long(): 
    pass 

@pytest.mark.dependency(depends=['test_long']) 
def test_short(): 
    pass 

Auf diese Weise test_short wird nur ausgeführt, wenn test_long Erfolg ist und Kraft der Ausführungssequenz auch.

+0

Oben funktioniert nicht für die Reihenfolge Sequenzierung. Zum Beispiel: wenn Sie die Bestellung umdrehen. Ich bin schon lange auf kurze angewiesen. In diesem Fall wird long übersprungen. – peaxol

3

Es gibt auch ein Plugin pytest-ordering, das Ihren Anforderungen entspricht.

+0

Frank T.'s Antwort erwähnt bereits dieses Plugin und wurde 3 Jahre vor dieser Antwort gepostet. – Ave

+0

uh, aber er hat den Namen nicht erwähnt. deshalb habe ich diesen Punkt wahrscheinlich völlig verfehlt. –