Alcance del accesorio en pytest

1. Definición

Hay un alcance de parámetro en el accesorio de pytest, y su alcance tiene cinco, a saber: función, clase, módulo y sesión

función: se llama antes de que comience cada método, nivel de método

clase: se llamará una vez antes de que comience cada clase, nivel de clase

módulo: llamado una vez antes de que comience cada módulo (archivo py), nivel de módulo

sesión: se llamará una sesión (varios módulos) una vez antes de comenzar, nivel de paquete

二. alcance = "función"

Defina un test_function_scope.py, escriba el siguiente código y ejecútelo:

import pytest 

@ pytest.fixture (scope = " function " )
 def function_scope ():
     print ( " 每个 方法 开始 之前 运行 一次" ) 
    msg = " 测试 function_scope " 
    return msg 


def test_function_scope_1 (function_scope):
     afirmar function_scope == " 测试function_scope " 


def test_function_scope_2 (function_scope):
     afirmar function_scope == " 测试 function_scope "



result ============================= inicia sesión de prueba ================== =========== plataforma win32 -Python 3.7.3, pytest-5.1.2, py-1.8.0, pluggy-0.12.0- D: \ program \ Python37 \ python.exe cachedir : .pytest_cache rootdir: E: \ virtual_workshop \ pytest - demo \ test_demo recolectando ... recolectó 2 elementos test_function_scope.py::test_function_scope_1 se ejecuta una vez antes de que comience cada método [ 50% ] test_function_scope.py::test_function_scope_2 cada método comienza Antes de ejecutar APROBADO [ 100% ] ============================== 2 aprobado en 0.03s ======= =======================

三. alcance = "clase"

Defina un test_class_scope.py, escriba el siguiente código y ejecútelo:

import pytest 

@ pytest.fixture (scope = " class " )
 def class_scope ():
     print ( " 每个 类 开始 之前 运行 一次" ) 
    msg = " 测试 class_scope " 
    return msg 


class TestClassScope1 ():
     def test_class_scope_1 (self, class_scope) :
         afirmar class_scope == " 测试 class_scope " 


clase TestClassScope2 ():
     def test_class_scope_2 (self, class_scope):
         afirmar class_scope == "class_scope prueba " 


# Resultados de la operación 
============================= sesión de pruebas se inicia ============ ================= 
plataforma win32 -Python 3.7.3, pytest-5.1.2, py-1.8.0, pluggy-0.12.0- D: \ program \ Python37 \ python.exe 
cachedir: .pytest_cache 
rootdir: E: \ virtual_workshop \ pytest - demo \ test_demo 
recolectando ... recolectó 2 elementos 

test_class_scope.py::TestClassScope1::test_class_scope_1 Ejecuta PASSED 
[ 50% ] 
test_class_scope antes de cada clase .py :: TestClassScope2 :: test_class_scope_2 Ejecutar PASSED una vez antes de cada clase 
[ 100% ]

 ============================== 2 pasaronen 0.03s ==============================

四. alcance = "módulo"

Defina un test_module_scope.py, escriba el siguiente código y ejecútelo:

import pytest 

@ pytest.fixture (scope = " module " )
 def module_scope ():
     print ( " 每个 模块 开始 之前 运行 一次" ) 
    msg = " 测试 module_scope " 
    return msg 


class TestClassScope1 ():
     def test_module_scope_1 (self, module_scope) :
         afirman module_scope == " 测试module_scope " 


clase TestClassScope2 ():
     def test_module_scope_2 (auto, module_scope):
         afirman module_scope ==" module_scope prueba " 



# operación resultados 
============================= sesión de prueba se inicia =========== ================== 
plataforma win32 -Python 3.7.3, pytest-5.1.2, py-1.8.0, pluggy-0.12.0- D: \ program \ Python37 \ python.exe 
cachedir: .pytest_cache 
rootdir: E: \ virtual_workshop \ pytest - demo \ test_demo2 
recolectando ... recopilados 2 elementos 

test_module_scope.py::TestClassScope1::test_module_scope_1 Ejecuta 
PASSED una vez antes de que comience cada módulo [ 50% ] 
de test_module_scope.py::TestClassScope2::test_module_scope_2 pasado [ 100% ]

 ============================== 2 pasado en 0.03s ==============================

五. alcance = "sesión"

Defina un conftest.py bajo el paquete test_demo3, el código es el siguiente:

import pytest 

@ pytest.fixture (scope = " session " )
 def session_scope ():
     print ( " Llamar una vez antes del inicio de una sesión (módulos múltiples) " ) 
    msg = " Llamar una vez antes del inicio de una sesión (módulos múltiples) " 
    volver mensaje

Luego defina dos módulos, uno es test_session_scope1.py y otro es test_session_scope2.py

# test_session_scope1.py 
def test_session_scope1 (session_scope):
     afirmar session_scope == " 测试 session_scope " 


# test_session_scope2.py 
def test_session_scope2 (session_scope):
     afirmar session_scope == " 测试 session_scope " 


# 运行 结果 
=========== ================== la sesión de prueba comienza ============================= 
plataforma win32 - Python 3.7.3, pytest-5.1.2, py-1.8.0, pluggy-0.12.0 - D: \ program \ Python37 \ python.exe 
cachedir: .pytest_cache 
rootdir: E: \ virtual_workshop \ pytest -  demo \ test_demo3
coleccionando ... coleccionado 2 elementos 

test_session_scope1.py::test_session_scope1 ejecutado PASSED una vez antes de una sesión (módulos múltiples) 
[ 50% ] 
test_session_scope2.py::test_session_scope2 PASSED [ 100% ]

 ========== ==================== 2 aprobado en 0.03s ========================= =====

6. El orden de instanciación

sesión> módulo> clase> función. Un buen ejemplo es de este blog :

import pytest 

order = [] 

@ pytest.fixture (scope = " session " )
 def s1 (): 
    order.append ( " s1 " ) 


@ pytest.fixture (scope = " module " )
 def m1 (): 
    order.append ( " m1 " ) 


@ pytest.fixture 
def f1 (f3, a1):
     # 先 实例 化 f3, 再 实例 化 a1, 最后 实例 化 f1 
    order.append ( " f1 " )
     afirmar f3 == 123 


@ pytest.fixture
def f3 (): 
    order.append ( " f3 " ) 
    a = 123
     produce a 


@ pytest.fixture 
def a1 (): 
    order.append ( " a1 " ) 


@ pytest.fixture 
def f2 (): 
    order.append ( " f2 " ) 


DEF test_order (f1, M1, F2, S1):
     # M1, S1 después de f1, pero debido a la amplia gama de alcance, será preferentemente instanciado 
    Assert Orden == [ " S1 " " M1 " " F3 " , "a1 " , " f1 " , " f2 " ]

 

Supongo que te gusta

Origin www.cnblogs.com/my_captain/p/12714119.html
Recomendado
Clasificación