Pytest知识整合小记(三、参数化测试)

一、参数化语法

之前在介绍Unittest的时候,讲过Unittest用的ddt库进行参数化运行,现pytest不需要额外的库,用装饰器即可。

@pytest.mark.parametrize("CarNumber,Type", [

                    pytest.param(BlackCarNumber,1,id='blacklist'),#黑名单

                    pytest.param(GreyCarNumber,2,id='greylist'),#灰名单

                    pytest.param(WhiteCarNumber,3,id='whitelist'),#白名单

                        ]

                        )

其中CarNumber,Type为对应变量,下面是对应的参数值,id为每个用例的标识,该用例共计执行三次。

二、参数组合

@pytest.mark.parametrize("a", [0, 1])

@pytest.mark.parametrize("b", [2, 3])

def test_1(a, b):

print("测试数据组合:a->%s, b->%s" % (a, b))

三、给类加上参数化装饰器

在类上加对应参数化装饰器后,整个类的方法都会被该数据集传递。

四、标记单例后进行参数化

@pytest.mark.parametrize("test_input,expected", [

                    ("3+5", 8),

                    ("2+4", 6),

                    pytest.param("6 * 9", 42, marks=pytest.mark.xfail),

                    ])

def test_eval(test_input, expected):

print("-------开始用例------")

assert eval(test_input) == expected

最后填坑批注:

1.在参数化的时候,整个用例都会提前先运行参数化对应的值,进行测试准备,所以在进行测试结果传递的用例的时候,在参数可能有变化的用例的时候,容易取值出错,经过总结出以下办法:

2.写中间缓存,把上一个用例的测试结果缓存起来(mysql、或者excel、json等),在下一个用例执行的时候去获取缓存数据。

3.定义全局变量(不建议)

4.函数之间的参数传递,方法继承等。

5.用内置cache.

posted @ 2025-05-14 15:22  寻虫测试  阅读(21)  评论(0)    收藏  举报