1, pytest fixtures
tiene como objetivo proporcionar una base estacionaria, de modo que la prueba puede ser de forma fiable, realizado repetidamente sobre esta base; Comparativo xUnit
clásico setup/teardown
forma, es una notable mejora en los siguientes aspectos:
fixture
Tenemos un nombre claro , declarando que puede en función, clase, módulo, o incluso ser activado durante toda la prueba utilizada en la sesión;fixture
En una manera modular . Debido a que cadafixture
nombre puede desencadenar una función de fijación , y esta función puede a su vez otra llamadafixture
;fixture
Gestión expande desde simples a complejos prueba de la unidad de pruebas funcionales , y el conjunto de opciones de configuración permite paramétricosfixture
casos de prueba, o en todas las funciones, clases, módulos, o incluso la totalidad de reutilización sesión de pruebasfixture
;
2, utilizando
(1) el uso como un parámetro
proceso de implementación
pytest
caso de prueba reunidostest_ehlo
, que tiene un parámetrosmtp_connection
,pytest
encontrar un nombre ya registradofixture
;- Realizado
smtp_connection()
para crear unasmtp_connection
instancia<smtplib.SMTP object at 0x00000244923A5F60>
comotest_ehlo
argumento; - 执行 test_ehlo (<objeto smtplib.SMTP en 0x00000244923A5F60>).
También puede utilizar la invocación de línea de comandos: --fixtures PYtest [testpath]
2, accesorio: la inyección real es un típico
fixture
Permitir que la prueba puede recibir y procesar una necesidades objeto de aplicación particulares para pre-inicialización operación, sin preocuparse demasiado fácilmente / Configuración / limpieza de importación detalle, es una práctica típica de la inyección de dependencia, en donde la fixture
inyección del actor ( injector
) de el papel desempeñado por los consumidores y de prueba ( client
papel);
3, conftest.py: Distribución de ejemplos de aparatos
Si desea compartir con uno de una pluralidad de módulos de prueba fixture
ejemplo, puede usar esa fixture
para pasar al conftest.py
archivo. Introducción no requiere módulo de prueba manual en ella, pytest
encontrará automáticamente fixture
la búsqueda secuencial es: categoría de prueba, el módulo de prueba, conftest.py
y finalmente el tercero plug-ins y está construido ;
También puede utilizar conftest.py
el archivo de esta característica para cada directorio de lograr un enchufe localizada ;
4, el intercambio de datos de prueba
Si desea probar múltiples cuota de prueba el mismo archivo de datos, hay dos buena manera de lograr esto:
- Para cargar los datos en
fixture
la prueba de ellos para su reutilizaciónfixture
; - Estos archivos de datos en
tests
carpetas, algunos plug-ins de terceros para gestionar prueba de 5 en esta zona, el ámbito de aplicación: los casos de uso en todas las clases, módulos y toda sesión de pruebas, compartió ejemplos de aparatos
En @pytest.fixture
adición decorador scope='module'
parámetro, cada módulo de prueba se llama sólo una vez smtp_connection
(el valor predeterminado se llama una vez para cada caso de uso), todos los casos de prueba de tales módulos comparten la misma fixture
instancia, en el que scope
son posibles los valores de los parámetros: function
(Predeterminado class
valor), module
,, package
ysession;
ejemplo
Nota: pytest
Cada vez que un caché única fixture
instancia cuando se utiliza con parámetros fixture
de tiempo, pytest
se puede llamar varias veces en el alcance de esta declaración fixture
;
5, el orden accesorio instanciado
Múltiples fixture
instancias de la secuencia, los siguientes principios:
- De alto nivel alcance (ejemplo:
session
) antes de alcance de bajo nivel (ejemplo:class
ofunction
) instanciar; - ámbito de nivel Same, ejemplos de los cuales sigue el orden en el que la secuencia se declara en la prueba (es decir, del parámetro de orden) , o
fixture
llamar a la relación entre; - Permitiendo
autouse
unfixture
primer nivel con su otrofixture
instancias;
Otro Nota:
-
Además de
autouse
lafixture
declaración requerida muestra de ensayo (parámetros), que no se crea una instancia no declarado; -
Una pluralidad del mismo alcance
autouse fixture
, ejemplos de los cuales sigue el ordenfixture
del nombre de función de clasificación;
6, operaciones accesorio de limpieza
retorno proxy (1) Rendimiento
La fixture
función de return
sustitución de palabras clave para yield
, el yield
siguiente código es hacer la operación de limpieza;
(2) el uso con
(3) Método utilizando addfinalizer
fixture
Una función capaz de recibir un request
parámetro que representa un contexto de la petición de prueba ; se puede utilizar request.addfinalizer
un método de fixture
adición de función de limpieza;
Nota: yield
Antes o addfinalizer
la generación de código de salida de error antes de la inscripción, ya no se llevará a cabo las operaciones de limpieza posteriores.