了解pytest插件机制、定制思路及hook常用插件清单-2

一、了解hook清单方式、查看、翻译的方式有哪些:

接着上回说的pytest的hook清单是什么?怎么去查看hook清单呢?如何使用hook清单呢?下面小编就为大家来解析下。

hook清单又叫钩子函数,在pytest_的函数当中都是空的,是为了提供了名字、参数、返回值来为插件使用,其实也是hook支持的插件机制,查看hook清单的方法有俩种:

方法一:查看源码  在hookspec.py中可以查看到所有的约定。如图:

       image.png

方法二:查看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名字创建同名函数等待被调用即可。

      代码如下图所示:

     image.png

     image.png 

2:掌握主动

     很多插件可以改变pytest原有的运行过程和运行结果,所以是掌握主动,完全改变运行的流程顺序和结果,比如创建hook后不想按照原有方式执行可以在前面加一个装饰器,@pytest为什么加装饰器呢?实际上按照我们插件的机制规则和系统规则每一个hook都要加一个装饰器,如果用简单的用法可以不加装饰器,高级用法加装饰器,在装饰器中加上参数trelast=true 。如图所示:

     image.png

     如果去掉装饰器就会被调用,说明作为一个钩子来讲能不能被调用自己可以说的算,除了自己可以不被调用之外,还可以修改tryfrist后加一个return “泽宇李真帅”发现框架不被执行。如图所示:

     image.png

    Pytest要不要执行怎么执行执行结果是什么由我自己代码说的算,就是说做什么返回什么,可以说对一些结果的串改,结果的串改是比较粗放的,修改效果也是一点不够高雅或细致,可以做一些酷炫效果,比如:

    新建一个测试用例 test_api,Def  test_apiO: Assert 1==0断言,输入pytest后再文件中找到并执行测试用例,结果是断言失败是因为1不等于0?测试开发的能力是可以深度的控制和改变我们框架的执行过程,上方的用例如何从测试失败变成测试通过再不改变代码的情况下,通过hook方式进行修改,修改是非常的细致化,相对比被动调用是简单的,

   image.png

3:完全控制的方式及步骤:

 首先创建个函数  如图:

     1:添加装饰器 @pytest.hookmpl(hookwrapper=true)以一个包装器的方式来运行

     2:def 函数: print(“用例开始执行”)——前置

     3:yield关键字  outcome=yield 因为是生成器 将结果保存再outcome

     4:print(‘用例执行结束’)——后置 用例执行之后

     5:修改俄式用例 print(“修改测试用例为测试结果为:通过”)

     6:outcome.force_result(1)即可将失败换位passed

 image.png

结果就是,断言1==0 改成了测试通过,根本不关心1还是0 ,根本就是我们改变了框架运行逻辑。

四、断言失败和成果的标准:

测试通过的1或0都可以 为什么写任何数字都可以,0和1都代码通过呢?什么代表失败呢?从通过改失败是怎么改的呢?标准是怎么定呢?Pytest中,什么是测试通过的标准,什么是测试失败的标准?怎么判定呢?

测试失败的标准有三种:

  断言异常就会判定为测试失败

  Setup异常:判断测试出错

  没有异常:判断测试通过

如何把测试通过的用例修改为测试失败呢?比如说,Assert 1==1 断言测试,如果没有钩子(函数)的话测试是通过的,用钩子来修改为失败这里需要添加断言。比如 assert_false 引发断言异常 被判定为失败,这就是框架里面东西 使用框架的都要掌握 测开和自动化测试都需要掌握。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值