我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python中Pytest常用的插件

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python中Pytest常用的插件

前言

除了框架本身提供的功能外,Pytest还支持上百种第三方插件,良好的扩展性可以更好的满足大家在用例设计时的不同需求。本文将为大家详细介绍下面5项常用的插件。

1. 用例依赖

编写用例的时候,我们会注意用例之间的独立性,但部分用例之间确实存在关联,无法做到彻底独立,那么我们就可以通过使用插件pytest-dependency设置用例之间的依赖关系。当用例A依赖于用例B时,若用例B执行失败,则用例A将会自动跳过不执行。如此,就可以避免去执行一个必定会失败的用例,相当于pytest.mark.skip。

(1)安装:

pip install pytest-dependency

(2)使用说明:

首先,在标记被依赖用例时,需要在被依赖的用例上添加装饰器pytest.mark.dependency(),且被依赖用例需要在关联用例前执行。也可以给被依赖用例设置别名,通过添加参数name实现。

在关联的依赖用例上,同样需要添加装饰器pytest.mark.dependency(depends=['用例名称']),与之前不同的是,装饰器必须要填写depends参数完成用例的关联,关联的被依赖用例存在多个时可以使用“,”隔开。

此外,还可以通过scope参数指定用例依赖的范围,同样是session、package、module、class这四种类型,此处不详细展开。

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

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

示例:

import pytest
class TestCase:
    # 通过装饰器@pytest.mark.dependency()标记当前用例为被依赖用例,被依赖用例需要优先关联用例执行
    @pytest.mark.dependency()
    def test_01(self):
        print("测试用例01,执行失败")
        assert 1 == 2
    # 通过使用装饰器关联被依赖用例,通过depends参数指定用例名称关联用例
    @pytest.mark.dependency(depends=['test_01'])
    def test_02(self):
        print("测试用例02,跳过")
    # 标记被依赖用例时,可以通过name参数指定别名
    @pytest.mark.dependency(name="func_2")
    def test_03(self):
        print("测试用例03,执行成功!")
    # 使用depends参数指定定义的别名关联用例
    @pytest.mark.dependency(depends=['func_2'])
    def test_04(self):
        print("测试用例04,执行成功!")
    # depends参数可以关联多个测试用例,使用“,”分隔即可
    @pytest.mark.dependency(depends=['test_01', 'func_2'])
    def test_05(self):
        print("测试用例05,跳过")
if __name__ == '__main__':
    pytest.main(['-vs'])

执行结果如下:

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

2. 失败重跑

有些情况下,用例在执行过程中可能会受到一些客观因素的影响,导致用例执行失败,通过使用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
import random
class TestCase:
    # 使用装饰器设置用例失败后的重新执行最大次数和每次执行的间隔时间(单位:秒)
    @pytest.mark.flaky(reruns=3, reruns_delay=1)
    def test_01(self):
        result = random.choice(['a', 'b', 'c', 'd', 'e'])
        print(f"result={result}")
        assert result == 'c'
if __name__ == '__main__':
    pytest.main(['-vs'])

执行结果如下:

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

3. 指定用例执行顺序

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

(1)安装:

pip install pytest-ordering

(2)使用说明:

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

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

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

示例:

import pytest
class TestCase:
    def test_01(self):
        print("测试用例01")
    def test_02(self):
        print("测试用例02")
    # 使用装饰器设置执行顺序为2
    @pytest.mark.run(order=2)
    def test_03(self):
        print("测试用例03")
    # 使用装饰器设置执行顺序为1
    @pytest.mark.run(order=1)
    def test_04(self):
        print("测试用例04")
if __name__ == "__main__":
    pytest.main(['-vs'])

执行结果:

我们可以看出,执行的顺序和预期一致。优先执行标明了执行顺序的用例,并按照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
from time import sleep
class TestCase1:
    @pytest.mark.parametrize('keyword', ['a', 'b', 'c', 'd', 'e',                                        'f', 'g', 'h', 'i', 'j'])
    def test_baidu_search(self, keyword):
        sleep(1)
        print(f'搜索关键字{keyword}')
class TestCase2:
    @pytest.mark.parametrize('user', ['user1', 'user2', 'user3', 'user4', 'user5',                                    'user6', 'user7', 'user8', 'user9', 'user10'])    def test_login(self, user):
        sleep(1)
        print(f'用户{user}登录成功')
if __name__ == '__main__':
    # pytest.main(['-vs']) # 不使用pytest-xdist运行
    pytest.main(['-vs', '-n', '2']) # 使用pytest-xdist运行

执行结果:

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

5. 多重断言

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

(1)安装:

pip install pytest-assume

(2)使用说明:

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

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

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

示例:

import pytest
class TestCase:
    # 使用assert断言
    def test_01(self):
        print("断言1")
        assert 1 == 1
        print('断言2')
        assert 2 == 1
        print("断言3")
        assert 3 == 3
        print('用例结束')
    # 使用pytest.assume()断言
    def test_02(self):
        print('断言1')
        pytest.assume(1 == 1)
        print('断言2')
        pytest.assume(2 == 1)
        print('断言3')
        pytest.assume(3 == 3)
        print('用例结束')
if __name__ == '__main__':
    pytest.main(['-vs'])

执行结果:

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

6. 小结

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

到此这篇关于python中Pytest常用的插件的文章就介绍到这了,更多相关python Pytest 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python中Pytest常用的插件

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

pytest插件的7种用法

本文主要介绍了pytest插件的7种用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-02-07

VIM中常用的插件有哪些

今天小编给大家分享一下VIM中常用的插件有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。插件安装设置这是为新用户准备的,
2023-06-28

怎么在python中使用pytest发送邮件

今天就跟大家聊聊有关怎么在python中使用pytest发送邮件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python主要应用领域有哪些1、云计算,典型应用OpenStack。2
2023-06-14

Python中的Director插件怎么用

这篇文章将为大家详细讲解有关Python中的Director插件怎么用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。前言Director 是一个Python的类库用来开发命令行工具的插件,利
2023-06-02

ubuntu中怎么安装常用插件

这期内容当中小编将会给大家带来有关ubuntu中怎么安装常用插件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。上传下载# sudo apt-get install -y lrzsz解压缩# sudo ap
2023-06-05

maven常用的插件有哪些

这篇文章主要介绍了maven常用的插件有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。背景maven 常用的三个插件对打包有不同的作用:maven-jar-plugin:
2023-06-22

sublime 3及常用插件

1、了解Zen Coding:https://www.baidu.com/link?url=c9YyfvWOfn0EtUrhKlZQ26ANUOD_CSqjgqqsb3lq6LQ05oy2MQs4hWEYLVTlFgHhZKLmtMPTq1
2023-01-31

webpack中常用的JS压缩插件有哪些

这篇文章给大家分享的是有关webpack中常用的JS压缩插件有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。这里 讲解 三种JS 打包插件:(1)UglifyJS支持: babel present2015、w
2023-06-14

python中vim插件的作用是什么

python中vim插件的作用是什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python的数据类型有哪些?python的数据类型:1. 数字类型,包括int(整型)、lo
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录