[PYTHON] So führen Sie einige Tests nicht standardmäßig mit der Pytest-Marke aus

Status

Problem

Lösungen

Verwenden Sie pytest.mark, um Tests zu markieren (markieren), die Sie normalerweise nicht ausführen. Stellen Sie in pytest.ini ein, dass der markierte Test nicht ausgeführt wird.

some_test.py:

import pytest

def test_something():
    ...

def test_another():
    ...

@pytest.mark.performance
def test_performance():
    ...

pytest.ini:

[pytest]
...
addopts = -m "not performance"

Wenn dies ausgeführt wird, werden standardmäßig keine Tests ausgeführt, die als Leistung gekennzeichnet sind.

> pipenv run pytest -v
========================================= test session starts =========================================
(Unterlassung)
collected 3 items / 1 deselected / 2 selected

test/some_test.py::test_something PASSED 
test/some_test.py::test_another PASSED

Verwenden Sie das Argument -m in der Befehlszeile, um den markierten Test (nur) auszuführen.

> pipenv run pytest -v -m performance
========================================= test session starts =========================================
(Unterlassung)
collected 3 items / 2 deselected / 1 selected

test/some_test.py::test_perfomance PASSED

Ergänzung

Beachten Sie, dass selbst wenn Sie einzelne Testdateien oder Methoden direkt über die Befehlszeile angeben (Knoten-ID-Angabe), diese ignoriert werden, sofern nicht die Option -m hinzugefügt wird.

Sie können in @ pytest.mark einen beliebigen Namen angeben. Wenn Sie hier also einen Tippfehler machen, wird der Test niemals ausgeführt. Schreiben Sie als vorbeugende Maßnahme Markierungen in pytest.ini und geben Sie --strict in addopts an.

pytest.ini:

[pytest]
...
addopts = -m "not performance" --strict
markers =
    performance: performance tests

Wenn Sie es falsch markieren, wird zur Laufzeit ein Fehler angezeigt.

> pipenv run pytest -v
========================================= test session starts =========================================
(Unterlassung)
collected 0 items / 1 error

=============================================== ERRORS ================================================
_________________________________ ERROR collecting test/some_test.py __________________________________
'peformance' not found in `markers` configuration option
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
========================================== 1 error in 0.12s ===========================================

Wenn Sie verschiedene Markierungen verwenden möchten, kann es zweckmäßig sein, einen Alias in der Befehlszeile (Shell) festzulegen. Ergänzung funktioniert auch.

% alias
ppytest='pipenv run pytest'
ppytestperf='pipenv run pytest -m performance'
ppyteste2e='pipenv run pytest -m e2e'

Referenz

Marking test functions with attributes - pytest documentation

Configuration - pytest documentation

Test Driven Python (Amazon)

Recommended Posts

So führen Sie einige Tests nicht standardmäßig mit der Pytest-Marke aus
So führen Sie Tests zusammen mit Python unittest aus
So laden Sie keine Bilder, wenn Sie PhantomJS mit Selen verwenden
So führen Sie Notepad ++ Python aus
So installieren Sie Python mit Anaconda
[EC2] So führen Sie einen Selen-Webdriver aus
Wie man Matplotlib auf Heroku ausführt
So führen Sie TensorFlow 1.0-Code in 2.0 aus
[Rails] Erkennen radikaler Bilder durch Analysieren von Bildern mithilfe der Cloud Vision API