了解pytest插件机制、定制思路及hook常用插件清单
一、了解hook清单方式、查看、翻译的方式有哪些:
接着上回说的pytest的hook清单是什么?怎么去查看hook清单呢?如何使用hook清单呢?下面小编就为大家来解析下。
hook清单又叫钩子函数,在pytest_的函数当中都是空的,是为了提供了名字、参数、返回值来为插件使用,其实也是hook支持的插件机制,查看hook清单的方法有俩种:
方法一:查看源码 在hookspec.py中可以查看到所有的约定。如图:
方法二:查看pytest官方文档:https://docs.pytest.org/en/7.3.x/reference/referece.html#hooks
文档从介绍pytest-收集测试用例-执行测试用例-断言-报告-调试阶段,来具体分析。
二、查找到的hook清单源码如何翻译及获取?
源码翻译和上述介绍的方法是对应的,第一种方法介绍的是再软件上查看hook清单可以选择钩子后右键add....输入“翻译下方内容”即可。第二种方法是浏览文档后在文档中进行翻译,右键选中进行翻译即可,直接看到中文内容扫清了学习障碍。看到的hook都是pytest本身,在安装第三方插件后,如果插件提供新的hook内部是无法看到的 需要通过源码的方式去动态获取,看到的hook清单都是pytest 插件的hook并没有体现需要动态获取。
三、如何使用hook有哪些规则?
1: 被动的调用:
比如说在项目中创建conftest.py文件实现hook函数编写,编写测试用例,定义函数并没有执行函数所以print无法打印输出结果是空。可以直接使用pytest会发现函数被调用,是由pytest在执行过程中调用函数才能输出,这就是被动的调用不需要做什么,只需要知道hook名字创建同名函数等待被调用即可。
代码如下图所示:
2:掌握主动
很多插件可以改变pytest原有的运行过程和运行结果,所以是掌握主动,完全改变运行的流程顺序和结果,比如创建hook后不想按照原有方式执行可以在前面加一个装饰器,@pytest为什么加装饰器呢?实际上按照我们插件的机制规则和系统规则每一个hook都要加一个装饰器,如果用简单的用法可以不加装饰器,高级用法加装饰器,在装饰器中加上参数trelast=true 。如图所示:
如果去掉装饰器就会被调用,说明作为一个钩子来讲能不能被调用自己可以说的算,除了自己可以不被调用之外,还可以修改tryfrist后加一个return “泽宇李真帅”发现框架不被执行。如图所示:
Pytest要不要执行怎么执行执行结果是什么由我自己代码说的算,就是说做什么返回什么,可以说对一些结果的串改,结果的串改是比较粗放的,修改效果也是一点不够高雅或细致,可以做一些酷炫效果,比如:
新建一个测试用例 test_api,Def test_apiO: Assert 1==0断言,输入pytest后再文件中找到并执行测试用例,结果是断言失败是因为1不等于0?测试开发的能力是可以深度的控制和改变我们框架的执行过程,上方的用例如何从测试失败变成测试通过再不改变代码的情况下,通过hook方式进行修改,修改是非常的细致化,相对比被动调用是简单的,
3:完全控制的方式及步骤:
首先创建个函数 如图:
1:添加装饰器 @pytest.hookmpl(hookwrapper=true)以一个包装器的方式来运行
2:def 函数: print(“用例开始执行”)——前置
3:yield关键字 outcome=yield 因为是生成器 将结果保存再outcome
4:print(‘用例执行结束’)——后置 用例执行之后
5:修改俄式用例 print(“修改测试用例为测试结果为:通过”)
6:outcome.force_result(1)即可将失败换位passed
结果就是,断言1==0 改成了测试通过,根本不关心1还是0 ,根本就是我们改变了框架运行逻辑。
四、断言失败和成果的标准:
测试通过的1或0都可以 为什么写任何数字都可以,0和1都代码通过呢?什么代表失败呢?从通过改失败是怎么改的呢?标准是怎么定呢?Pytest中,什么是测试通过的标准,什么是测试失败的标准?怎么判定呢?
测试失败的标准有三种:
断言异常就会判定为测试失败
Setup异常:判断测试出错
没有异常:判断测试通过
如何把测试通过的用例修改为测试失败呢?比如说,Assert 1==1 断言测试,如果没有钩子(函数)的话测试是通过的,用钩子来修改为失败这里需要添加断言。比如 assert_false 引发断言异常 被判定为失败,这就是框架里面东西 使用框架的都要掌握 测开和自动化测试都需要掌握。
- 点赞
- 收藏
- 关注作者
评论(0)