Aparatos de pytest en un directorio separado.

Estoy buscando crear una estructura pytest donde pueda separar completamente los dispositivos de las pruebas. El motivo de esta separación es que quiero incluir el directorio de accesorios como un elemento externo en Subversion y compartirlo entre varios proyectos.

árbol de estructura deseada

project | conftest.py | +---fixtures | __init__.py | conftest.py | fixture_cifs.py | fixture_ftp.py | fixture_service.py | \---tests | test_sometest1.py | test_sometest2.py | \---configurations sometest1.conf sometest2.conf 

Quiero implementar la funcionalidad para cada accesorio en un archivo separado para evitar un solo conftest.py enorme. conftest.py solo incluiría envoltorios para devolver una instancia de cada elemento anotado con @pytest.fixture . No hay ningún problema al usar un dispositivo junto con una prueba cuando los conftest.py , fixture_*.py y test_*.py están todos en el mismo directorio.

Sin embargo, cuando los dispositivos se separan en un subdirectorio, aparece un error del fixture 'cifs' not found , available fixtures: ... No he encontrado ninguna documentación que explique cómo colocar aparatos fuera de la test_*.py conftest.py o el conftest.py adyacente a la test_*.py , pero nada que indique que esto tampoco debería funcionar.

¿Cómo puedo colocar los aparatos en su propio subdirectorio cuando uso pytest?

Lea aquí cómo estructurar su prueba.

su directorio de aparatos no parece estar en el paquete (el proyecto no tiene __init__.py por lo que no se puede importar como project.fixtures como fixtures ya que no está en la ruta. Puede agregar los directorios necesarios en la ruta en sus tests/conftest.py ( sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir, "fixtures")) o sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir) dependiendo de cómo desea importar sus módulos.

¿Intentaste import tus accesorios en project/conftest.py ? ¿Es eso lo que quieres decir con “envoltorios para devolver una instancia” ?

Por favor agregue en su conftest.py

  import pytest pytest_plugins = [ "fixtures.conftest", "fixtures.fixture_cifs", "fixtures.fixture_ftp", "fixtures.fixture_service" ] 

Después de que todos los accesorios adicionales declarados serán fundados por pytest

Como nota, los directorios respectivos a los que se hace referencia en fixtures.conftest" necesitan tener archivos __init__.py para que los complementos sean cargados por pytest

Lea sobre el caso similar aquí: https://stackoverflow.com/a/54736237/6655459