Existe-t-il un moyen de dire à pytest (de préférence dans conftest.py) que tous les tests sous ce répertoire doivent être ignorés si une certaine condition est satisfaite? Par exemple, si une dépendance facultative est manquante, un répertoire de test doit être ignoré.

0
xuhdev 27 févr. 2021 à 01:15

1 réponse

Meilleure réponse

Vous pourriez probablement utiliser le pytest_ignore_collect accrocher. Par exemple, disons que vous avez le répertoire ci-dessous.

stackoverflow/
├── mypackage
│   ├── __init__.py
│   └── models.py
├── pytest.ini
└── tests
    ├── __init__.py
    ├── conftest.py
    └── foo
        ├── __init__.py
        └── test_models.py

test_models contient deux tests. Lorsque je l'exécute tel quel à partir de la racine du référentiel, j'obtiens ce qui suit.

============================================= test session starts =============================================
platform darwin -- Python 3.9.1, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
rootdir: ***/stackoverflow, configfile: pytest.ini
collected 2 items                                                                                             

tests/foo/test_models.py ..                                                                             [100%]

============================================== 2 passed in 0.02s ==============================================

Lorsque nous plaçons ce qui suit dans notre conftest.py, aucun test ne se termine.

from pathlib import Path

TO_IGNORE = "tests/foo"

def pytest_ignore_collect(path, config):
    # suppose our condition is some command line argument is passed in
    val = config.getvalue("-k")
    if val == "":
        here = Path.cwd().absolute()
        skip_fd = here / TO_IGNORE
        if skip_fd == path:
            return True

============================================= test session starts =============================================
platform darwin -- Python 3.9.1, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
rootdir: ***/stackoverflow, configfile: pytest.ini
collected 0 items                                                                                             

============================================ no tests ran in 0.01s ============================================

Vous pouvez le rendre aussi précis que vous le souhaitez avec le chemin du fichier en fonction de la structure de votre référentiel. N'oubliez pas que Path.cwd() est l'endroit d'où vous exécutez pytest.

1
gold_cy 27 févr. 2021 à 00:52