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
的值为class
,autouse
的值为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
,如果这个方法很长或者你不想调用的时候叫这个名字,就可以用name
给fixture
修饰的方法改名字
注意:当你给fixture装饰的方法(exe_sql())传了name
参数改名字以后,用例调用的时候都要用你改过以后的名字(db),用原来的方法名(exe_sql)是会报错的,因为找不到了。
下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!
最后: 可以在公众号:程序员小濠 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!喜欢软件测试的小伙伴们,可以加入我们的测试技术交流扣扣群:779450660里面有各种软件测试资源和技术讨论)