unittest tutorial setup fail cov conftest python pytest

python - tutorial - pytest vs unittest



Prueba de ejecuciĆ³n de caso orden en pytest (6)

Estoy usando pytest. Tengo dos archivos en un directorio. En uno de los archivos hay un caso de prueba de larga ejecución que genera algunos resultados. En el otro archivo hay un caso de prueba que lee esa salida. ¿Cómo puedo garantizar el correcto orden de ejecución de los dos casos de prueba? ¿Hay alguna otra alternativa que no sea colocar los casos de prueba en el mismo archivo en el orden correcto?


En general, puede configurar el comportamiento de básicamente cualquier parte de pytest usando sus enlaces bien especificados .

En su caso, usted desea el gancho "pytest_collection_modifyitems", que le permite reordenar las pruebas recopiladas en su lugar.

Dicho esto, parece que ordenar tus pruebas debería ser más fácil, ¡después de todo, esto es Python! Así que escribí un plugin para ordenar pruebas: "pytest-ordering". Echa un vistazo a los docs o instalarlo desde pypi . En este momento, recomiendo usar @ pytest.mark.first y @ pytest.mark.second, o uno de los marcadores @ pytest.mark.order #, pero tengo algunas ideas sobre las API más útiles. Sugerencias bienvenidas :)


Parece que Pytest ejecuta pruebas en orden alfabético. Así que puedes intentarlo de esta manera:

def test_a_first_test(): pass def test_b_second_test(): pass def test_o_middle_test(): pass


Prueba esto:

@pytest.fixture(xxx) def test_A(): pass yield pass @pytest.mark.usefixtures(''test_A'') def test_B(): pass


Tal vez pueda considerar el uso del complemento pytest de dependency , donde puede configurar las dependencias de prueba fácilmente:

@pytest.mark.dependency() def test_long(): pass @pytest.mark.dependency(depends=[''test_long'']) def test_short(): pass

De esta manera, test_short solo se ejecutará si test_long es exitoso y también forzará la secuencia de ejecución .


También hay un plugin pytest-ordering que parece cumplir con sus requisitos.


main.py:

import functools import pytest from demo import test_foo,test_hi def check_depends(depends): try: for dep in depends: dep() except Exception as e: return dep else: return True def pytest_depend(depends): def pytest_depend_decorator(func): stat = check_depends(depends) if stat is True: return func else: return pytest.mark.skip(True, reason="%s[skip] --> %s[Failed]" % (func.__name__, stat.__name__))(func) return pytest_depend_decorator @pytest_depend([test_foo,test_hi]) def test_bar(): pass @pytest_depend([test_foo,test_hi]) def test_bar2(): pass

demo.py:

def test_hi(): pass def test_foo(): assert False

plataforma Linux - Python 3.5.2, pytest-3.8.2, py-1.6.0, pluggy-0.7.1 - / usr / bin / python3

pytest -vrsx ./plugin.py