自动化测试框架pytest系列之8个常用的装饰器函数

Pytest中的fixture装饰器详解 pytest是Python生态中最流行的自动化测试框架,它通过简洁的语法、强大的功能(如fixture、参数化、插件扩展等)和丰富的插件生态,帮助开发者高效完成单元测试、集成测试和端到端测试。 阅读详情

自动化测试框架pytest系列之基础概念介绍(一)-CSDN博客  

自动化测试框架pytest系列之21个命令行参数介绍(二)-CSDN博客

自动化测试框架pytest系列之强大的fixture功能,为什么fixture强大?一文拆解它的功能参数。(三)-CSDN博客

接上文 

3.5 pytest的8个装饰器

在之前的文章可以看到,fixture本身就是以装饰器的形式去使用的。但在pytest中,其实有很多的装饰器函数,接下来我们就捋一下有哪些装饰器 。

 

如果你自己发现 ,除了fixture本身 ,其他的都在mark后面进行标记 。所以这个mark非常重要 。

1.@pytest.fixture()

此功能应该是pytest中最核心和强大的功能 ,为了介绍此功能 ,本人足足写了1.8w字 。具体可查看链接 :自动化测试框架pytest到底都有哪些实用功能 ?pytest系列文章之fixture的介绍(一)。 - 知乎 (zhihu.com)

2.@pytest.mark.usefixtures()

  • 功能 :可以在测试用例中引入fixture的功能 ,

  • 格式 :@pytest.mark.usefixtures("fixture函数名"),其中参数必须传递fixture的函数名字 ,而且要用引号引起来 。

  • 区别 :和fixture()传递给测试用例的区别是 :

    • fixture:既可以将返回值传给测试用例,也可以无任何返回值,比如像上面的打印语句,本身不返回任何信息。

    • usefixture :无法将返回值的函数传递给测试用例 ,即测试用例只能接受无返回值的usefixture 。

  • 需求 :给登录的每条测试用例中添加一个打印信息,具体如下:


import pytest
from package_pytest.login import login


# fixture
@pytest.fixture()
def demo_fixture():
    print("这是一个fixture,要在每个方法执行前先运行")


# case1 : 输入正确的用户名和正确的密码进行登录
@pytest.mark.usefixtures('demo_fixture')
def test_login_success():
    print("1")
    expect_result = 0
    actual_result = login('admin','123456').get('code')
    assert expect_result == actual_result


# case2 : 输入正确的用户名和错误的密码进行登录
@pytest.mark.usefixtures('demo_fixture')
def test_password_is_wrong():
    print("2")
    expect_reesult = 3
    actual_result = login('admin','1234567').get('code')
    assert expect_reesult == actual_result


# case3 : 输入用户名和空的密码进行登录
@pytest.mark.usefixtures('demo_fixture')
def test_password_is_null():
    print("3")
    expect_reesult = 2
    actual_result = login('admin', '').get('code')
    assert expect_reesult == actual_result


if __name__ == '__main__':
    pytest.main(['test12_login_usefixtrues.py','-sv'])
  • 说明 :

    1. 定义了一个demo_fixture函数 ,其中这个函数想被测试用例调用 。

    2. 在调用的测试用例前加上@pytest.mark.usefixtures('demo_fixture') ,相当于把fixture函数传递给了测试用例了 。

    3. 所以 ,在测试用例运行就会先执行fixture函数内的代码了 。

以上代码运行结果为 :

3.@pytest.mark.parametrize

  • 功能 :可以专门为某条测试用例进行参数化 ,

  • 格式 :@pytest.mark.parametrize(参数,列表) ,其中参数主要为了传递给测试用例使用的,它接受的是字符串类型 。而列表是用来接收测试数据的。

  • 需求 :要将登录的4条测试数据传入给登录测试用来,该如何做 ,使用parametrize代码实现为 :

import pytest
from package_pytest.login import login

cases = [(0,'admin','123456'),(3,'admin','1234567'),(2,'admin',''),(1,'','123456')]


# case: 登录测试用例
@pytest.mark.parametrize("expect_result,username,password",cases)
def test_login_success(expect_result,username,password):
    print("1")
    actual_result = login(username,password).get('code')
    assert expect_result == actual_result

 对以上代码的说明 :

运行结果如下 :  

4.@pytest.mark.标识符

  • 功能 :可以做回归测试或者打包测试套件

  • 格式 :@pytest.mark.标识符 ,其中标识符可以是任何字符。

  • 说明:在测试用例中,我们经常通过用例级别代表用例的重要程度 ,比如会把用例设置为p1 , p2 ,p3 ,p4 .而在pytest中就可以mark进行标记 。

  • 需求 :对登录成功的用例标记为p1 ,对登录失败的用例标记为p2 ,具体代码如下 :

# case1 : 输入正确的用户名和正确的密码进行登录
@pytest.mark.p1
def test_login_success():
    print("1")
    expect_result = 0
    actual_result = login('admin','123456').get('code')
    assert expect_result == actual_result


# case2 : 输入正确的用户名和错误的密码进行登录
@pytest.mark.p2
def test_password_is_wrong():
    print("2")
    expect_reesult = 3
    actual_result = login('admin','1234567').get('code')
    assert expect_reesult == actual_result


# case3 : 输入用户名和空的密码进行登录
@pytest.mark.p2
def test_password_is_null():
    print("3")
    expect_reesult = 2
    actual_result = login('admin', '').get('code')
    assert expect_reesult == actual_result
    

if __name__ == '__main__':
    pytest.main(['test08_login_mark.py','-sv','-m','p1'])

可以看到 ,我们在main函数中传入了-m和p1 ,就代表只运行mark中标记为p1级别的用例 ,这样就实现了部分用例的执行。

运行结果如下 :

5.@pytest.mark.skip

  • 功能 :用例跳过,比如某条用例暂时失败了,但是找不到原因 ,可以先标记为跳过 。

  • 格式 :@pytest.mark.skip(reason) ,这里的reason就是跳过的原因

  • 需求 :对登录成功的用例标记为跳过,在执行的时候不运行 ,具体代码如下 :


import pytest
from package_pytest.login import login


# case1 : 输入正确的用户名和正确的密码进行登录
@pytest.mark.skip(reason="用例运行失败,暂时找不到失败原因,跳过该用例执行。")
def test_login_success():
    print("1")
    expect_result = 0
    actual_result = login('admin','123456').get('code')
    assert expect_result == actual_result


# case2 : 输入正确的用户名和错误的密码进行登录
@pytest.mark.p2
def test_password_is_wrong():
    print("2")
    expect_reesult = 3
    actual_result = login('admin','1234567').get('code')
    assert expect_reesult == actual_result


# case3 : 输入用户名和空的密码进行登录
@pytest.mark.p2
def test_password_is_null():
    print("3")
    expect_reesult = 2
    actual_result = login('admin', '').get('code')
    assert expect_reesult == actual_result


if __name__ == '__main__':
    pytest.main(['test09_login_skip.py','-sv'])

 运行代码如下 :

6.@pytest.mark.skipif

  • 功能 :选择性跳过用例,条件为True才会跳过 。

  • 格式 :@pytest.mark.skipif(表达式) ,这里只能做一些简单的判断。

  • 说明 :和skip相比 ,只要标记为skip,此用例就会跳过,而标记为skipif的话,这里有个判断,只有为ture的情况下才会跳过 。

  • 需求 :对登录成功的用例标记选择性跳过,符合条件的将跳过该用例 ,具体代码如下 :

import pytest
from package_pytest.login import login
import sys


# case1 : 输入正确的用户名和正确的密码进行登录
@pytest.mark.skipif(sys.platform == "win32",reason="是windows平台的跳过")
def test_login_success():
    print("1")
    expect_result = 0
    actual_result = login('admin','123456').get('code')
    assert expect_result == actual_result


# case2 : 输入正确的用户名和错误的密码进行登录
@pytest.mark.skipif(sys.version_info <(3,6),reason="低于3.6版本的跳过")
def test_password_is_wrong():
    print("2")
    expect_reesult = 3
    actual_result = login('admin','1234567').get('code')
    assert expect_reesult == actual_result


# case3 : 输入用户名和空的密码进行登录
@pytest.mark.skipif(sys.version_info >=(3,6),reason="大于等于3.6版本的跳过")
def test_password_is_null():
    print("3")
    expect_reesult = 2
    actual_result = login('admin', '').get('code')
    assert expect_reesult == actual_result


if __name__ == '__main__':
    pytest.main(['test10_login_skipif.py','-sv'])

因为我的Python版本是3.6.4 ,故第二条用例不会被跳过,运行结果如下 :

7.@pytest.mark.xfail

  • 功能 :标记为失败用例,表示期望这个用例执行失败。

  • 格式 :@pytest.mark.xfail(表达式,reason) ,表达式为True,标记为失败用例。

  • 说明 :和skipif相比,skipif表达式为真,跳过用例执行,而标记xfail的话,表达式为真,则标记为失败 。

  • 需求 :对登录用例中符合条件的都标记为失败用例 ,具体代码如下 :


import pytest
from package_pytest.login import login
import sys


# case1 : 输入正确的用户名和正确的密码进行登录
@pytest.mark.xfail(sys.platform == "win32",reason="是windows平台的跳过")
def test_login_success():
    print("1")
    expect_result = 0
    actual_result = login('admin','123456').get('code')
    assert expect_result == actual_result


# case2 : 输入正确的用户名和错误的密码进行登录
@pytest.mark.xfail(sys.version_info <(3,6),reason="低于3.6版本的标记为失败")
def test_password_is_wrong():
    print("2")
    expect_reesult = 3
    actual_result = login('admin','1234567').get('code')
    assert expect_reesult == actual_result


# case3 : 输入用户名和空的密码进行登录
@pytest.mark.xfail(sys.version_info >=(3,6),reason="大于等于3.6版本的标记为什么")
def test_password_is_null():
    print("3")
    expect_reesult = 20
    actual_result = login('admin', '').get('code')
    assert expect_reesult == actual_result


if __name__ == '__main__':
    pytest.main(['test11_login_xfail.py','-sv'])

 运行结果如下 :

以上是正常的运行结果 ,如果你只想运行失败的用例,你可以加入该选项'--runxfail' .  

if __name__ == '__main__':
    pytest.main(['test11_login_xfail.py','-sv','--runxfail'])

 运行以上命令,那么这条用例就会像断言失败的用例输出 。

8.@pytest.mark.run

  • 功能 :控制用例的运行顺序 ,但它需要下载插件pytest-ordering .

  • 格式 :@pytest.mark.run(order=n) ,其中n代表一个数字 ,数字越小,代表执行顺序越靠前 ,反之数字越大,越靠后。

  • 需求 :给登录的测试用例标记不同的顺序 ,具体如下:

 运行结果如下 :

Pytest常用装饰器使用 pytest装饰器使用 阅读详情

相关推荐

【python篇】pytest框架(图文详解)

pytest是纯python编写的自动化测试框架,可以支持python语法编写测试用例,是一个非常成熟的全功能的Python测试框架。简单灵活,容易上手;支持参数化;能够支持简单的单元测试和复杂的功能测试,还可以结合selenium、requests做自动化测试;pytest具有很多第三方插件,并且可以自定义扩展。

qadnkz的专栏 1万+

Pytest测试框架(四)---装饰器的使用

pytest测试框架 装饰器的使用

weixin_44701654的博客 2964

基于pytest框架自动化测试

前言 pytest是python2自带的自动化测试框架,python3的版本的话pytest框架独立出来,需要pip进行安装 选取pytest框架作为自动化的框架,是经过多个框架对比之后的结果,它有一些相对的优势 相对比于unittest框架几个优势: 1.fixture前置功能 2.用例标记,用例重跑等功能。  3.用例参数化  4.兼容unittest,nose框架 其中的亮点...

Jolting的博客 6259

pytest 生成器、装饰器、迭代器介绍及应用

pytest 是一个功能强大且易于使用的 Python 测试框架。它提供了丰富的功能和灵活的扩展机制,使得编写和运行测试变得简单和高效。在pytest测试框架中,装饰器是一种用于修改、扩展或定制测试函数行为的机制。本质上是一个函数。pytest提供了多个内置的装饰器,用于标记测试函数、控制测试执行、参数化测试等。它可以在不改变函数调用方式的前提下,通过在被装饰函数的定义之前使用@符号来应用装饰器。在 Pytest 中,除了使用内置的装饰器,也可以使用自定义装饰器来扩展测试框架的功能。

cs_mengxi的博客 2712

Python 自动化测试框架 unittest 和 pytest 对比

Python 自动化测试框架 unittest 和 pytest 对比 一、用例编写规则 1.unittest提供了test cases、test suites、test fixtures、test runner相关的类,让测试更加明确、方便、可控。使用unittest编写用例,必须遵守以下规则:   (1)测试文件必须先import ...

Blog 3848

pytest接口自动化测试框架入门(pytest+yaml)

文章目录。小练习实战:使用yaml测试查询天气接口,scope参数值 params参数化使用: ids参数的使用 ids和name参数的使用 自动化测试需要包含的内容 pytest的安装 使用pytest默认的测试用例的规则和基础使用: pytest测试用例的运行方式 pytest执行测试用例的顺序

2301_77709772的博客 2182

Pytest自动化测试框架详解

今日之失,未必不为后日之得。大家好,刚才在翻看之前整理的一些关于自动化测试的文档,突然发现一个比较详细的关于pytest框架的介绍和使用文章,对于打算使用python进行自动化测试编写的小伙伴,还是很值得一看的,希望对大家有所帮助。

若不知道要驶向哪个码头,那么任何风都不会是顺风。 6123

Python 测试新玩法:pytest 的装饰器使用

在软件开发过程中,测试是确保代码质量和功能正确性的关键环节。pytest 是 Python 中一个强大且灵活的测试框架,而其装饰器更是为测试工作带来了极大的便利和灵活性。本文的目的是全面介绍 pytest 装饰器的使用方法、原理和应用场景,让读者能够深入理解并熟练运用这些装饰器来编写高效、灵活的测试用例。本文的范围涵盖了 pytest 中常见的装饰器,如等,通过理论讲解和实际代码示例相结合的方式,帮助读者掌握这些装饰器的使用技巧。核心概念与联系:介绍 pytest 装饰器的基本概念、原理和架构。

AI Python 编程之道的博客 975

pytest接口自动化测试框架 | 汇总

视频来源B站《冒死上传!pytest接口自动化测试框架(基础理论到项目实战及二次开发)教学视频【软件测试】》一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!...

团爸讲算法 9719

Windows环境下DataEase一站式安装指南(含WSL2+Docker配置)

本文详细介绍了在Windows环境下通过WSL2和Docker快速部署DataEase的完整教程。从WSL2配置、Docker环境搭建到DataEase离线安装,逐步指导用户完成一站式部署,特别适合需要快速搭建数据分析平台的开发者。教程包含常见问题解决方案和性能优化技巧,帮助用户高效使用这款国产开源数据可视化工具。

weixin_42526166的博客 379

深度学习环境搭建以及DeepLabCut安装过程

文章目录 一、查询电脑硬件 安装GeForce驱动程序 二、环境搭建与软件安装 1.安装CUDA运算平台软件 2.安装cuDNN支持包 3.配置环境变量 三、 DeepLabCut环境配置 1.安装Anaconda 2.创建容器环境 3.激活容器环境 4.安装TensorFlow 5.验证TensorFlow是否安装成功 6...

m0_51136557的博客 3150

【自动化测试】Pytest框架 —— Pytest测试框架介绍

1、什么是单元测试框架,单元测试是指在软件开发当中,针对软件的最小单位(函数,方法)进行正确性的检查测试。2、单元测试框架主要做什么,测试发现:从多个文件里面去找到我们需要的测试用例。测试执行:按照一定的顺序和规则去执行测试用例,并生成结果。

2301_77709772的博客 4987

基于 PID 算法的 STM32 步进电机高精度位置控制系统设计与实现(工业自动化应用)

硬件层面:选用 STM32F103C8T6+A4988 + 欧姆龙编码器的组合,兼顾工业可靠性与成本,接线需注意强弱电分离和信号抗干扰;软件层面:核心为位置式 PID 闭环控制,Mermaid 流程图清晰展现 “采集 - 运算 - 驱动” 的闭环逻辑,代码模块化易移植;性能层面:无负载定位误差≤±1 脉冲,带载误差≤±3 脉冲,满足工业自动化高精度位置控制需求。

weixin_42300449的博客 191

Pytest自动化测试框架+Allure报告

Allure Framework 是一款轻量级、多语言支持的测试报告工具,能够生成清晰直观的测试报告,帮助开发人员快速定位问题,管理者掌握测试全局。它支持高度自定义,满足不同团队的协作需求。部署使用包括安装 allure-pytest 插件和 allure 工具,并通过环境变量配置。本文讲解pytest+allure如何联合使用

loyal_Chun的博客 2065

12、多端神经形态晶体管:原理、应用与算法探索

本文综述了多端神经形态晶体管的原理、应用与算法探索。从神经元MOS晶体管的发展到基于电解质栅极晶体管(EGT)的新型器件设计,系统阐述了其在低电压、多功能逻辑运算和突触行为模拟方面的优势。重点介绍了其在化学生物传感器(如多巴胺和pH检测)中的高灵敏度应用,以及在树突整合、时空总和、动态逻辑和神经元算术等树突算法中的实现。文章还总结了该类器件在神经形态计算、智能传感等领域的广阔前景,并分析了当前面临的材料工艺、理论建模与系统集成挑战,展望了未来发展方向。

delta的博客 141

第95章 安全工程师:Shell 脚本实现安全扫描、漏洞检测、日志审计

随着网络安全威胁日益复杂,传统的手动安全管理已无法满足现代企业的安全需求。Shell 脚本为安全工程师提供了强大的自动化能力,能够实现 7×24 小时的安全监控、快速漏洞扫描、智能日志分析和实时威胁响应。本章将系统介绍如何使用 Shell 脚本构建完整的安全防护体系,从基线检查到实时监控,帮助你打造自动化的安全运维能力。

猪猪侠 84

【接口自动化测试】pytest 框架

pytest 是一个非常流行且高效的 Python 测试框架,它提供了丰富的功能和灵活的用法,使得编写和运行测试用例变得简单而高效。

Edison's 小宇宙 2万+

*手把手教你学 Simulink——压缩机用永磁同步电机无位置传感器 I‑F 启动(Sensorless I/F Starting)控制仿真

dtdi^α​​zα​e^α​ω^θ^​=Ls​1​(−Rs​i^α​+usα​−zα​)=K⋅sign(i^α​−iα​)=zα​+Kpll​⋅(i^α​−iα​)同理 β=PLL(e^α​,e^β​)=∫ω^dt​。给定 Id​=Iset​, Iq​=f(θopen​)按设定 fstart​(t)Iq​=k⋅sin(θopen​)投影 → 恒幅 Is​=Id2​+Iq2​​。​ 将 Id​,Iq​→ Iα​,Iβ​→ SVPWM。Id​=Ialign​(弱对齐 → 防抖动)

amy_mhd的博客 37

自动化测试框架pytest系列之强大的fixture功能,为什么fixture强大?一文拆解它的功能参数。(三)

pytest测试框架强大的fixture为什么强大 ?一文介绍它的强大之处。

雨滴测试博客 1949

【SemiDrive源码分析】【X9芯片启动流程】11 - freertos_safetyos目录Cortex-R5 DIL2.bin 引导程序源代码分析

【SemiDrive源码分析】【X9芯片启动流程】11 - freertos_safetyos目录Cortex-R5 DIL2.bin 引导程序源代码分析

|~~~热爱生活、努力学习的小伙汁~~~| 2097

【保姆级教程】基于UNet++&MobileNetv2的语义分割模型从训练到RK3588部署:让边缘AI落地效率提升300%

通过SMP库一键构建encoder_name="mobilenet_v2", # 选择MobileNetv2作为骨干encoder_weights="imagenet", # 加载预训练权重加速收敛in_channels=3, # 输入图像通道数(RGB)classes=29, # Cityscapes数据集类别数activation=None # 输出无激活,便于后续损失计算本教程从“模型设计-训练-转换-边缘部署”全链路拆解了。

FJN110的博客 204

8款Pytest插件助力Python自动化测试

但是,使用pytest-check插件,测试永远不会失败,并且会提供一个有洞察力的报告,以帮助你理解所有失败的情况。在您的自动化测试过程中充分利用pytest插件的力量,有助于您构建健壮、可维护和高效的测试套件。使用覆盖率分析运行测试非常简单。在test_with_datafiles.py文件中,测试脚本的结构大体上与前面的部分相同,重点是自动化一个简单的表单演示。虽然pytest本身提供了一套强大的断言功能,但pytest-check插件通过启用参数化测试并增强失败断言的报告,使其功能更加出色。

朱雀随云记的博客 1628

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

python自动化测试框架——unittest、pytest

由4部分组成(测试固件)、(测试用例)、(测试套件)、(测试执行):类名必须以Test开头(如TestMath),否则默认的测试发现机制(discover)可能无法识别。:方法名必须以test_开头(如test_add),否则不会被自动加载。:非测试方法(如辅助函数)不应以test_开头。以test_xx.py开头或xx_test.py结尾。

lrk__的博客 964

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

pytest自动化测试框架

本文介绍了Python自动化测试框架Pytest的基础知识,包括安装配置、测试运行、断言验证和参数化测试等核心功能。Pytest通过简单直观的语法和丰富扩展性,支持单元测试、集成测试等多种场景。其优势包括易用性、强大的断言库、参数化测试支持、插件扩展性以及跨平台兼容性。文章推荐Pytest作为提高Python项目测试效率和质量的有效工具,并提供了相关学习资源获取方式。

2301_78843735的博客 844

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

python 接口自动化测试常用的装饰器函数

虽然这不是直接的装饰器应用,但在pytest等框架中,使用@pytest.fixture定义的固定件(fixtures)可以作为测试函数的前置和后置操作。多的上下文信息。记录函数执行的时间,并在达到阈值时报警或记录日志。

hlsxjh的博客 1014

Pytest自动化测试框架

本文介绍了Pytest自动化测试框架的基础知识,包括安装、配置、运行、测试、断言和参数化等方面。Pytest框架简单易用,功能丰富,可以满足各种不同类型的测试需求。以下是该框架的一些优点:1、简单易用:Pytest采用了简洁而直观的语法,使得测试代码更加易读易懂。2、丰富的断言库:Pytest内置了大量的断言函数,同时也支持第三方断言库,可以进行更加全面的测试覆盖。3、参数化:使用Pytest的参数化功能,可以快速编写多组输入参数的测试用例,提高测试效率。

huace3852的博客 700
上一篇: 自动化测试框架pytest系列之强大的fixture功能,为什么fixture强大?一文拆解它的功能参数。(三)
下一篇: 自动化测试框架pytest系列之两个必备的配置文件(五)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值