以前看到fixture函数能够经过添加,params参数来实现参数化,后续看到了悠悠 的博客,能够经过**@pytest.mark.parametrize**来实现,如今作一个总结 ##实现方式一html
经过params函数实现fixture的参数化函数
import pytest @pytest.fixture(params=[1,2,3]) def fixture_param(request): request.param print("\033[31;1m我是fixture_param,这是第%s次打印\033[0m"%request.param) return request.param def test_fixture_param(fixture_param): print("我是test_fixture_param函数") # print("我fixture_param如今是:%s"%fixture_param) if __name__ == '__main__': pytest.main(["-s",'test_fixture_params.py'])
###结果 输出的结果是这样的 你们都知道,使用fixture函数有两种方法测试
第一种是:直接将fixture函数的名字当作参数传入url
另外一种是:使用装饰器@pytest.mark.usefixtures("fixture函数名") 因为这种不能同过parametrize来传参,这里不作赘述.net
##实现方法二3d
@pytest.fixture(params=[1,2,3]) def fixture_param(request): request.param print("\033[31;1m我是fixture_param,这是第%s次打印\033[0m"%request.param) return request.param @pytest.mark.parametrize("fixture_param",["a","b"],indirect=True) @pytest.mark.parametrize("a,b",[(1,6),(2,7),(3,8),(4,9)]) def test_fixture_param_and_parametrize(a,b,fixture_param): print("我是测试函数test_fixture_param_and_parametrize,参数a是%s,b是%s"%(a,b)) # print("我fixture_param如今是:%s"%fixture_param) if __name__ == '__main__': pytest.main(["-s",'test_fixture_params.py'])
注意:这个参数indirect=True,必定不能少,要不就会直接把 fixture_param当成测试函数的一个参数来用,加上indirect=True这个参数,才会在fixture的函数中查找htm
###结果 结果是这样子的,从图中咱们能够就看到,fixture中的params参数在这个test_fixture_param_and_parametrize函数中被覆盖了,并且不影响它在别的函数中的使用blog
刚刚,还想到了装饰器执行顺序的问题,不顾好像对于参数化测试没多大影响,反正执行结果都是 ?*?的都执行到了 可能,在功能开发过程当中,须要用到这个顺序开发
##执行顺序 ###fixture的执行顺序 上图就行了 调整一下上下和左右顺序
以上是执行结果
能够看出越接近函数名的装饰器或者参数,越早执行,好了,姑且这样子,反正我懂了
###parametrize执行顺序 上图就行了
上图能够看出,越远的装饰器,越早遍历完*,能够看作下图
加上参数化fixture也是同样