python - ¿Cómo y dónde py.test encuentra los accesorios?
fixtures (2)
Aquí está el orden y donde py.test busca accesorios (y pruebas) (tomado de here ):
py.test carga módulos de complementos al inicio de la herramienta de la siguiente manera:
cargando todos los complementos incorporados
cargando todos los complementos registrados a través de setuptools puntos de entrada.
al escanear previamente la línea de comandos para la opción
-p name
y cargar el complemento especificado antes del análisis de la línea de comandos real.cargando todos los archivos
conftest.py
como se infiere por la invocación de la línea de comandos (archivos de prueba y todos sus directorios principales). Tenga en cuenta que los archivosconftest.py
de los subdirectorios no se cargan por defecto al inicio de la herramienta.cargando recursivamente todos los complementos especificados por la variable
conftest.py
en los archivosconftest.py
¿Dónde y cómo busca py.test los accesorios? Tengo el mismo código en 2 archivos en la misma carpeta. Cuando elimino conftest.py, no se puede encontrar cmdopt ejecutando test_conf.py (también en la misma carpeta. ¿Por qué no se busca en sonoftest.py?
# content of test_sample.py
def test_answer(cmdopt):
if cmdopt == "type1":
print ("first")
elif cmdopt == "type2":
print ("second")
assert 0 # to see what was printed
contenido de conftest.py
import pytest
def pytest_addoption(parser):
parser.addoption("--cmdopt", action="store", default="type1",
help="my option: type1 or type2")
@pytest.fixture
def cmdopt(request):
return request.config.getoption("--cmdopt")
contenido de sonoftest.py
import pytest
def pytest_addoption(parser):
parser.addoption("--cmdopt", action="store", default="type1",
help="my option: type1 or type2")
@pytest.fixture
def cmdopt(request):
return request.config.getoption("--cmdopt")
Los docs dicen
http://pytest.org/latest/fixture.html#fixture-function
- pytest encuentra el test_ehlo debido al prefijo test_ehlo. La función de prueba necesita un argumento de función llamado smtp. Una función de accesorio coincidente se descubre al buscar una función marcada como accesorio smtp.
- smtp () se llama para crear una instancia.
- Se llama a test_ehlo () y falla en la última línea de la función de prueba.
py.test importará conftest.py
y todos los archivos de Python que coincidan con el patrón python_files
, de forma predeterminada, la test_*.py
. Si tiene un dispositivo de prueba, debe incluirlo o importarlo desde conftest.py
o desde los archivos de prueba que dependen de él:
from sonoftest import pytest_addoption, cmdopt