热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pytest之通过@pytest.fixture()来实现部分用例前后置

一、pytest.fixture()的5个参数含义pytest.fixture(scope,params,autouse,ids,name)scope

一、@pytest.fixture()的5个参数含义

@pytest.fixture(scope="", params="", autouse="", ids="", name="")

  1. scope:表示被@pytest.fixture()方法标记的作用域。functions(默认)、class、moudle、package/session
  2. params:参数化(支持,列表,元组,字典列表[{},{},{}],字典元组({},{},{}) )
  3. autouse=True:自动执行,默认False
  4. ids:参数化时,给每一个值设置一个变量名,意义不大
  5. name:给@pytest.fixture()标记的方法取一个别名

二、初级用法-前后置

步骤一:定义fixture函数(函数名不固定);
步骤二:将函数名作为参数写入用例方法;
yield作用:带有yield的函数是一个迭代器,函数返回某个值时,会停留在某个位置,返回函数值后,会在前面停留的位置继续执行,直到程序结束

import pytest@pytest.fixture(scope="function")
def my_fixture():`在这里插入代码片`print("\n这是用例前置")yieldprint("\n这是用例后置")class TestDs(object):def test_01(self):print("测试01")def test_fixture(self, my_fixture):print("测试fixture前后置")

运行结果:

ui-testcaes/testcsae/test_ds.py::TestDs::test_01 测试01
PASSED
ui-testcaes/testcsae/test_ds.py::TestDs::test_fixture
这是用例前置
测试fixture前后置
PASSED
这是用例后置------------------------------------------- generated html file: file:///Users/dongshuai/PycharmProjects/pytest/ui-testcaes/output/report/report.html -------------------------------------------
======================================================================================= 2 passed in 0.02s =======================================================================================

二、前后置-autouse=Ture

autouse=True:自动执行,默认False,开启为True后,将不需要主动调用也能使用
比setup 和 teardown更好用,更灵活

import pytest@pytest.fixture(scope="function", autouse=True)
def my_fixture():print("\n这是用例前置")yieldprint("\n这是用例后置")class TestDs(object):def test_01(self):print("测试01")def test_fixture(self):print("测试fixture前后置")

执行结果:

ui-testcaes/testcsae/test_ds.py::TestDs::test_01
这是用例前置
测试01
PASSED
这是用例后置ui-testcaes/testcsae/test_ds.py::TestDs::test_fixture
这是用例前置
测试fixture前后置
PASSED
这是用例后置------------------------------------------- generated html file: file:///Users/dongshuai/PycharmProjects/pytest/ui-testcaes/output/report/report.html -------------------------------------------
======================================================================================= 2 passed in 0.02s =======================================================================================

三、修改scope=“class”,在类的前后置

(module、package/session 原理同)

import pytest@pytest.fixture(scope="class", autouse=True)
def my_fixture():print("\n这是用例前置")yieldprint("\n这是用例后置")class TestDs(object):def test_01(self):print("测试01")def test_fixture(self):print("测试fixture前后置")

执行结果:

ui-testcaes/testcsae/test_ds.py::TestDs::test_01
这是用例前置
测试01
PASSED
ui-testcaes/testcsae/test_ds.py::TestDs::test_fixture 测试fixture前后置
PASSED
这是用例后置------------------------------------------- generated html file: file:///Users/dongshuai/PycharmProjects/pytest/ui-testcaes/output/report/report.html -------------------------------------------
======================================================================================= 2 passed in 0.03s =======================================================================================
(base) dongshuai@dongshuaideMacBook-Air pytest %

四、参数params的使用

params:参数化(支持,列表,元组,字典列表[{},{},{}],字典元组({},{},{}) )
**固定写法:**原理:params将参数遍历依次传给request,然后再传入添加该fixture的用例函数
该写法是固定的

import pytest@pytest.fixture(scope="class", params=['苹果', '香蕉', '牛奶']) # 参数名,有s
def my_fixture(request): # 固定写法return request.param # 属性,没有sclass TestDs(object):def test_01(self):print("测试01")def test_fixture(self, my_fixture):print("测试fixture前后置")print('-------->' + my_fixture)

执行结果:

ui-testcaes/testcsae/test_ds.py::TestDs::test_01 测试01
PASSED
ui-testcaes/testcsae/test_ds.py::TestDs::test_fixture[\u82f9\u679c] 测试fixture前后置
-------->苹果
PASSED
ui-testcaes/testcsae/test_ds.py::TestDs::test_fixture[\u9999\u8549] 测试fixture前后置
-------->香蕉
PASSED
ui-testcaes/testcsae/test_ds.py::TestDs::test_fixture[\u725b\u5976] 测试fixture前后置
-------->牛奶
PASSED------------------------------------------- generated html file: file:///Users/dongshuai/PycharmProjects/pytest/ui-testcaes/output/report/report.html -------------------------------------------
======================================================================================= 4 passed in 0.02s =======================================================================================
(base) dongshuai@dongshuaideMacBook-Air pytest %

五、使用ids给每个参数设置变量

ids:参数化时,给每一个值设置一个变量名,意义不大

import pytest@pytest.fixture(scope="class", params=['苹果', '香蕉', '牛奶'], ids=['apple', 'banana', 'milk'])
def my_fixture(request): # 固定写法print("\n前置")yield request.paramprint('\n后置')# return request.paramclass TestDs(object):def test_01(self):print("测试01")def test_fixture(self, my_fixture):print("测试fixture前后置")print('-------->' + my_fixture)

执行结果:可以看见原来的中文unicode编码,变为了ids定义的变量名
在这里插入图片描述

六、name-给标记的方法起个别名(意义不大)

起别名后,本身的方法名不能使用
在这里插入图片描述

七、实际工作场景中如何使用

通过conftest.py 和 @pytest.fixture() 结合使用,实现全局的前置应用(比如:项目的全局登录,模块的全局处理)

  1. conftest.py 文件是单独存放的一个夹具配置文件,名称是不能更改。
  2. 作用:可以在不同的py文件中使用同一个fixture函数
  3. 原则上conftest.py 和需要运行的用例放到同一层,并且不需要做任何import导入操作
    在这里插入图片描述
    在这里插入图片描述
    输出:

ui-testcaes/testcsae/user/test_ds.py::TestDs::test_02[\u661f\u661f]
全局--前置user--前置
测试02
PASSED
user--后置全局--后置------------------------------------------- generated html file: file:///Users/dongshuai/PycharmProjects/pytest/ui-testcaes/output/report/report.html -------------------------------------------
======================================================================================= 5 passed in 0.03s =======================================================================================

总结:

  1. setup/teardown,setup_clas/teardown_class 它是作用于所有用例或者所有类
  2. @pytest.fixture() 它的作用是既可以部分也可以全部前后置
  3. conftest.py 和 @pytest.fixtrue()适合使用,作用于全局的前后置

推荐阅读
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文介绍了Python对Excel文件的读取方法,包括模块的安装和使用。通过安装xlrd、xlwt、xlutils、pyExcelerator等模块,可以实现对Excel文件的读取和处理。具体的读取方法包括打开excel文件、抓取所有sheet的名称、定位到指定的表单等。本文提供了两种定位表单的方式,并给出了相应的代码示例。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
  • python限制递归次数(python最大公约数递归)
    本文目录一览:1、python为什么要进行递归限制 ... [详细]
  • Pylance有哪些特性
    这篇文章给大家分享的是有关Pylance有哪些特性的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Pylance安装和其他VSC ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
author-avatar
越野之族_205
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有