python fixtures py.test

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:

  1. cargando todos los complementos incorporados

  2. cargando todos los complementos registrados a través de setuptools puntos de entrada.

  3. 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.

  4. 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 archivos conftest.py de los subdirectorios no se cargan por defecto al inicio de la herramienta.

  5. cargando recursivamente todos los complementos especificados por la variable conftest.py en los archivos conftest.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

  1. 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.
  2. smtp () se llama para crear una instancia.
  3. 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