python中Pytest常用的插件

这篇具有很好参考价值的文章主要介绍了python中Pytest常用的插件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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


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

(1)安装:

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'])

执行结果如下:

python中Pytest常用的插件,软件测试,自动化测试,pytest

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


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

(1)安装:

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'])

执行结果如下:

python中Pytest常用的插件,软件测试,自动化测试,pytest

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


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

(1)安装:

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'])

执行结果:

python中Pytest常用的插件,软件测试,自动化测试,pytest

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


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

(1)安装:

1

pip install pytest-xdist

(2)使用说明:

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

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

--dist=loadscope 同一个module或同一个class下的用例会分配为同一组,按class分组优先于module。
--dist=loadfile 同一个.py文件中的用例会分配为同一组。
具体通过下方的示例和执行结果进一步说明。

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

示例:

python中Pytest常用的插件,软件测试,自动化测试,pytest

执行结果:

python中Pytest常用的插件,软件测试,自动化测试,pytest

python中Pytest常用的插件,软件测试,自动化测试,pytest

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


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

(1)安装:

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'])
执行结果:

python中Pytest常用的插件,软件测试,自动化测试,pytest

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


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

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

python中Pytest常用的插件,软件测试,自动化测试,pytest

 视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。    文章来源地址https://www.toymoban.com/news/detail-803407.html

到了这里,关于python中Pytest常用的插件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 软件测试|Windows系统配置pytest+allure环境教程

    前言 allure可以输出非常精美的测试报告,也可以和pytest进行完美结合,不仅可以渲染页面,还可以控制用例的执行。本文我们将介绍Windows系统中如何配置allure环境。 第一步:配置Java环境 因为 allure 的运行依赖于Java环境,所以我们需要先配置好Java环境, allure 需要的Java环境

    2024年02月01日
    浏览(43)
  • Pytest插件pytest-selenium-让自动化测试更简洁

    2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板) 在现代Web应用的开发中,自动化测试成为确保网站质量的重要手段之一。而Pytest插件 pytest-selenium 则为开发者提供了简单而强大的工具,以便于使用Python进行Web应用的自动化测试。本

    2024年01月19日
    浏览(49)
  • Pytest插件“pytest-selenium” - 让自动化测试更简洁

    在现代Web应用的开发中,自动化测试成为确保网站质量的重要手段之一。而Pytest插件 pytest-selenium 则为开发者提供了简单而强大的工具,以便于使用Python进行Web应用的自动化测试。本文将深入介绍 pytest-selenium 插件的基本用法和实际案例,助你轻松进入无忧的Web应用测试之旅。

    2024年01月20日
    浏览(42)
  • 软件测试:功能测试-接口测试-自动化测试-性能测试-验收测试

    软件测试的主要流程 一、测试主要的四个阶段 1.测试计划设计阶段 :产品立项之后,进行需求分析,需求评审,业务需求评级,绘制业务流程图。确定测试负责人,开始制定测试计划; 2.测试准备阶段 :各成员编写测试用例、先小组内评审、后会议评审,测试样机和配件,

    2024年02月08日
    浏览(59)
  • 软件测试 -- 自动化测试(Selenium)

            在这里记录一下  自动化测试 -- Selenium 的一些基础知识点,只记录方法。 Selenium 浏览器操作 Selenium 元素定位(包含 Web 表单) findElement 和 findElements         findElement 和 findElements 都可以用于定位元素,它们都需要传入一个 By 类型,但是他们的返回值不同,区

    2024年04月22日
    浏览(61)
  • 【软件测试】自动化测试selenium

    目录 一、什么是自动化测试 二、Selenium介绍 1、Selenium是什么 2、Selenium的原理 三、了解Selenium的常用API 1、webDriver API   1.1、元素定位 1.1.1、CSS选择器 1.1.2、Xpath元素定位 1.1.3、面试题  1.2、操作测试对象 1.3、添加等待  1.4、打印信息  1.5、浏览器的操作 1.6、键盘事件 1.7、鼠

    2024年01月17日
    浏览(60)
  • 软件测试/自动化测试/测试开发/性能测试经典好书推荐

    目录 前言 测试理论与实践 性能测试 安全测试 自动化测试 编程语言与开发技能 管理技能 软件测试入行容易进阶难。从测试小白成长为测试经理、总监级别人才,要跨越长长的技术栈升级之路,挑战非常高的综合能力要求。 大牛都是相似的:具备扎实的测试方法论基础,能

    2024年02月09日
    浏览(63)
  • 软件测试 自动化测试selenium API

    1.1.1 CSS 选择器定位元素 CSS 选择器 就是一个语法 浏览器 (ctrl + f)可以进行选择 类选择器:.class值(.s_ipt) id 选择器:#id值(#kw) 父类选择器 子类选择器:父类选择器表达式 子类选择器表达式 标签选择器:标签名(form) 1.1.2 XPath 定位元素 XPath 是一种在XML 文档中定位元

    2024年04月28日
    浏览(51)
  • 软件测试 自动化测试selenium篇(一)

    目录 一、什么是自动化测试  单元测试  接口自动化  UI自动化 二、如何实施自动化测试  自动化测试需要了解的技能 三、selenium介绍 webdriver的工作原理:  四、Selenium+Java环境搭建                    验证环境是否搭建成功 创建java项目,添加pom文件中添加依赖 常见问题

    2024年02月07日
    浏览(69)
  • 软件测试之单元测试自动化入门基础

    所谓的单元测试(Unit Test)是根据特定的输入数据,针对程序代码中的最小实体单元的输入输出的正确性进行验证测试的过程。所谓的最小实体单元就是组织项目代码的最基本代码结构: 函数,类,模块 等。在Python中比较知名的单元测试模块: unittest pytest doctest nose 所谓的测试

    2024年02月03日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包