Comment ne pas exécuter certains tests par défaut en utilisant la marque de pytest

Statut

problème

--Si vous n'ajoutez pas d'argument à pytest, tous les tests seront exécutés. ――Lorsque vous sélectionnez et exécutez un test de charge, etc., je suis content s'il s'agit d'un simple argument.

Solution

Utilisez pytest.mark pour marquer (marquer) les tests que vous n'exécutez pas normalement. Dans pytest.ini, définissez pour ne pas exécuter le test marqué.

some_test.py:

import pytest

def test_something():
    ...

def test_another():
    ...

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

pytest.ini:

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

Lorsqu'il est exécuté avec cela, il n'exécute pas par défaut les tests de performance marqués.

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

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

Pour exécuter le test marqué (uniquement), utilisez l'argument -m sur la ligne de commande.

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

test/some_test.py::test_perfomance PASSED

Supplément

Notez que même lorsque vous spécifiez des fichiers de test individuels ou des méthodes directement à partir de la ligne de commande (spécification de l'ID de nœud), ils seront ignorés sauf si l'option -m est ajoutée.

Vous pouvez spécifier n'importe quel nom dans @ pytest.mark, donc si vous faites une faute de frappe ici, le test ne sera jamais exécuté. Par mesure préventive, écrivez des marqueurs dans pytest.ini et spécifiez --strict dans addopts.

pytest.ini:

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

Si vous ne le marquez pas correctement, vous obtiendrez une erreur au moment de l'exécution.

> pipenv run pytest -v
========================================= test session starts =========================================
(Omission)
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 ===========================================

Si vous souhaitez utiliser des marques différentes, il peut être pratique de définir un alias sur la ligne de commande (shell). La complémentation fonctionne également.

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

référence

Marking test functions with attributes - pytest documentation

Configuration - pytest documentation

Test Driven Python (Amazon)

Recommended Posts

Comment ne pas exécuter certains tests par défaut en utilisant la marque de pytest
Comment exécuter des tests avec Python unittest
Comment ne pas charger d'images lors de l'utilisation de PhantomJS avec Selenium
Comment exécuter Notepad ++ Python
Comment installer Python à l'aide d'Anaconda
[EC2] Comment exécuter le pilote Web sélénium
Comment exécuter matplotlib sur heroku
Comment exécuter du code TensorFlow 1.0 en 2.0
[Rails] Comment détecter des images radicales en analysant des images à l'aide de l'API Cloud Vision