这四种作用范围,让pytest测试框架的fixture功能更加灵活

发表于:2020-3-24 10:10

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:美股研究社    来源:钛媒体

  ixture有一个scope的可选参数,用于控制fixture执行配置和销毁逻辑的频率,有四个待选值,function、class、module、session,默认值是function。
  参数待选值介绍
  function
  函数级别的fixture每个测试函数只执行一次,配置代码在测试用例运行之前执行,销毁代码在测试用例运行之后执行,function是scope的默认值
  class
  类级别的fixture每个测试类只需要执行一次,无论测试类里有多少类方法都可以共享这个fixture
  module
  模块级别的fixture每个模块只需要一次,无论模块里有多少个测试甘薯、类方法或者其他fixture都可以共享这个fixture
  session
  会话级别的fixture每次会话只需要运行一次,一次pytest会话中所有测试函数、方法都可以共享这个fixture
  pytest --setup-show test_fixture_scope.py 运行测试用例,指定--setup-show参数,让控制台显示每个fixture被调用的测试,以及在各自作用范围下执行配置、销毁逻辑的顺序。
 
  上图不仅出现了代表函数级别和会话级别的F和S,还出现了代表类级别和模块级别的C和M。作用范围虽然是由fixture自身定义的,但是scope在定义fixture时就已经定义了,不是在调用的时候定义,也就是说一个模块级别的fixture,只在这个模块运行一次。即使这个模块里多个参数函数都调用了这个fixture,但是也只会执行一次。
  fixture只能使用同级别的fixture,或比自己级别更高的fixture,不能使用比自己级别低的fixture。比如类级别的fixture可以使用和自己同级别的类fixture,和模块、会话级别的fixture,但是不能使用函数级别的fixture。
  scope实战
  自实际测试用例运行中,我们可能在多个case或者多个模块中都需要建立数据库的链接,如果每次需要都去建立还是挺浪费资源的,其实我们在整个测试会话过程中只需建立一次链接,在会话结束时关闭链接即可。
  
  使用usefixtures指定fixture
  之前提高的指定fixture的方式都是通过在测试函数的参数列表里指定fixture,还可以用pytest的标记功能,@pytest.mark.usefixtures('fixture1', 'fixture2')标记测试函数或者类,可以指定一个或多个fixture。
  
  fixture的autouse参数
  autouse=True可以使的作用域内的测试函数都运行改fixture,可以实现那些需要运行多次、但是又不依赖任何系统状态或外部数据的初始化功能。
  

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号