上篇文章中提到了,在pytest中的fixture可以完成unitest中setUp、tearDown。今天就来详细看一下。

一、pytest中的fixture是什么

为可靠的和可重复执行的测试提供固定的基线(可以理解为测试的固定配置,使不同范围的测试都能够获得统一的配置),fixture提供了区别于传统单元测试(setup/teardown)风格的令人惊喜的功能,而且pytest做得更炫。

二、pytest中fixture的使用

1.fixture 可以作为一个函数的参数被调用


如上图, 这里的 test_ehlo函数,需要参数值smtp_connection,pytest就是找到并且调用这个用@pytest.fixture装饰的smtp_connection函数。
换句话讲,被装饰器装饰的函数或者方法,仍然可以被调用。步骤是这样的:

  • pytest 找到test_ 开头的函数,于是找到了test_ehlo
  • test_ehlo这个测试函数,需要一个参数smtp_connection,于是函数smtp_connection被找到
  • smtp_connection被调用来创建一个实例

2.fixture可以在一个类、或者一个模块、或者整个session中被共享,加上范围即可


如上图,加入scope=“module”的参数,可以让fixture function在每次模块测试的时候只请求一次。这样不同的test function在同一个test module中接收到的 smtpfixture参数都是一样的。这里的smtp_connection,就可以在这个模块中,共享使用。类似的:
如果想在一个类中使用,那么@pytest.fixture(scope="class");
如果想在全部会话中使用,那么@pytest.fixture(scope="session")。

3.fixture也可以单独存放

有的时候为了方便配置和访问,也可以将这样的fixture放到conftest.py文件中单独存放(注意:该文件要放在case同级目录下哦)。

4.同一个模块里出现多个范围的装饰

当出现多个范围装饰的时候,优先实例化范围优先级高的。
也就是优先级从大到小:session-->module–->class–->function

5.fixture的如何实现teardown


上图代码中的 print("teardown smtp")和smtp.close(),会在module范围内的最后一个测试完成后执行,不管测试中有没有exception的状态。
如果我们在装饰器中指定scope="function",那么stmp将会在每次单个测试中建立和清除。

6.fixture中的参数 autouse

关于autouse,默认是False, 如果不加scope='session',的使用autouse,只在当前module下有效。
① 如果你想一个module下的都用上,那就打开改成True, 如下,这样就不需要往每个函数里传入fixture,例如:
看下运行结果:

② 同样的,当我加上scope="class"时,当前模块下的所有类,都会调用一次fixture。
看下运行结果:

③ 文件中同时包含了function,class,就不可以使用autouse了,否则function也会执行到
看运行结果:

④ 如何运行类的fixture
这里使用一个更加通用的方法即可,@pytest.mark.usefixtures("这里是你要用的fixture"),标记在你要使用的类。
看下运行结果:
这里要注意的是:scope=“class”,别忘记添加,否则类下的每个function都会执行。

⑤ 当scope='session'时,要注意的点!
如果你的scope='session',那么不要像function,class,module那样,和case放在一起,我们要放在另一个文件,conftest.py下,才可以。
这里是同一个项目下的,2个case文件:
还有个同项目下的 conftest.py:
运行测试case,这个2个case文件下的所有case都会被找到,但是只会执行一次conftest.py中的 fixture。

⑥ 当case里需要传入多个 fixture 或者 yield 怎么办呢? 先后执行的顺序是什么?
在后续使用的过程中,遇到了case里我想传入多个yield,于是写了demo验证了下。下面上结果,就不放截图啦(形式传参“before”表示执行在case前,“yield”表示执行在case后)

  • def test_1(before, yield)def test_1(yield,before)
    结论:不管你顺序如何,依旧会先执行case前的before,case结束后执行yield
  • def test_2(before1, before2, yield)
    结论:这样有多个before,会依次按传参顺序先后执行。
  • def test_3(before, yield1, yield2)
    结论:这样有多个yield的,会依次从后往前执行,这里先执行yield2,再执行yield1

关于pytest的fixture使用,就先写这么多吧,应该可以满足日常使用的场景了,欢迎补充。

【pytest】(六) pytest中fixture的使用相关推荐

  1. Python Pytest中fixture之yield唤醒teardown和终结函数addfinalizer

    引入 我们之前学习的都是测试用例的前置固件,也就是相当于"setup".说到这,细心的你可能想到了,那有没有什么方式可以表示出"teardown"?这就是我们今 ...

  2. pytest中fixture的使用

    前言 前面一篇讲了setup.teardown可以实现在执行用例前或结束后加入一些操作,但这种都是针对整个脚本全局生效的 如果有以下场景:用例 1 需要先登录,用例 2 不需要登录,用例 3 需要先登 ...

  3. Pytest中fixture夹具

    Unittest和Pytest前后置区别 这里抽用例前置与后置的区别来讲,先看unittest的前后置使用: import unittestclass TestFixtures01(unittest. ...

  4. Python测试框架pytest(05)fixture - error和failed、fixture实例化、多个fixture

    Python测试框架pytest系列可以查看下列 Python测试框架pytest(01)简介.安装.快速入门_编程简单学的博客-CSDN博客 Python测试框架pytest(02)PyCharm设 ...

  5. Python测试框架pytest(04)fixture - 测试用例调用fixture、fixture传递测试数据

    Python测试框架pytest系列可以查看下列 Python测试框架pytest(01)简介.安装.快速入门_编程简单学的博客-CSDN博客 Python测试框架pytest(02)PyCharm设 ...

  6. pytest进阶之xunit fixture

    前言 今天我们再说一下pytest框架和unittest框架相同的fixture的使用, 了解unittest的同学应该知道我们在初始化环境和销毁工作时,unittest使用的是setUp,tearD ...

  7. Pytest自动化脚本中各个层级的setup和teardown的执行流程和使用方法

    [原文链接]Pytest自动化脚本中各个层级的setup和teardown的执行流程和使用方法 文章目录 一.自动化脚本组成简介 二.测试类中的各个层级的setup和teardown 三.测试文件中各 ...

  8. 什么是Pytest及Pytest常用方法

    什么是Pytest? 一.什么是pytest 二.Pytest的特点 三.Pytest以及常用插件安装 四.编写规则 五.Pytest之收集用例及命令行参数 1.用例收集规则 2.命令行参数 六.跳过 ...

  9. 【Pytest+Allure】pytest+allure自学轨迹1--认识pytest和pytest的装饰器

    认识pytest和pytest的装饰器 认识pytest pytest的装饰器 使用pytest 安装与导入 pytest用例的写法 使用fixture装饰器 作用域 不指定作用域(默认作用域func ...

最新文章

  1. 解决页面使用overflow: scroll在iOS上滑动卡顿的问题
  2. 两个for还是一个for?
  3. GD项目回顾总结之预热
  4. Java操作shell脚本
  5. GDAL C# “OSGeo.GDAL.GdalPINVOKE”的类型初始值设定项引发异常 解决方法
  6. 让.net 2.0支持并行计算
  7. 创建 tomcat 服务的镜像
  8. Java8 的 Stream API 的确牛X,但性能究竟如何呢?
  9. 王守臣 | 文字不灭:“这边有个要饭的”
  10. 页面置换模拟程序c语言,LRU页面置换算法模拟
  11. 学习Java,可以从事哪些岗位?
  12. 2017年语义理解总结(一)
  13. lammps建模技巧:msi2lmp转换data文件结构错位解决办法
  14. 珍藏书籍,人工智能书籍推荐--AI“圣经”/超详细计算机视觉书籍赠送
  15. 在excel中如何筛选重复数据_如何将Excel表中重复数据筛选出来?
  16. 使用Fiddler抓取app里面的链接
  17. element-ui el-dialog侧边弹窗可横向拖拽改变宽度
  18. 推荐一个好用的 所见即所得的 markdown 编辑器 Mark Text
  19. python莫比乌斯内接矩形_用莫比乌斯带巧解内接矩形问题:拓扑学的用处
  20. 1918:【02NOIP普及组】级数求和

热门文章

  1. 如何快速爬取一个网站所有图片链接
  2. 【cocos creater】5.仿《弓箭传说》- 创建虚拟遥感
  3. 当Linux无法正常启动的时候怎么拯救一下下,就一下下...
  4. vue 移动端歌词实时滚动及优化
  5. 偏振器件传输矩阵matlab编程,关于传输矩阵法模拟光子晶体的MATLAB编程
  6. 1.1 嵌入式系统的定义和组成
  7. 图像和流媒体 -- 帧率、分辨率、码流的概念和关系
  8. 机器学习和深度学习的区别
  9. html 滑屏 效果,HTML5 web app实现手动页面滑屏效果
  10. HDU 6438 Buy and Resell【贪心】