Pytest verfügt über die Skip- und Skipif-Dekoratoren, ähnlich dem Python-Unittest-Modul (das skip
und verwendet skipIf
), das in der Dokumentation hier zu finden ist .
Beispiele aus dem Link finden Sie hier:
@pytest.mark.skip(reason="no way of currently testing this")
def test_the_unknown():
...
import sys
@pytest.mark.skipif(sys.version_info < (3,3),
reason="requires python3.3")
def test_function():
...
Im ersten Beispiel wird der Test immer übersprungen, im zweiten Beispiel können Sie Tests unter bestimmten Bedingungen überspringen (ideal, wenn die Tests von der Plattform, der ausführbaren Version oder den optionalen Bibliotheken abhängen.
Zum Beispiel, wenn ich überprüfen möchte, ob jemand die Bibliothekspandas für einen Test installiert hat.
import sys
try:
import pandas as pd
except ImportError:
pass
@pytest.mark.skipif('pandas' not in sys.modules,
reason="requires the Pandas library")
def test_pandas_function():
...
.skip
, das Mocha (Node.js) hat?it('tests something'...)
->it.skip('tests something'...)
was diesen bestimmten Test deaktivieren würde. Es hat auch das praktische Gegenteil: Es.only
wird nur diesen Test ausführen und sonst nichts.only
Teil können Sie dies über die Befehlszeile oder was auch immer Sie verwenden, um den Testläufer zu initialisieren: stackoverflow.com/a/36539692/4131059 Was dasit
und betrifftit.skip
, glaube ich, dass die Funktionalität hier dies vollständig abdeckt.Der
skip
Dekorateur würde den Job machen:@pytest.mark.skip(reason="no way of currently testing this") def test_func_one(): # ...
(
reason
Argument ist optional, aber es ist immer eine gute Idee anzugeben, warum ein Test übersprungen wird).Es gibt auch
skipif()
die Möglichkeit, einen Test zu deaktivieren, wenn eine bestimmte Bedingung erfüllt ist.Diese Dekoratoren können auf Methoden, Funktionen oder Klassen angewendet werden.
Um alle Tests in einem Modul zu überspringen , definieren Sie eine globale
pytestmark
Variable:# test_module.py pytestmark = pytest.mark.skipif(...)
quelle
Ich bin nicht sicher, ob es veraltet ist, aber Sie können die
pytest.skip
Funktion auch innerhalb eines Tests verwenden:def test_valid_counting_number(): number = random.randint(1,5) if number == 5: pytest.skip('Five is right out') assert number <= 3
quelle
Möglicherweise möchten Sie den Test auch ausführen, wenn Sie den Verdacht haben, dass der Test fehlschlägt. Für ein solches Szenario empfiehlt https://docs.pytest.org/en/latest/skipping.html die Verwendung von decorator @ pytest.mark.xfail
@pytest.mark.xfail def test_function(): ...
In diesem Fall führt Pytest Ihren Test weiterhin aus und teilt Ihnen mit, ob er erfolgreich ist oder nicht, beschwert sich jedoch nicht und bricht den Build nicht.
quelle
Wenn Sie den Test überspringen möchten, aber keinen Marker fest codieren möchten, verwenden Sie besser den Schlüsselwortausdruck, um ihn zu umgehen.
pytest test/test_script.py -k 'not test_func_one'
quelle
Sie können einen Test mit dem
skip
und denskipif
Dekorateuren markieren, wenn Sie einen Test überspringen möchtenpytest
.Test überspringen
@pytest.mark.skip(reason="no way of currently testing this") def test_func_one(): ...
Der einfachste Weg, einen Test zu überspringen, besteht darin, ihn mit dem
skip
Dekorateur zu markieren, der optional bestanden werden kannreason
.Es ist auch möglich, während der Testausführung oder -einrichtung durch Aufrufen der
pytest.skip(reason)
Funktion unbedingt zu überspringen . Dies ist nützlich, wenn es nicht möglich ist, die Sprungbedingung während der Importzeit auszuwerten.def test_func_one(): if not valid_config(): pytest.skip("unsupported configuration")
Überspringen eines Tests basierend auf einer Bedingung
@pytest.mark.skipif(sys.version_info < (3, 6), reason="requires python3.6 or higher") def test_func_one(): ...
Wenn Sie basierend auf einer Bedingung überspringen möchten, können Sie
skipif
stattdessen verwenden. Im vorherigen Beispiel wird die Testfunktion übersprungen, wenn sie auf einem Interpreter vor Python3.6 ausgeführt wird.Wenn Sie einen Test überspringen möchten, weil Sie sicher sind, dass er fehlschlägt, können Sie auch die
xfail
Markierung verwenden, um anzuzeigen, dass ein Test fehlschlagen soll.quelle