pytest入门 -6 fixture参数说明

2022-02-23 16:45:06 浏览数 (1)

fixture实现前后置

参数

scope --作用域

function:函数/方法之前和之后执行

手动调用方式是在测试用例的参数里加入fixture的名称

class:类之前和之后执行

手动调用的方式是在类上面加上@pytest.mark.usefixtures("方法名")装饰器

package/session:整个项目会话之前和之后执行。

当session只作用于一个.py文件时相当于module

一般会结合conftest.py文件来实现

autouse --自动执行

默认:False;如果改为True,则不需要调用,在对应的作用域会自动执行

params --实现参数化(数据驱动)

ids --参数,必须和params一起使用,给参数起别名

name --给fixture起别名

yield可以将数据返回,类似return,但是return后面就不能再接代码了,而yield后面是可以继续写其他代码的。所以在“后置”操作时,我们都习惯用yield

scope的值为classautouse的值为False时,如何调用fixture

@pytest.mark.usefixtures("方法名")

params 用于实现参数化

比如一个用例需要分别用3个不同数据(等价类和边界值)进行测试,如果一个用例代码写三遍有点笨了,这个时候用params这个参数就可以

说明:

1、params=read_yaml() --params=方法名(),调用 2、exe_sql(request) 注意,括号里是request 规定就是这么写,没有为什么 3、request.param 调用通过read_yaml()方法拿到的数据,就要求这么写,上面参数是params,这里是param,就要求这么写 4、exe_sql这里我本来是打印print(request.param)看了一下,然后才yield的。为了说明问题,就是实现参数化(数据驱动),直接强调一下通过yield方法是可以把取到的值作为参数传给其他方法的

5、test_api()方法引用fixture,要在方法中传fixture修饰过的方法名

执行结果:

可以看到,用例二分别用测试数据执行了三次。

ids不能单独使用,必须和params一起使用,作用是给参数起别名

看上面那个执行结果

如果你的数据太长,那这里显示会很乱,这时候就能用到ids这个参数了

执行结果:

name作用是给fixture起别名

上面我们用fixture装饰的方法叫exe_sql,如果这个方法很长或者你不想调用的时候叫这个名字,就可以用namefixture修饰的方法改名字

注意:当你给fixture装饰的方法(exe_sql())传了name参数改名字以后,用例调用的时候都要用你改过以后的名字(db),用原来的方法名(exe_sql)是会报错的,因为找不到了。

0 人点赞