pytest中fixture,pytest实现fixture的原理_1

  pytest中fixture,pytest实现fixture的原理

  本文详细解释了Pytest框架的fixture,通过示例代码对其进行了非常详细的介绍。对大家的学习或者工作都有一定的参考价值,有需要的朋友可以参考一下。

  

相关文章

 

  Py框架夹具说明(1)

  Py框架夹具说明(2)

  Py框架夹具说明(三)

  本文关于夹具的内容如下:

  在模块级自动使用夹具和夹具

1、fixture 的 autouse 参数

的参数会话。

 

  默认情况下,Py中的fixture只有在被定义并且测试用例/测试类主动请求使用它之后才会被执行。

  但是它有一个名为autouse的参数,默认为False。

  关闭夹具的自动调用/执行功能。

  如果设置了autouse=True,这意味着这个fixture将在其作用域内自动执行。

  可以分为两种情况。接下来举个例子。

  

第 1 种情况:当定义的 fixture 在测试类内部时

 

  如果fixture设置autouse=True,它将只在测试类内部生效。测试之外的用例不受影响。

  定义一个test_pytest-autouse.py和一个TestDemo类。

  其中定义了两个fixture,一个使用autouse=True,另一个使用默认值False。

  执行结果:

  

第 2 种情况,在 conftest.py 当中的 fixture 设置 autouse=True

 

  Conftest.py可以影响所有测试类/测试用例将被执行(取决于fixture的范围,将执行哪个范围)。

  有以下目录结构:

  在测试用例文件(test_autouse1.py,test_autouse2.py)中,@ py test . mark . use fixture( func _ fix )不用于主动请求fixture。

  conftest.py文件的内容如下:

  名为func_fix的fixture设置了autouse=True,它的作用域是function,所以

  pytest20210301包下的每一个测试用例在执行之前都会执行它的预准备动作,在执行之后会执行它的后清理动作。

  执行main.py(收集用例并执行它们)文件的结果如下:

  基于上述情况,通用函数、类和模块级fixture不会打开autouse=True。

  不同的测试用例/测试类对前期准备和后期清理有不同的要求。

  如果autouse=True被打开,那么不管测试用例/测试类是否需要它,它都会被执行。

  测试用例/测试类根据实际需要主动请求使用fixture才是正道。

  

2、session 和 module 级别的 fixture

 

  除了函数和类,pytest的fixture还有会话和模块级别。

  

session 级别的 fixture

 

  这里的会话指的是测试会话。

  它指的是:从pytest到用例收集、用例执行的整个过程是一个会话。

  例如,如果收集了100个要执行的测试用例,那么会话夹具将保存这100个测试用例。

  例如,如果收集了30个要执行的测试用例,那么会话夹具将保存这30个测试用例。

  因为它在所有用例的执行过程中只执行一次。

  如果定义了会话级fixture,这意味着您需要执行它。

  所以它可以设置autouse=True。

  当我们进行自动化测试时,如果为整个测试会话做了一些准备工作,那么我们就可以定义会话级别,比如清理/创建一些文件等。

  或者以上面的用例结构为例,在conftest.py中添加会话级fixture,并设置为autouse=True:

  执行结果如下:

  

module 级别的 fixture

 

  模块引用测试py文件,fixture保存整个test_*中的测试用例。py文件。

  测试中_*。py,哪一行代码调用了模块级fixture,那么那一行代码之后的所有测试用例都包含在内。

  为了说明。或者以上面的用例结构为例,在conftest.py中添加模块级fixture:

  在test_autouse2.py中,调用了模块级的fixture,但是在第一个用例之前没有调用它。

  执行结果如下:

  关于Pytest框架的fixture,本文到此结束。希望对大家的学习有所帮助,也希望大家能支持盛行的IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: