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