pytest--fixture参数化的实现方式和执行顺序

之前看到fixture函数可以通过添加,params参数来实现参数化,后续看到了悠悠 的博客,可以通过@pytest.mark.parametrize来实现,现在做一个总结

实现方式一

通过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'])

结果

1342163-20190317102545341-538449013.png
输出的结果是这样的
大家都知道,使用fixture函数有两种方法

第一种是:直接将fixture函数的名字当做参数传入

另一种是:使用装饰器@pytest.mark.usefixtures("fixture函数名") 由于这种不能同过parametrize来传参,这里不做赘述

实现方法二

通过@pytest.mark.parametrize来实现(只能实现第一种使用fixture的方法)

@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的函数中查找

结果

1342163-20190317105249473-1723847561.png
结果是这样子的,从图中我们可以就看到,fixture中的params参数在这个test_fixture_param_and_parametrize函数中被覆盖了,而且不影响它在别的函数中的使用

刚刚,还想到了装饰器执行顺序的问题,不顾好像对于参数化测试没多大影响,反正执行结果都是 ?*?的都执行到了
可能,在功能开发过程中,需要用到这个顺序

执行顺序

fixture的执行顺序

上图就好了
1342163-20190317111213835-954930928.png
调整一下上下和左右顺序
1342163-20190317111327637-810550908.png
以上是执行结果

可以看出越接近函数名的装饰器或者参数,越早执行,好了,姑且这样子,反正我懂了

parametrize执行顺序

上图就好了
1342163-20190317202909404-75746270.png

上图可以看出,越远的装饰器,越早遍历完*,可以看做下图

1342163-20190317205132727-448115861.png

加上参数化fixture也是一样
1342163-20190317205258173-169967599.png

转载于:https://www.cnblogs.com/wsy1103/p/10545737.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值