Pitón de aprendizaje -pytest (tres) Fixture

A, ventajas del accesorio
1, en relación con el accesorio de montaje y desmontaje, debe tener las siguientes ventajas:
nombrar configuración flexible y desmontaje no se limita a estos nombrado
configuración conftest.py donde se puede compartir los datos, no es necesario ser capaz de importación encontrará automáticamente algunas configuraciones
scope = "módulo" puede ser implementado a través de archivos múltiples compartir frontal .py
scope = "sesión" con el fin de lograr una pluralidad de archivo .py transversal a cabo usando una sesión con una pluralidad de Ejemplo
2, usando la función de etiquetas de aparatos decorativos
accesorio (scope = "función", params = Ninguno, autouse = False, ids = Ninguno, nombre = None)

Se puede utilizar esta decorador (con o sin parámetro) definido en el accesorio a la función. Nombre del accesorio funciones se pueden utilizar más tarde, citando lo llama antes de ejecutar las pruebas:

pytest.mark.usefixtures módulo de prueba o clase se puede utilizar (fixturename) marcado
prueba nombre de función accesorio se puede utilizar directamente como un parámetro de entrada, en este caso, los ejemplos del dispositivo de plantilla serán devueltas desde la función de inyectar
dos, parámetros de fixtures introducido
accesorio (alcance = "función", params = Ninguno, autouse = False, ids = Ninguno, nombre = None)

1 Alcance

Hay cuatro niveles de parámetro parámetro alcance: "función" (por defecto), "clase", "módulo", "sesión"

2, params

Una lista de parámetros opcionales, que dará lugar a más argumentos llamar a prueba funcional de dispositivo y utilice todo

3, autouse

Si es verdad, todas las pruebas se activó func accesorio puede verlo

Si es falso (por defecto), la referencia explícita a la necesidad de activar el dispositivo

4, ids

lista de ID para cada cadena, cada cadena correspondiente a la params, ID de modo que son parte de la prueba, y si no proporcionan un ID generan automáticamente a partir params

5, el nombre

El nombre del dispositivo, que por defecto es el nombre de función decorativa. Si se define en el accesorio utilizando el mismo módulo, se exige el nombre de la función de sujeción función de enmascaramiento plantilla arg; Una manera de abordar este problema es una función decorativa llamado "fixture_ <fixturename>", luego "@ pytest.fixture (nombre = '<fixturename>') "

Nota: los accesorios pueden optar por utilizar la declaración de rendimiento para probar una función de proporcionar a sus valores, en lugar de regresar. En este caso, como el bloque de código después de la declaración de rendimiento individual ejecución de código, independientemente de los resultados de las pruebas. función accesorio debe producir sólo una vez

Tres, parámetros accesorios pasaron (scope = "función")
1, escenarios de aplicación: Ejemplo 1 con la necesidad de iniciar la sesión, el Ejemplo 2 no necesita conectarse, tendrá que firmar con el Ejemplo 3

# ! = Codificación UTF-8 
Importación PYtest 
 
# defecto cuando no hay parámetros = alcance "función" 
@ pytest.fixture ()
 DEF el login ():
     Imprimir ( " introduzca la contraseña de la cuenta de inicio de sesión " ) 
 
DEF test_s1 (la sesión):
     Imprimir ( ' Caso de uso 1: otra acción 111 después de la tala ' ) 
 
DEF test_s2 ():   # no pasan de sesión 
    de impresión ( " Caso de uso 2: sin entrada, operación 222 ' ) 
 
DEF test_s3 (Entrar):
     Imprimir ( ' con el Ejemplo 3: otra operación después de inicio de sesión 333 ' ) 
 
SI  __name__ == "__main__ " : 
    pytest.main ( ' -s test_class004.py ' )

El resultado:

 

 

 

2, si @ pytest.fixture () no hay ningún argumento, a continuación, el ámbito predeterminado = "función", que es, en este momento el nivel de función, la función para la eficaz

3, después de la adición de casos de prueba que inician sesión parámetros, entonces la función de inicio de sesión primero ejecutar en el accesorio decorativo antes de ejecutar un caso de uso

Cuatro, pasando de parámetros accesorio (scope = "módulo")
1, el parámetro accesorio scope = "módulo", el papel del módulo es para tener efecto en todo el archivo .py, cuando se llama al caso de uso, escribir el nombre de la función de parámetros en la línea de

# ! = Codificación UTF-8 
Importación PYtest 
 
@ pytest.fixture (margen = " módulo " )
 DEF Open ():
     Imprimir ( " abrir el navegador y abrir la página principal de Baidu " ) 
 
DEF test_s1 (abierto):
     Imprimir ( " ejecución Ejemplo 1 " ) 
 
DEF test_s2 (Open):
     Imprimir ( " ejecución Ejemplo 2 " ) 
 
DEF test_s3 (Open):
     Imprimir ( " . ejecución Ejemplo 3 " ) 
 
IF  la __name__ == " __main__ ": 
    Pytest.main ( ' test_class005.py -s ' )

El resultado:

 

 

 

Visto desde los resultados, aunque test_s1, test_s2, función abierta test_s3 tres llamadas locales, pero sólo antes de la ejecución de un caso de uso en una

2, si test_s1 no llaman, test_s2 llamar a la función abierta, test_s3 no llama a la secuencia de ejecución ¿Qué ocurre?

# Encoding = UTF-8! 
Importación PYtest 
 
@ pytest.fixture (margen = " módulo " )
 DEF Open ():
     Imprimir ( " abrir el navegador y abrir la página principal de Baidu " ) 
 
DEF test_s1 ():
     Imprimir ( " ejecución Ejemplo 1 " ) 
 
DEF test_s2 (Open):
     Imprimir ( " realizado con el Ejemplo 2 " ) 
 
DEF : test_s3 ()
     Imprimir ( "ejecución Ejemplo 3 " ) 
 
IF  la __name__ == " __main__ ": 
    Pytest.main ( ' test_class005.py -s ' )

El resultado:

 

 

 

Visto de resultados, accesorio módulo de nivel en el módulo .py actual, la única vez antes de la primera llamada al caso de uso 

Cinco, configuración conftest.py
1, el caso anterior se encuentra en el mismo archivo .py, varias llamadas a un caso de la función de inicio de sesión utilización, si hay varios archivos .py necesitan llamar a la función de inicio de sesión, a continuación, puede no inicia sesión para escribir el caso de uso en el interior, este caso debe tener un perfil, administrado por separado el número de preajuste de escenarios operativos, PYtest que lee la configuración predeterminada en el interior conftest.py

configuración conftest.py requiere atención a los siguientes puntos:

conftest.py nombre del script de configuración es fija y no puede modificar el nombre de
uso y funcionamiento conftest.py en la misma realización de un paquete, y no hay archivo init.py (siempre y cuando la operación a favor de la prueba conftest.py realización el directorio padre o un archivo con el mismo un paquete puede ser llamado así, no tienen ellos en el mismo paquete, se puede ajustar la posición de la prueba conftest.py)
no necesita conftest.py importación importación, PYtest con búsqueda automática periódica

 

 

 

conftest.py # 
 
# = codificación UTF-8! 
Importación PYtest 
 
@ pytest.fixture () 
DEF del Usuario (): 
    print ( 'introduzca la contraseña de la cuenta de inicio de sesión') 
 
@ pytest.fixture () 
DEF open_index (): 
    print ( 'abierto Inicio ')

  

# Test_fix1.py 
 
# encoding = UTF-8.! 
Importación PYtest 
 
DEF test_s1 (Entrar): 
    print ( 'utilizado en el Ejemplo 1: Después de entrar otra acción 111') 
 
DEF test_s2 (open_index): 
    print ( 'con el Ejemplo 2: Operación Open Home, operación 222 ') 
 
DEF test_s3 (Login): 
    Imprimir (' con el Ejemplo 3: otra después de la operación de registro 333 ') 
 
SI __name__ __ == "__ main__": 
    pytest.main (' - S test_fix1.py ')

 

# Test_fix2.py 
 
# encoding = UTF-8.! 
Importación PYtest 
 
DEF test_s4 (Entrar): 
    print ( 'con el Ejemplo 4: Después de entrar otra acción 111') 
 
DEF test_s5 (open_index): 
    print ( 'con el Ejemplo 5: Abrir la operación a casa, la operación 222 ') 
 
SI __name__ __ == "__ main__": 
    pytest.main (' - S test_fix2.py ')

 

test_fix1.py ejecución

 

 

test_fix2.py ejecución

 

 

2, con un test_fix2.py operación test_fix1.py separada puede llamar al método conftest.py entre el aparato decorador, de modo que podemos lograr algunas operaciones comunes pueden ser invocadas por separado

3, si el archivo .py llama llamada conftest.py se informará del error siguiente cuando menos

==================================== ERRORES ============= ======================= 
__________________________ ERROR en la configuración de test_s1 ___________________________ 
archivo /Users/luozelin/Desktop/pytest/pytest_demo/test_fix1.py, línea 4 
  def test_s1 (login): 
E accesorio 'login' no encontrado 
> accesorios disponibles: caché, capfd, capfdbinary, caplog, CAPSYS, capsysbinary, doctest_namespace, metadatos, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, TMP_PATH, tmp_path_factory, tmpdir, tmpdir_factory 
> uso '--fixtures PYtest [testpath]' para ayuda sobre ellos. 
 
/Users/luozelin/Desktop/pytest/pytest_demo/test_fix1.py:4
__________________________ ERROR en la configuración de test_s2 ___________________________ 
archivo /Users/luozelin/Desktop/pytest/pytest_demo/test_fix1.py, línea 7 
  def test_s2 (open_index): 
E accesorio 'open_index' no encontrado 
> accesorios disponibles: caché, capfd, capfdbinary, caplog, CAPSYS, capsysbinary, doctest_namespace, metadatos, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, TMP_PATH, tmp_path_factory, tmpdir, tmpdir_factory 
'--fixtures PYtest [testpath]'> utilización de auxilio en ellos. 
 
/Users/luozelin/Desktop/pytest/pytest_demo/test_fix1.py:7 
__________________________ ERROR en la configuración de test_s3 ___________________________
presentar /Users/luozelin/Desktop/pytest/pytest_demo/test_fix1.py, línea 10  
  def test_s3 (login): 
E accesorio 'login' no encontrado
> accesorios disponibles: caché, capfd, capfdbinary, caplog, CAPSYS, capsysbinary, doctest_namespace, metadatos, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, TMP_PATH, tmp_path_factory, tmpdir, tmpdir_factory 
'--fixtures PYtest [testpath]'> utilización de auxilio en ellos. 
 
/Users/luozelin/Desktop/pytest/pytest_demo/test_fix1.py:10 
=============================== 3 error en 0,03 s ===============================

  


Consulte la fuente original: https: //blog.csdn.net/BearStarX/article/details/101000516

Supongo que te gusta

Origin www.cnblogs.com/zhaocbbb/p/12543495.html
Recomendado
Clasificación