琐碎笔记——pytest实现前置、后置、参数化、跳过用例执行以及重试

pytest的fixture中文介绍可参考(不过文档稍微有点老):
https://www.osgeo.cn/pytest/fixture.html#what-fixtures-are

pytest各个作用域的fixture

  • scope = “function”
    可作用于每个用例
    fixture使用的声明放在类定义前面,类中的每个用例执行时都会调用fixture装饰函数
    fixture使用的声明放在用例前,用例执行时会调用fixture装饰函数
  • scope = “class”
    作用于整个类
    fixture使用的声明放在类定义前面,类中的第一个用例执行时会调用fixture装饰函数一次
    fixture使用的声明放在类中的用例前,用例执行时会调用fixture装饰函数一次,之后的用例即时有@pytest.mark.usefixtures(“fixture_class”),也不会执行
  • scope = “module”
    作用于整个python文件
    在整个python文件中只会调用一次,
    不管@pytest.mark.usefixtures(“fixture_module”)声明放在哪里(类外的用例前、类的声明前或这个类中的用例前),fixture函数都只会在整个python文件执行第一个用例时调用一次
  • scope = “session”
    作用于整个会话,通常可以放在conftest.py文件中,作为全局使用的前、后置步骤
    在所有地方都可以使用@pytest.mark.usefixtures(“fixture_session”)

例:

import pytest

@pytest.fixture(scope="function")
def fixture_function():
    print("fixture_function ####")

@pytest.fixture(scope="class")
def fixture_class():
    print("fixture_class ----")

@pytest.fixture(scope="module")
def fixture_module():
print("fixture_module @@@@")

def test_0():
    print('test_0')

@pytest.mark.usefixtures("fixture_class")
@pytest.mark.usefixtures("fixture_function")
class Test_class():
    @pytest.mark.usefixtures("fixture_module")
    def test_1(self):
        print('test_1')

    def test_2(self):
        print('test_2')

    def test_3(self):
        print('test_3')

    def test_4(self):
        print('test_4')

打印内容如下:

============================== 4 passed in 0.23s ==============================
fixture_module @@@@
fixture_class ----
fixture_function ####
PASSED                                   [ 25%]test_1
fixture_function ####
PASSED                                   [ 50%]test_2
fixture_function ####
PASSED                                   [ 75%]test_3
fixture_function ####
PASSED                                   [100%]test_4

Process finished with exit code 0

1.2.pytest添加fixture装饰实现前置、后置方法

可以通过fixture夹具实现前置后置方法,后置需要使用yeild来实现。
如果一个方法或者一个类想要同时调用多个fixture。有两种方法:

  1. 可以使用@pytest.mark.usefixtures()进行叠加。
    注意叠加顺序,先执行的后添加@pytest.mark.usefixtures语句,后执行的先添加。
    需注意:与直接传入fixture不同的是,@pytest.mark.usefixtures无法获取到被fixture装饰的函数的返回值;
    @pytest.mark.usefixtures的使用场景是:被测试函数需要多个fixture做前后置工作时使用;
  2. 可以在方法中添加多个fixture函数名作为入参,执行顺序:先入参的后调用。

具体如下:

import pytest

class Test_hhh:
    @pytest.fixture
    def setup_step1(self):
       print("setup_step1 @@@@")

    @pytest.fixture
    def setup_and_teardown_step2(self)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值