【Pytest】accesorio

uso

Similar al uso de configuración y desmontaje, puede usar cualquier nombre y usarlo de manera más flexible.

La operación antes del rendimiento es equivalente a la instalación, y la operación antes del rendimiento es equivalente al desmontaje.

@pytest.fixture
def fixture_name():
    setup操作 
    yield 返回值
    teardown操作

alcance

Use el alcance para controlar el alcance del accesorio, el valor predeterminado es el nivel de función.

función nivel de función o nivel de método
clase nivel de clase
módulo nivel de módulo
paquete nivel de paquete
sesión nivel de sesión

@pytest.fixture(scope="class")
def a():
    print("start")
    yield
    print("end")

class TestA:
    def test_a(self, a):
        assert True

Tres métodos de llamada

1. Pase directamente el nombre de la función de dispositivo en la función o el método.

@pytest.fixture()
def a():
    print("start")
    yield
    print("end")

class TestA:
    def test_a(self, a):
        assert True

2. Use el decorador @pytest.mark.usefixtures()

@pytest.fixture()
def a():
    print("start")
    yield
    print("end")

@pytest.mark.usefixtures("a")
class TestA:
    def test_a(self):
        assert True

3. Use múltiples métodos de fijación

Si un método o función quiere llamar a varios dispositivos al mismo tiempo, puede usar @pytest.mark.usefixture() para superponer. Preste atención al orden de apilamiento, coloque los que se ejecutan primero en la capa inferior y los que se ejecutan después en la capa superior.

@pytest.fixture()
def login():
    print("完成登录操作")
    token = "123456789"
    username = "zhangsan"
    yield token, username  #yield用法相当于return
    print("完成登出操作")

@pytest.fixture()
def a():
    print("start")
    yield
    print("end")

@pytest.mark.usefixtures("login")
@pytest.mark.usefixtures("a") #优先执行
class TestA:
    def test_a(self):
        assert True

4. La diferencia entre pasar directamente a la función y usar el decorador @pytest.mark.usefixtures().

Cuando hay un valor devuelto después del rendimiento, el valor devuelto no se puede obtener usando @pytest.mark.usefixtures(). Debe pasarse directamente a la función.

@pytest.fixture(scope="function")
def login():
    print("完成登录操作")
    token = "123456789"
    username = "zhangsan"
    yield token, username  #yield用法相当于return
    print("完成登出操作")

def test_a(login):
    token, username = login
    print(token, username)

5. También puede usar el uso automático automáticamente. El valor predeterminado es Falso. Cuando se cambia a Verdadero, todas las funciones y métodos de prueba usarán automáticamente esta función de dispositivo sin llamarla.

@pytest.fixture(scope="class", autouse=True)
def a():
    print("start")
    yield
    print("end")

class TestA:
    def test_a(self):
        assert True

uso de concurso

Escriba métodos en la configuración de conftest.py para lograr el intercambio de datos, no se requiere importar y se puede compartir entre archivos. 

Coloque el método de fijación definido en conftest.py y colóquelo en el directorio público. El código de prueba puede llamar directamente al método de fijación en conftest.p sin ponerlo en el mismo archivo de prueba. En la colaboración de varias personas, es posible implementar un método compartido.

Supongo que te gusta

Origin blog.csdn.net/Yocczy/article/details/129289810
Recomendado
Clasificación