108 votes

Comment contrôler l'ordre d'exécution des cas de test dans pytest ?

J'ai deux fichiers dans un répertoire. Dans l'un des fichiers, il y a un cas de test de longue durée qui génère une certaine sortie. Dans l'autre fichier, il y a un cas de test qui lit cette sortie.

Comment puis-je garantir l'ordre d'exécution correct des deux cas de test? Y a-t-il une autre alternative que de mettre les cas de test dans le même fichier dans le bon ordre?

-2voto

Ravichandran K Points 324

Utilisez l'option '--randomly-dont-reorganize' ou '-p no:randomly' disponible dans le plugin pytest-randomly, cela exécutera simplement vos tests dans le même ordre que celui que vous avez mentionné dans votre module.

Module:

import pytest

def test_three():
    assert True

def test_four():
    assert True

def test_two():
    assert True

def test_one():
    assert True

Execution:

(tmp.w95BqE188N) rkalaiselvan@dev-rkalaiselvan:~/$ py.test --randomly-dont-reorganize test_dumm.py
======================================================================== test session starts ========================================================================
platform linux2 -- Python 2.7.12, pytest-3.10.1, py-1.5.4, pluggy-0.7.1 -- /tmp/tmp.w95BqE188N/bin/python2
cachedir: .pytest_cache
Using --randomly-seed=1566829391
rootdir: /home/rkalaiselvan, inifile: pytest.ini
plugins: randomly-1.2.3, timeout-1.3.1, cov-2.6.0, mock-1.10.0, ordering-0.6
collected 4 items

test_dumm.py::test_three PASSED
test_dumm.py::test_four PASSED
test_dumm.py::test_two PASSED
test_dumm.py::test_one PASSED

(tmp.w95BqE188N) rkalaiselvan@dev-rkalaiselvan:~/$ py.test -p no:randomly test_dumm.py
======================================================================== test session starts ========================================================================
platform linux2 -- Python 2.7.12, pytest-3.10.1, py-1.5.4, pluggy-0.7.1 -- /tmp/tmp.w95BqE188N/bin/python2
cachedir: .pytest_cache
Using --randomly-seed=1566829391
rootdir: /home/rkalaiselvan, inifile: pytest.ini
plugins: randomly-1.2.3, timeout-1.3.1, cov-2.6.0, mock-1.10.0, ordering-0.6
collected 4 items

test_dumm.py::test_three PASSED
test_dumm.py::test_four PASSED
test_dumm.py::test_two PASSED
test_dumm.py::test_one PASSED

-2voto

Gnought Points 177

@la réponse du nageur est prête. Voici le code final.

Assurez-vous que les éléments de test s'exécutent en premier

# conftest.py
def pytest_collection_modifyitems(items):
    """les éléments de test passent en premier"""
    run_first = ["tests.test_b", "tests.test_c", "tests.test_a"]
    modules = {item: item.module.__name__ for item in items}
    items[:] = sorted(
        items, key=lambda x: run_first.index(modules[x]) if modules[x] in run_first else len(items)
    )

Assurez-vous que l'élément de test s'exécute en dernier

# conftest.py
def pytest_collection_modifyitems(items):
    """les éléments de test passent en dernier"""
    run_last = ["tests.test_b", "tests.test_c", "tests.test_a"]
    modules = {item: item.module.__name__ for item in items}
    items[:] = sorted(
        items, key=lambda x: run_last.index(modules[x]) if modules[x] in run_last else -1
)

-9voto

Amol Kumar Points 107

Assurez-vous d'avoir installé le package pytest-ordering. Pour confirmer, allez dans les paramètres de PyCharm >> Interpréteur de projets >> et recherchez pytest-ordering : S'il n'est pas disponible, installez-le. Paramètres de PyCharm >> Interpréteur de projets >> Cliquez sur le bouton + et recherchez pytest-ordering pour l'installer. Voilà !! Cela fonctionnera certainement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X