返回顶部
首页 > 资讯 > 后端开发 > Python >python中Pytest常用的插件
  • 524
分享到

python中Pytest常用的插件

2024-04-02 19:04:59 524人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录前言1. 用例依赖2. 失败重跑3. 指定用例执行顺序4. 分布式运行5. 多重断言6. 小结前言 除了框架本身提供的功能外,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 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: python中Pytest常用的插件

本文链接: https://lsjlt.com/news/118778.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python中Pytest常用的插件
    目录前言1. 用例依赖2. 失败重跑3. 指定用例执行顺序4. 分布式运行5. 多重断言6. 小结前言 除了框架本身提供的功能外,Pytest还支持上百种第三方插件,良好的扩展性可以...
    99+
    2024-04-02
  • pytest插件的7种用法
    目录1.pytest-repeat 重复跑第一种用法: 装饰器 @pytest.mark.repeat(次数)第二种用法: 命令行参数第三种用法: 结合repeat-scope运行2...
    99+
    2023-02-07
    pytest 插件
  • 详解pytest分布式执行插件 pytest-xdist 的高级用法
    想要使用多个CPU核心来进行测试,可以使用 -n 参数( 或者 --numprocesses)(使用8个核心来跑测试用例) pytest -n 8 使用 -n auto 参数可以利用...
    99+
    2024-04-02
  • VIM中常用的插件有哪些
    今天小编给大家分享一下VIM中常用的插件有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。插件安装设置这是为新用户准备的,...
    99+
    2023-06-28
  • 怎么在python中使用pytest发送邮件
    今天就跟大家聊聊有关怎么在python中使用pytest发送邮件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python主要应用领域有哪些1、云计算,典型应用OpenStack。2...
    99+
    2023-06-14
  • python单测框架之pytest常见用法
    目录单测框架的作用pytest简介pytest默认规则pytest的运行方式主函数模式命令行模式参数详解读取pytest.ini配置文件运行分组执行忽略执行单测框架的作用 ...
    99+
    2024-04-02
  • Python中Pyenv virtualenv插件的使用
    介绍:pyenv-virtualenv是pyenv的一个插件,作用如同virtualenv一样,是用来管理虚拟环境的,配合pyenv主体使用可做到python的版本管理及虚拟环境的管...
    99+
    2024-04-02
  • Python中的Director插件怎么用
    这篇文章将为大家详细讲解有关Python中的Director插件怎么用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。前言Director 是一个Python的类库用来开发命令行工具的插件,利...
    99+
    2023-06-02
  • ubuntu中怎么安装常用插件
    这期内容当中小编将会给大家带来有关ubuntu中怎么安装常用插件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。上传下载# sudo apt-get install ...
    99+
    2023-06-05
  • maven常用的插件有哪些
    这篇文章主要介绍了maven常用的插件有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。背景maven 常用的三个插件对打包有不同的作用:maven-jar-plugin:...
    99+
    2023-06-22
  • Grafana有哪些常用的插件
    Grafana广泛应用的开源监控和数据可视化工具,有许多常用的插件,包括但不限于: Graph 插件:用于创建时间序列数据的图表,...
    99+
    2024-04-02
  • 全网非常详细的pytest配置文件
    目录更改默认命令行选项注册标记来防止拼写错误指定pytest的最低版本号指定pytest忽略某些目录指定测试目录更改测试搜索的规则python_classespython_files...
    99+
    2024-04-02
  • Flutter 常用插件汇总
    目录DIO网络请求框架url_launcher系统应用跳转flutter_easyrefresh上下拉刷新flutter_swiper 轮播组件catcher 异常捕获cached_...
    99+
    2024-04-02
  • sublime 3及常用插件
    1、了解Zen Coding:https://www.baidu.com/linkurl=c9YyfvWOfn0EtUrhKlZQ26ANUOD_CSqjgqqsb3lq6LQ05oy2MQs4hWEYLVTlFgHhZKLmtMPTq1x...
    99+
    2023-01-31
    插件 常用 sublime
  • pytest中配置文件pytest.ini使用
    目录一、pytest.ini说明二、pytest.ini设置1.addopts–设置自定义执行参数2. testpaths–设置执行路径3. markers&...
    99+
    2024-04-02
  • pytest实现多进程与多线程运行超好用的插件
    目录前言一、pytest-parallel二、pytest-xdist三、对比说明四、特别注意前言 如果想分布式执行用例,用例设计必须遵循以下原则: 1、用例之间都是独立的,2、用例...
    99+
    2024-04-02
  • pytest官方文档解读之安装和使用插件的方法
    目录一、pip 安装二、查找可用插件三、在测试模块或者conftest文件中加载指定插件四、查看被激活的插件五、注销插件本节讨论安装和使用第三方插件。关于编写自己的插件,我们下一章继...
    99+
    2024-04-02
  • webpack中常用的JS压缩插件有哪些
    这篇文章给大家分享的是有关webpack中常用的JS压缩插件有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。这里 讲解 三种JS 打包插件:(1)UglifyJS支持: babel present2015、w...
    99+
    2023-06-14
  • Pytest中conftest.py的用法
    目录前言什么是conftest.pyconftest.py特点conftest.py用法conftest.py实际案例test_baidu目录下前言 在之前介绍fixture的文章中...
    99+
    2024-04-02
  • python中vim插件的作用是什么
    python中vim插件的作用是什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、lon...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作