pytest高阶用法二

本文介绍了pytest的使用方法,包括参数化parametrize函数,说明了常用参数argnames和argvalues的含义及格式,指出参数值个数决定测试方法运行次数,还提到可从参数文件取值入参。此外,还介绍了跳过测试函数和标记为预期失败函数的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、参数化parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)
常用参数:
argnames:参数名
argvalues:参数对应值,类型必须为list
当参数为一个时格式:[value]
当参数个数大于一个时,格式为:[(param_value1,param_value2…),(param_value1,param_value2…)]
使用方法:
@pytest.mark.parametrize(argnames,argvalues)
⚠️ 参数值为N个,测试方法就会运行N次

单个参数示例:
    import pytest
    class Test_ABC:
        def setup_class(self):
            print("------->setup_class")
        def teardown_class(self):
            print("------->teardown_class")

        @pytest.mark.parametrize("a",[3,6]) # a参数被赋予两个值,函数会运行两遍
        def test_a(self,a): # 参数必须和parametrize里面的参数一致
            print("test data:a=%d"%a)
            assert a%3 == 0
执行结果:
    test_abc.py 
    ------->setup_class
    test data:a=3 # 运行第一次取值a=3
    .
    test data:a=6 # 运行第二次取值a=6
    . 
    ------->teardown_class

多个参数示例:
    import pytest
    class Test_ABC:
        def setup_class(self):
            print("------->setup_class")
        def teardown_class(self):
            print("------->teardown_class")

        @pytest.mark.parametrize("a,b",[(1,2),(0,3)]) # 参数a,b均被赋予两个值,函数会运行两遍
        def test_a(self,a,b): # 参数必须和parametrize里面的参数一致
            print("test data:a=%d,b=%d"%(a,b))
            assert a+b == 3
执行结果:
    test_abc.py 
    ------->setup_class
    test data:a=1,b=2 # 运行第一次取值 a=1,b=2
    .
    test data:a=0,b=3 # 运行第二次取值 a=0,b=3
    .
    ------->teardown_class

函数返回值类型示例:
    import pytest
    def return_test_data():
        return [(1,2),(0,3)]
    class Test_ABC:
        def setup_class(self):
            print("------->setup_class")
        def teardown_class(self):
            print("------->teardown_class")

        @pytest.mark.parametrize("a,b",return_test_data()) # 使用函数返回值的形式传入参数值
        def test_a(self,a,b):
            print("test data:a=%d,b=%d"%(a,b))
            assert a+b == 3
执行结果:
    test_abc.py 
    ------->setup_class
    test data:a=1,b=2 # 运行第一次取值 a=1,b=2
    .
    test data:a=0,b=3 # 运行第二次取值 a=0,b=3
    .
    ------->teardown_class

使用在参数文件中取值入参:

data.txt:
	data1=('123','456')
	data2=('789','000')
	
test_04.py:
def data_lines():
    list_data = []
    with open("data.txt", "r") as f:
        for i in f.readlines():
            print(i)
            list_data.append(eval(i.split("=")[-1]))
    return list_data
class Test_04:
    @pytest.mark.parametrize("a, b", data_lines())
    def test_01(self, a, b):
        print("a=", a)
        print("b=", b)

执行结果:
a=123
b=456
a=789
b=000
2、跳过测试函数 根据特定的条件,不执行标识的测试函数.

方法:
    skipif(condition, reason=None)
参数:
    condition:跳过的条件,必传参数
    reason:标注原因,必传参数
使用方法:
    @pytest.mark.skipif(condition, reason="xxx")

示例:
    import pytest
    class Test_ABC:
        def setup_class(self):
            print("------->setup_class")
        def teardown_class(self):
            print("------->teardown_class")
        def test_a(self):
            print("------->test_a")
            assert 1
        @pytest.mark.skipif(condition=2>1,reason = "跳过该函数") # 跳过测试函数test_b
        def test_b(self):
            print("------->test_b")
            assert 0
执行结果:
    test_abc.py 
    ------->setup_class
    ------->test_a #只执行了函数test_a
    .
    ------->teardown_class
    s # 跳过函数

3、标记为预期失败函数
标记测试函数为失败函数

方法:
    xfail(condition=None, reason=None, raises=None, run=True, strict=False)
常用参数:
    condition:预期失败的条件,必传参数
    reason:失败的原因,必传参数
使用方法:
    @pytest.mark.xfail(condition, reason="xx")

示例:
    import pytest
    class Test_ABC:
        def setup_class(self):
            print("------->setup_class")
        def teardown_class(self):
            print("------->teardown_class")
        def test_a(self):
            print("------->test_a")
            assert 1
        @pytest.mark.xfail(2 > 1, reason="标注为预期失败") # 标记为预期失败函数test_b
        def test_b(self):
            print("------->test_b")
            assert 0
执行结果:
    test_abc.py 
    ------->setup_class
    ------->test_a
    .
    ------->test_b
    ------->teardown_class
    x  # 失败标记
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值