pytest 插件,pytest插件实现原理

  pytest 插件,pytest插件实现原理

  本文主要介绍python中Pytest的常用插件。Pytest是python的一个单元测试框架。与Unittest相比,使用起来更加简单高效,也是大多数使用Python编写测试用例的朋友的首选。

  00-1010前言1。用例依赖2。失败重新运行3。指定用例执行的顺序4。分布式操作5。多重断言6。总结。

  

目录

 

  除了框架本身提供的功能,Pytest还支持数百个第三方插件,其良好的扩展性可以更好地满足人们在用例设计上的不同需求。本文将详细介绍以下五种常用插件。

  

前言

 

  在编写用例时,我们会注意用例的独立性,但是有些用例确实是相互关联存在的,所以我们可以通过使用插件pytest-dependency来设置用例之间的依赖关系。当用例A依赖用例B时,如果用例B执行失败,用例A会自动跳过执行。这样,你可以避免执行一个必然会失败的用例,这相当于pytest.mark.skip

  (1)安装:

  pip安装pytest-依赖项

  (2)使用说明:

  首先,在标记依赖用例时,需要在依赖用例上添加decorator pytest . mark . dependency(),依赖用例需要在关联用例之前执行。您还可以通过添加参数名来为依赖用例设置别名。

  在关联的依赖用例上,还需要添加修饰器pytest . mark . dependency(dependencies=[用例名称])。与之前不同的是,decorator必须填充dependencies参数来完成用例的关联。当有多个关联的依赖用例时,可以使用“,”来分隔它们。

  另外,scope参数可以用来指定用例的范围,也是会话、包、模块、类四种类型,这里不做详细展开。

  下面的示例和执行结果进一步说明了这一点。

  (3)示例及执行结果分析

  示例:

  导入pytest

  类别测试案例:

  #使用decorator @ pytest . mark . dependency()将当前用例标记为依赖用例,依赖用例需要先与用例执行相关联。

  @pytest.mark.dependency()

  定义测试_01(自身):

  打印(“测试用例01,执行失败”)

  断言1==2

  #使用decorator来关联依赖用例,并通过depends参数指定用例名称来关联用例。

  @ pytest . mark . dependency(depends=[ test _ 01 ])

  定义测试_02(自身):

  打印(“测试案例02,跳过”)

  #标记依赖用例时,可以通过name参数指定别名。

  @ pytest . mark . dependency(name= func _ 2 )

  定义测试_03(自身):

  打印(测试用例03,成功执行!)

  #使用depends参数指定已定义的别名关联用例。

  @ pytest . mark . dependency(depends=[ func _ 2 ])

  定义测试_04(自身):

  打印(测试用例04,成功执行!)

  # depends参数可以与多个测试用例相关联,只需使用" ",将它们分开。

  @ pytest . mark . dependency(depends=[ test _ 01 , func_2])

  定义测试_05(自身):

  打印(“测试案例05,跳过”)

  if __name__==__main__:

  pytest.main([-vs])

  执行结果如下:

  我们可以看到,只有当依赖用例成功执行时,当前用例才会被执行,否则将被跳过。当多个用例有依赖关系时,只有全部成功才会执行,否则跳过。

  

1. 用例依赖

 

  在某些情况下,用例可能

  受到一些客观因素的影响,导致用例执行失败,通过使用pytest-rerunfailures插件,可以在失败后重新执行用例,并设置重新运行的最大次数。以此保证用例执行结果的准确性。

  (1)安装:

  

pip install pytest-rerunfailures

 

  (2)使用说明:

  失败重跑共有两种使用方式,分别是通过装饰器执行和命令行执行。

  使用装饰器时,需要在用例上添加装饰器pytest.mark.flaky(reruns=重新执行最大次数, reruns_delay=执行间隔时间(单位:秒)),在执行过程中,添加了装饰器的用例在执行失败后会按照设置的次数和时间重新执行。

  通过在命令行执行时,同样需要指定"rerun"和"rerun-delay"两个参数来实现,如:pytest --reruns 重新执行最大次数 --reruns-delay 间隔时间。

  注意:reruns是重新执行的最大次数,如果在达到这一数量前用例执行成功,则不会继续重跑,判断用例执行通过;否则执行到最大次数后,用例仍失败,则判断用例执行失败。

  具体通过下方的示例和执行结果进一步说明。

  (3)示例及执行结果分析

  示例:

  

import pytest

 

  执行结果如下:

  

 

  我们可以看出,当用例断言失败后,会重新执行,直到达到设置的最大次数或执行成功为止。

  

 

  

3. 指定用例执行顺序

 

  pytest在执行用例的时候,默认是按照文件中用例的先后顺序执行,有时我们可能在维护测试用例时遇到需要修改用例执行顺序的情况,但是如果每次都通过修改大段的用例代码先后位置来控制,并不利于维护。因此,使用插件pytest-ordering可以快速实现用例执行顺序的设置,后期维护时,也只需要修改对应的执行顺序参数即可。

  (1)安装:

  

pip install pytest-ordering

 

  (2)使用说明:

  通过给用例添加装饰器pytest.mark.run(order=执行顺序)设置用例的执行顺序。在执行的时候,使用装饰器pytest.mark.run的用例会优先没有装饰器的用例执行,设置了执行顺序的用例则按照order参数设置的大小升序执行。

  具体通过下方的示例和执行结果进一步说明。

  (3)示例及执行结果分析

  示例:

  

import pytest

 

  执行结果:

  

 

  我们可以看出,执行的顺序和预期一致。优先执行标明了执行顺序的用例,并按照order的值由小到大执行。

  

 

  

4. 分布式运行

 

  当项目的用例很多的时候,执行通常会耗时颇久,通过分布式运行,则可以大量缩短整体用例的执行时间。pytest-xdist插件就可以帮助我们完成测试用例的分布式运行。

  (1)安装:

  

pip install pytest-xdist

 

  (2)使用说明:

  在命令行执行用例时,通过参数-n设置并行启动的进程数量。除了设置具体的数量外,还可以设置为auto,这种情况下,会依据当前设备的cpu数量执行。

  此外,还可以通过--dist参数,设置用例分组,同一个组内的用例会在同一个进程中执行。

  

  • --dist=loadscope 同一个module或同一个class下的用例会分配为同一组,按class分组优先于module。

  • --dist=loadfile 同一个.py文件中的用例会分配为同一组。

 

  具体通过下方的示例和执行结果进一步说明。

  (3)示例及执行结果分析

  示例:

  

import pytest

 

  执行结果:

  

 

  

 

  从上方的两次执行结果中可以看出,使用分布式运行后,用例的运行时间明显缩短。示例中的用例彼此之间没有关联,如果实际使用时用例之间存在依赖关系,可以使用--dist参数为用例分组,确保关联的用例在同一组内。

  

 

  

5. 多重断言

 

  有时,在一个用例中,我们需要对结果进行不同维度的多个断言,但是使用assert断言时,只要有一个断言失败,后续的断言就不会继续执行。现在,我们可以通过使用pytest-assume插件来解决这个问题,当断言失败后,仍会继续执行后续的断言。

  (1)安装:

  

pip install pytest-assume

 

  (2)使用说明:

  在用例中,把使用assert进行的断言,改为使用pytest.assume()进行断言即可。

  具体通过下方的示例和执行结果进一步说明。

  (3)示例及执行结果分析

  示例:

  

import pytest

 

  执行结果:

  

 

  从执行结果中可以看出,使用assert断言时,断言失败不会再执行后续的内容;而使用pytest.assume()断言时,断言失败仍会执行至用例结束。这样更有利于我们一次性获取用例执行中全部错误信息。

  

 

  

6. 小结

 

  本文为大家介绍了一些常用的pytest框架的插件,可以帮助我们解决一些实际使用过程中遇到的问题。目前,pytest支持的插件已经多达868个,除了本文介绍的5个常用插件外,还有很多支持其它需求的插件,大家可以根据自己的需要尝试查找使用相关的插件,以便能够更好的设计出符合业务场景的测试用例。

  到此这篇关于python中Pytest常用的插件的文章就介绍到这了,更多相关python Pytest 内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!

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

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