Pytest-Tutorial: Detaillierte Erklärung der Pytest-Befehlszeilenoptionen (sehr ausführlich)

pytest ist ein beliebtes Python-Testframework, das viele Befehlszeilenoptionen bietet, die Benutzern mehr Kontrolle über den Testausführungsprozess geben. Wenn Sie Pytest zum Testen verwenden, ist es sehr wichtig, mit den Befehlszeilenoptionen von Pytest vertraut zu sein, um Fehler zu reduzieren und die Testeffizienz zu verbessern. In diesem Artikel werden die Befehlszeilenoptionen von Pytest detailliert beschrieben und Beispiele gegeben.

1. Klassifizierung der Pytest-Befehlszeilenoptionen

Die Befehlszeilenoptionen für Pytest können in drei Kategorien unterteilt werden:

  1. Umgebungskonfigurationsoptionen: Diese Optionen werden verwendet, um die Umgebungskonfiguration von Pytest festzulegen, z. B. das Festlegen der Protokollebene, das Überschreiben der Konfigurationsdatei, das Festlegen des Testmodus usw.
  2. Testfilteroptionen: Diese Optionen werden zum Filtern und Auswählen von Testfällen verwendet, z. B. zum Angeben eines Testverzeichnisses, zum Auswählen eines bestimmten Testmoduls, zum Ausführen einer bestimmten Testfunktion usw.
  3. Testausführungsoptionen: Diese Optionen werden verwendet, um den Testausführungsprozess von Pytest zu steuern, z. B. das Wiederholen fehlgeschlagener Tests, das Generieren von Testberichten, das parallele Ausführen von Tests usw.

Im Folgenden werden wir die spezifische Verwendung dieser Befehlszeilenoptionen einzeln vorstellen.

2. Umgebungskonfigurationsoptionen

  1. --version: Gibt die Pytest-Versionsnummer aus.

  2. -h, --help: Pytest-Befehlszeilenoptionen und Verwendungsanweisungen anzeigen.

  3. --verbose, -v: Erhöhen Sie die Ausführlichkeit der Testergebnisausgabe.

  4. --quiet, -q: Reduziert die Ausführlichkeit der Testergebnisausgabe.

  5. --traceconfig: Detaillierte Informationen beim Parsen und Laden von Konfigurationsdateien anzeigen.

  6. --pdb: Wenn ein Test fehlschlägt oder eine Ausnahme auftritt, rufen Sie den Python-Debugger auf.

  7. --pdbcls: Typ des benutzerdefinierten Debuggers.

  8. --capture: Legen Sie die Standardmethode zur Erfassung des Ausgabestreams von Pytest fest. Es gibt drei optionale Werte: sys, fd, no.

  9. --norecursedirs: Legen Sie fest, welche Verzeichnisse nicht nach Testfällen durchsucht werden.

  10. --rootdir: Legen Sie das Stammverzeichnis von Pytest fest.

  11. --maxfail=n: Legen Sie fest, dass die Testausführung nach dem n-ten Testfehler gestoppt wird.

  12. --junit-xml=PFAD: Testergebnisse in eine JUnit-XML-Datei ausgeben.

3. Testen Sie die Filteroptionen

  1. Pfad: Geben Sie das Testverzeichnis oder die Testdatei an. Dies kann ein relativer oder absoluter Pfad sein. Zum Beispiel: pytest tests/.

  2. -m: Wählen Sie bestimmte markierte Testfälle zur Ausführung aus. Zum Beispiel: pytest -m "slow".

  3. -k: Wählen Sie einen Testfall aus, der ein Schlüsselwort zur Ausführung enthält. Zum Beispiel: pytest -k "add or subtract".

  4. -x: Testausführung stoppen, wenn ein Testfall fehlschlägt.

  5. --pdb: Wenn ein Test fehlschlägt oder eine Ausnahme auftritt, rufen Sie den Python-Debugger auf.

  6. --lf: Führen Sie nur die Testfälle erneut aus, die beim letzten Test fehlgeschlagen sind.

  7. --ff: Führen Sie nur die Testfälle erneut aus, die beim letzten Test fehlgeschlagen sind, und führen Sie diese Testfälle erneut aus, nachdem alle Tests abgeschlossen sind.

  8. --sw: Führen Sie das zuletzt geänderte Testmodul erneut aus.

  9. --last-failed-no-failures: Führen Sie nur den letzten fehlgeschlagenen Testfall erneut aus (wenn keine fehlgeschlagenen Testfälle vorhanden sind, wird der Test nicht ausgeführt).

  10. --collect-only: Führen Sie nur die Sammlungsphase von Testfällen aus, führen Sie nicht die Ausführungsphase von Testfällen aus.

  11. --pdbcls: Typ des benutzerdefinierten Debuggers.

  12. --trace: Zeigt die internen Trace-Informationen von Pytest an.

  13. --count: Führen Sie die angegebene Anzahl von Testfällen aus. Zum Beispiel: pytest -v --count=10.

4. Testausführungsoptionen

  1. -n: Testfälle parallel ausführen, worauf eine Zahl folgen kann, um den Grad der Parallelität anzugeben. Zum Beispiel: pytest -n 4.

  2. -x: Testausführung stoppen, wenn ein Testfall fehlschlägt.

  3. --maxfail=n: Legen Sie fest, dass die Testausführung nach dem n-ten Testfehler gestoppt wird.

  4. --last-failed: Nur den letzten fehlgeschlagenen Testfall erneut ausführen.

  5. --failed-first: Führen Sie zuerst die zuvor fehlgeschlagenen Testfälle aus.

  6. --reruns=n: Führen Sie Tests n-mal erneut aus, falls der Testfall fehlschlägt.

  7. --pdb: Wenn ein Test fehlschlägt oder eine Ausnahme auftritt, rufen Sie den Python-Debugger auf.

  8. --pdbcls: Typ des benutzerdefinierten Debuggers.

  9. --junit-xml=PFAD: Testergebnisse in eine JUnit-XML-Datei ausgeben.

  10. --html=PATH: Testergebnisse in eine HTML-Datei ausgeben.

  11. --tb=long/short/line/native/no: Legt das Format der ausgegebenen Fehlermeldung fest.

  12. --capture=no: Deaktiviert die Erfassung von Standardausgabe und Standardfehler und gibt sie direkt an das Terminal aus.

  13. --capture=sys/stdout/stderr: Legen Sie die Standardmethode zur Erfassung des Ausgabestreams von Pytest fest. Es gibt drei optionale Werte: sys, fd, no.

  14. --show-capture=all/failed/no: Steuert, ob der erfasste Stdout-Stream angezeigt werden soll.

  15. --disable-warnings: Pytest-Warnmeldungen deaktivieren.

Das Obige stellt die Einführung der Befehlszeilenoptionen von Pytest dar. Mithilfe dieser Optionen können Sie den Testausführungsprozess von Pytest besser steuern, Fehler reduzieren und die Testeffizienz verbessern. Als nächstes werde ich Codebeispiele und Ausführungseffekte einiger Befehlszeilenoptionen geben.

5. Codebeispiel und Laufeffekt

    1.--Version: Geben Sie die Pytest-Versionsnummer aus.

Diese Option kann durch Ausführen des Befehls pytest --version verwendet werden. Das Codebeispiel lautet wie folgt:

$ pytest --version
Dies ist die Pytest-Version 5.0.1, importiert aus /usr/local/lib/python3.6/site-packages/pytest.py

    2.-h, --help: Pytest-Befehlszeilenoptionen und Verwendungsanweisungen anzeigen.

Diese Option kann durch Ausführen des Befehls pytest --help verwendet werden. Das Codebeispiel lautet wie folgt:

$ pytest --help
Verwendung: pytest [Optionen] [Datei_oder_Verzeichnis] ​​[Datei_oder_Verzeichnis] ​​[...]

Positionsargumente:
  file_or_dir Testdatei oder Stammverzeichnis, um nach Tests zu suchen

optionale Argumente:
  -h, --help zeigt diese Hilfemeldung an und beendet sie.
  --version zeigt die Pytest-Version und Informationen zu Plugins an
...

    3.--verbose, -v: Erhöhen Sie die Ausführlichkeit der Testergebnisausgabe.

Diese Option kann durch Ausführen des Befehls pytest -v verwendet werden. Das Codebeispiel lautet wie folgt:

$ pytest -v
test_example.py::test_add PASSED [50 %]
test_example.py::test_subtract PASSED [100 %]

============================ 2 in 0,03 s vergangen ================= ============
 

    4. --quiet, -q: Reduzieren Sie die Ausführlichkeit der Testergebnisausgabe.

Diese Option kann durch Ausführen des Befehls pytest -q verwendet werden. Das Codebeispiel lautet wie folgt:

$ pytest -q
..
2 in 0,03 Sekunden bestanden
 

 

    5. --traceconfig: Zeigt detaillierte Informationen beim Parsen und Laden von Konfigurationsdateien an.

Diese Option kann durch Ausführen des Befehls pytest --traceconfig verwendet werden. Das Codebeispiel lautet wie folgt:

 $ pytest --traceconfig
mit: pytest-5.0.1, py-1.8.0, pluggy-0.12.0
aktive Plugins:
  * pytest_cov-2.7.1 unter /Users/user/anaconda3/envs/test/lib/python3.6 /site-packages/pytest_cov/plugin.py
deaktivierte Plugins:
Collector: <_pytest.main.Session object at 0x107cbe3c8>

 

   6. --pdb: Rufen Sie den Python-Debugger auf, wenn ein Test fehlschlägt oder eine Ausnahme auftritt.

Diese Option kann durch Ausführen des Befehls pytest --pdb verwendet werden. Wenn im Testfall ein Fehler auftritt, wird dieser automatisch in den pdb-Debugger eingegeben. Das Codebeispiel lautet wie folgt:

 

$ pytest --pdb
test_example.py::test_add PASSED [50 %]
test_example.py::test_subtract FAILED [100 %]

================================= FEHLER ============== =====================
________________________________ test_subtract ________________________________

    def test_subtract():
        Assert Subtract(4, 3) == 1
> Assert Subtract(2, 3) == -1
E Assert 2 == -1
E + wobei 2 = Subtract(2, 3)

test_example.py:10: AssertionError
----------------------------- PDB ------------- ----------------
> /Users/user/example/test_example.py(10)test_subtract()
...
(Pdb) 
 

 

    7.--capture: Legen Sie die Standardmethode zur Erfassung des Ausgabestreams von Pytest fest. Es gibt drei optionale Werte: sys, fd, no.

Diese Option kann durch Ausführen des Befehls pytest --capture=sys verwendet werden, um den Standardausgabestream und die Standardfehlerausgabe an das Protokollsystem von pytest umzuleiten. Das Codebeispiel lautet wie folgt:

 

$ pytest --capture=sys
test_example.py::test_add PASSED [ 50 %]
test_example.py::test_subtract FAILED [100 %]

================================= FEHLER ============== =====================
________________________________ test_subtract ________________________________

    def test_subtract():
        Assert Subtract(4, 3) == 1
> Assert Subtract(2, 3) == -1
E Assert 2 == -1
E + wobei 2 = Subtract(2, 3)

test_example.py:10: AssertionError

[Capture] Erfassen der Logcall-Ausgabe in „log“: sys

    8. --norecursedirs: Legen Sie fest, welche Verzeichnisse nicht nach Testfällen suchen.

Diese Option kann durch Ausführen des Befehls pytest --norecursedirs=examples verwendet werden, um das Beispielverzeichnis aus dem Pfad für die Suche nach Testfällen auszuschließen. Das Codebeispiel lautet wie folgt:

$ pytest --norecursedirs=examples
test_example.py::test_add BESTANDEN [50 %]
test_example.py::test_subtract BESTANDEN [100 %]

============================ 2 in 0,03 s vergangen ================= ============

    9. --rootdir: Legen Sie das Stammverzeichnis von Pytest fest.

Diese Option kann verwendet werden, indem Sie den Befehl pytest --rootdir=/path/to/project ausführen und das Stammverzeichnis von pytest auf /path/to/project festlegen. Das Codebeispiel lautet wie folgt:

$ pytest --rootdir=/path/to/project
test_example.py::test_add PASSED [ 50 %]
test_example.py::test_subtract PASSED [100 %]

============================ 2 in 0,03 s vergangen ================= ============
 

 

10.--maxfail=n: Legen Sie fest, dass die Testausführung gestoppt wird, nachdem der n-te Test fehlgeschlagen ist.

Diese Option kann durch Ausführen des Befehls pytest --maxfail=1 verwendet werden. Wenn der erste Testfall fehlschlägt, wird die Testausführung gestoppt. Das Codebeispiel lautet wie folgt:

$ pytest --maxfail=1
test_example.py::test_add PASSED [50 %]
test_example.py::test_subtract FAILED [100 %]

================================= FEHLER ============== =====================
________________________________ test_subtract ________________________________

    def test_subtract():
        Assert Subtract(4, 3) == 1
> Assert Subtract(2, 3) == -1
E Assert 2 == -1
E + wobei 2 = Subtract(2, 3)

test_example.py:10: AssertionError

========================== 1 fehlgeschlagen, 1 bestanden in 0,04 s ================ ==========

 

    11.--junit-xml=PATH: Testergebnisse in die JUnit-XML-Datei ausgeben.

Diese Option kann durch Ausführen des Befehls pytest --junit-xml=test_results.xml verwendet werden, um die Testergebnisse in die Datei test_results.xml auszugeben. Das Codebeispiel lautet wie folgt:

$ pytest --junit-xml=test_results.xml
test_example.py::test_add BESTANDEN [50 %]
test_example.py::test_subtract BESTANDEN [100 %]

============================ 2 in 0,03 s vergangen ================= ============
 

    12.Pfad: Geben Sie das Testverzeichnis oder die Testdatei an. Dies kann ein relativer oder absoluter Pfad sein. Zum Beispiel: pytest tests/.

Diese Option kann durch Ausführen des Befehls pytest tests/ verwendet werden und nur die Testfälle im Tests-Verzeichnis ausführen. Das Codebeispiel lautet wie folgt:

 

$ pytest tests/
test_example.py::test_add PASSED [50 %]
test_example.py::test_subtract PASSED [100 %]

============================ 2 in 0,03 s vergangen ================= ============
 

 

    13.-m: Wählen Sie bestimmte markierte Testfälle zur Ausführung aus. Zum Beispiel: pytest -m "slow".

Diese Option kann durch die Verwendung der @pytest.mark-Markierung im Testfall verwendet werden, zum Beispiel:

 

import pytest

@pytest.mark.slow
def test_slow():
    pass

def test_not_slow():
    pass

Führen Sie dann den Befehl pytest -m „slow“ aus, um nur die mit @pytest.mark.slow markierten Testfälle auszuführen. Das Codebeispiel lautet wie folgt:

 

$ pytest -m "slow"
test_example.py:3: PytestUnknownMarkWarning: Unknown pytest.mark.slow – ist das ein Tippfehler? Sie können benutzerdefinierte Markierungen registrieren, um diese Warnung zu vermeiden. Weitere Informationen finden Sie unter https://docs.pytest.org/en/latest/mark.html
  @pytest.mark.slow
. In 0,00 Sekunden wurden keine Tests ausgeführt

PytestUnknownMarkWarning: Unbekannter pytest.mark.slow – ist das ein Tippfehler? Sie können benutzerdefinierte Markierungen registrieren, um diese Warnung zu vermeiden – Einzelheiten finden Sie unter https://docs.pytest.org/en/latest/mark.html
 

 

    14.-k: Wählen Sie einen Testfall aus, der ein Schlüsselwort zur Ausführung enthält. Zum Beispiel: pytest -k "add or subtract".

Diese Option kann durch Ausführen des Befehls pytest -k „add or subtract“ verwendet werden und nur die Testfälle ausführen, deren Testfallname die Zeichenfolge „add“ oder „subtract“ enthält. Das Codebeispiel lautet wie folgt:

$ pytest -k "add or subtract"
test_example.py::test_add PASSED [ 50 %]
test_example.py::test_subtract PASSED [100 %]

============================ 2 in 0,03 s vergangen ================= ============
 

 

    15.-x: Stoppen Sie die Testausführung, wenn ein Testfall fehlschlägt.

Diese Option kann durch Ausführen des Befehls pytest -x verwendet werden. Sie stoppt die Testausführung, wenn der erste Testfall fehlschlägt. Das Codebeispiel lautet wie folgt:

$ pytest -x
test_example.py::test_add PASSED [ 50 %]
test_example.py::test_subtract FAILED [100 %]

================================= FEHLER ============== =====================
________________________________ test_subtract ________________________________

    def test_subtract():
        Assert Subtract(4, 3) == 1
> Assert Subtract(2, 3) == -1
E Assert 2 == -1
E + wobei 2 = Subtract(2, 3)

test_example.py:10: AssertionError

========================== 1 fehlgeschlagen, 1 bestanden in 0,04 s ================ ==========
 

  

    16.--lf: Führen Sie nur die Testfälle erneut aus, die beim letzten Test fehlgeschlagen sind.

Diese Option kann durch Ausführen des Befehls pytest --lf verwendet werden. Wenn im letzten Testfall ein Fehler auftritt, wird der fehlgeschlagene Testfall automatisch erneut ausgeführt. Das Codebeispiel lautet wie folgt:

$ pytest --lf
test_example.py::test_add PASSED [ 50 %]
test_example.py::test_subtract FAILED [100 %]

================================= FEHLER ============== =====================
______________________ test_subtract[2-3] ______________________

x = 2
y = 3

    def test_subtract(x, y):
        bestätige subtract(x, y) == -1

tests/test_example.py:10: AssertionError
-------------------------------------------- Testaufruf erneut ausführen -------- ---------
test_example.py::test_subtract[x

    17.--ff: Führen Sie nur die Testfälle erneut aus, die beim letzten Test fehlgeschlagen sind.

Diese Option kann durch Ausführen des Befehls pytest --ff verwendet werden. Wenn im letzten Testfall ein Fehler auftritt, wird der letzte fehlgeschlagene Testfall automatisch erneut ausgeführt. Das Codebeispiel lautet wie folgt:

$ pytest --ff
test_example.py::test_add PASSED [ 50 %]
test_example.py::test_subtract FAILED [100 %]

================================= FEHLER ============== =====================
________________________________ test_subtract ________________________________

    def test_subtract():
        Assert Subtract(4, 3) == 1
> Assert Subtract(2, 3) == -1
E Assert 2 == -1
E + wobei 2 = Subtract(2, 3)

test_example.py:10: AssertionError
--------------------------------------------- Erfasste Standardausgabe ---------- ----------------------
Die Subtraktion von 2 und 3 ergibt -1

========================== 1 fehlgeschlagen, 1 bestanden in 0,04 s ================ ==========
 

    18. --failed-first: Führen Sie vor allen Testfällen den Testfall aus, der beim letzten Test fehlgeschlagen ist.

Diese Option kann durch Ausführen des Befehls pytest --failed-first verwendet werden. Es werden zuerst die Testfälle ausgeführt, die beim letzten Test fehlgeschlagen sind, und dann werden die verbleibenden Testfälle ausgeführt. Das Codebeispiel lautet wie folgt:

$ pytest --failed-first
test_example.py::test_subtract FEHLGESCHLAGEN [100 %]
test_example.py::test_add BESTANDEN

================================= FEHLER ============== =====================
________________________________ test_subtract ________________________________

    def test_subtract():
        Assert Subtract(4, 3) == 1
> Assert Subtract(2, 3) == -1
E Assert 2 == -1
E + wobei 2 = Subtract(2, 3)

test_example.py:10: AssertionError
----------------------------- Erfasste Standardausgabe ------------ -----------------
Die Subtraktion von 2 und 3 ist -1

========================== 1 fehlgeschlagen, 1 bestanden in 0,03 s ================ ==========
 

    19.-n, --numprocesses: Geben Sie die Anzahl gleichzeitiger Prozesse an.

Diese Option kann durch Ausführen des Befehls pytest -n 4 verwendet werden, um Testfälle vier gleichzeitig auszuführenden Prozessen zuzuweisen. Das Codebeispiel lautet wie folgt:

$ pytest -n 4
test_example.py::test_add PASSED [ 25 %]
test_example.py::test_add PASSED [ 50 %]
test_example.py::test_subtract PASSED [ 75 %]
test_example.py::test_subtract PASSED [100 %]

============================ 4 in 0,02 s vergangen ================= ============
 

 

    20. -d, --dist: Verteiltes Testen aktivieren.

Diese Option kann durch Ausführen des Befehls pytest --dist=loadfile verwendet werden, indem mehrere Python-Prozesse geladen und der Testlauf auf alle Prozesse verteilt wird. Das Codebeispiel lautet wie folgt:

$ pytest --dist=loadfile
test_example.py::test_add PASSED [ 25 %]
test_example.py::test_add PASSED [ 50 %]
test_example.py::test_subtract PASSED [ 75 %]
test_example.py::test_subtract PASSED [100 % ]

============================ 4 in 0,02 s vergangen ================= ============
 

 

    21.--durations=n: Sortieren Sie die Testfälle nach Laufzeit und zeigen Sie die Laufzeit der langsamsten n Testfälle an.

Diese Option kann durch Ausführen des Befehls pytest --duration=2 verwendet werden, um die Laufzeit der beiden langsamsten Testfälle anzuzeigen. Das Codebeispiel lautet wie folgt:

$ pytest --duration=2
test_example.py::test_add BESTANDEN [50 %]
test_example.py::test_subtract BESTANDEN [100 %]

======================== langsamste 2 Testdauern ====================== ===
0,01 s Aufruf test_example.py::test_subtract
0,01 s Aufruf test_example.py::test_add
============================ 2 in 0,02 s vergangen ============================
 

 

    22. --show-capture: Zeigt den Standardausgabestream des Testfalls und die Standardfehlerausgabe in den Ergebnissen an.

Diese Option kann durch Ausführen des Befehls pytest --show-capture verwendet werden, um den Standardausgabestream und die Standardfehlerausgabe des Testfalls in den Testergebnissen anzuzeigen. Das Codebeispiel lautet wie folgt:

$ pytest --show-capture
test_example.py::test_add BESTANDEN [50 %]
test_example.py::test_subtract BESTANDEN [100 %]

================================= Erfasste Standardausgabe ============== ====================
Die Subtraktion von 4 und 3 ist 1,
die Subtraktion von 2 und 3 ist -1

============================ 2 in 0,03 s vergangen ================= ============
 

 Das Obige ist eine detaillierte Einführung in die Befehlszeilenoptionen von Pytest und die entsprechenden Codebeispiele, in der Hoffnung, Ihnen dabei zu helfen, Pytest besser zum Testen zu verwenden.

Supongo que te gusta

Origin blog.csdn.net/weixin_40025666/article/details/131257249
Recomendado
Clasificación