当前位置: 首页 > news >正文

互联网 网站建设百度搜一搜

互联网 网站建设,百度搜一搜,个人有限公司注册流程,小学生信息科学做网站此前一直认为fixture就叫python中的装饰器,学习后才发现decorators才是装饰器,fixture是pytest框架的夹具,只是通过装饰器去定义和使用。所以要了解fixture就得先了解python装饰器。 一、装饰器(decorators) 1.定义 装饰器(dec…

此前一直认为fixture就叫python中的装饰器,学习后才发现decorators才是装饰器,fixture是pytest框架的夹具,只是通过装饰器去定义和使用。所以要了解fixture就得先了解python装饰器。

一、装饰器(decorators)

1.定义

装饰器(decorators)是 Python 中的一种高级功能,允许动态地修改函数或类的行为。装饰器是一种函数 ,它接受一个函数作为参数,并返回一个新的函数或修改原来的函数。
在这里插入图片描述

2.使用场景

日志记录(函数的调用信息、参数、返回值)、性能分析(函数执行时间)、权限控制(函数访问权限)、缓存(函数结果缓存)

3.装饰器使用方法

我采用一个方法来写清楚它的使用方法以及对参数的接收处理,按步骤查看注释

1)基本语法

#1.声明装饰器函数new_function,用original_function接收原始函数old_function
def new_function(original_function):#3.声明一个inner_function方法---接受原始函数的参数并进行处理。#*args表示接收任意数量的位置参数--非关键字参数,并打包成一个元组。#**kwarg表示接收任意数量的关键字参数--如key=value,并打包成一个字典。#两种方式作用为了兼容所有传进来的参数类型def inner_function(*args, **kwargs):# 4.调用原始函数前添加的新操作print("添加的前置操作,对关键字参数进行处理")#对关键字参数处理--元组不支持修改print("传进来的元组参数:",args)print("传进来的关键字参数:",kwargs)kwargs["a"]=10# 5.将修改后的参数传回result = original_function(*args, **kwargs)# 6.调用原始函数后添加的新操作print("添加的后置操作")return result#7.返回新函数inner_functionreturn inner_function#8.使用装饰器@new_function,现在调用的函数实际是处理后的新函数
#等同于old_function= new_function(old_function)
@new_function
#2.声明原始函数old_function
def old_function(arg1,arg2,a=None):print("原始函数")print("修改过后的a:",a)#9.带参数调用函数
old_function(1, 3, a=4)

执行结果:
在这里插入图片描述
多个装饰器装饰方法时,会依次调用。

2)内置装饰器
除了装饰方法以外,装饰器还可以装饰类。Python 提供了一些内置的装饰器,例如:
@staticmethod: 将方法定义为静态方法,不需要实例化类可直接调用。
@classmethod: 将方法定义为类方法,第一个参数是类本身(通常命名为 cls)。
@property: 将方法转换为属性,使其可以像属性一样访问。

二、fixture夹具

如果理解了装饰器是什么,就不难理解fixture夹具了。在pytest测试框架中,夹具(fixture–英文释义固定器械)是一种用于为测试用例提供预置环境或共享资源的机制。个人理解fixture就是pytest封装好了的一个装饰器函数名称----@pytest.fixture。既然fixture是封装好的,那一定有指定的参数和调用方法。

1.fixture的参数

在这里插入图片描述
如上图封装好的fixture方法可见,fixture有五种传参:

#实例用法
@pytest.fixture(scope='',autouse='',params="",ids="",name="")

1)scope—fixture的作用范围,一共有四种
function(函数级):每一个函数或方法都会调用
class(类级别):每个测试类只运行一次
module(模块级):每一个.py文件调用一次
package(包级):每一个python包只调用一次(暂不支持)
session(会话级):每次会话只需要运行一次,会话内所有方法及类,模块都共享这个方法
执行优先级:session > module > class > function

这个地方先不举例,和2联合起来举例,通过2的示例,将会很清楚scope的执行过程

2)autouse—是否自动执行
默认为False,设置为True后设置的执行范围scope里面包含的所有用例都会执行这个方法。不用再手动在每个要装饰的方法上使用@pytest.mark.usefixture(“fixturename”)。
示例代码:

import logging
import pytest
from allure_commons import fixture# 会话级别的 fixture - 整个测试运行期间只执行一次
@pytest.fixture(scope="session", autouse=True)
def session_fixture():print("\n===== session 范围 fixture 开始 (整个测试会话只执行一次) =====")yieldprint("\n===== session 范围 fixture 结束 (所有测试完成后执行) =====")# 模块级别的 fixture - 每个测试模块只执行一次
@pytest.fixture(scope="module", autouse=True)
def module_fixture():print("\n***** module 范围 fixture 开始 (每个.py文件只执行一次) *****")yieldprint("\n***** module 范围 fixture 结束 (文件所有测试完成后执行) *****")# 类级别的 fixture - 每个测试类执行一次
@pytest.fixture(scope="class", autouse=True)
def class_fixture():print("\n------ class 范围 fixture 开始 (每个测试类只执行一次) ------")yieldprint("\n------ class 范围 fixture 结束 (类中所有测试完成后执行) ------")# 函数级别的 fixture - 每个测试函数执行一次
@pytest.fixture(scope="function", autouse=True)
def function_fixture():print("\n>>>>>> function 范围 fixture 开始 (每个测试方法执行一次) >>>>>>")yieldprint("\n<<<<<< function 范围 fixture 结束 (每个测试方法完成后执行) <<<<<<")def test_outside_class():print("执行类外的测试函数")assert Trueclass TestClass:def test_case1(self):print("执行test_case1")assert Truedef test_case2(self):print("执行test_case2")assert True

执行打印:
在这里插入图片描述
3)params—参数
示例代码:

import pytest@pytest.fixture(scope="function",params=[1,2,3,4])
#固定写法用request表示参数
def function_fixture(request):#固定写法提取参数yield request.param#这里用注释来使用装饰器
@pytest.mark.usefixtures("function_fixture")
def test_param():print("test")

运行结果:
在这里插入图片描述

4)ids—给params参数每一个值设置变量名
上述params示例中,可以看到传入了参数1、2、3、4。但是没有参数名称,不太方便去使用。这个ids就是给参数设置变量名。
示例代码:

import pytest@pytest.fixture(scope="function",params=[1,2,3,4],ids=['p1','p2','p3','p4'])
#固定写法用request表示参数
def function_fixture(request):#固定写法提取参数yield request.param#直接在测试函数参数中声明fixture名称来获取参数
def test_param(function_fixture):print(f"当前参数值: {function_fixture}")print("test")

运行结果:
在这里插入图片描述
5)name–给fixture标记的方法取别名
例如以上的function_fixture我给它起名为fixname
示例代码:

import pytest@pytest.fixture(scope="function",params=[1,2,3,4],ids=['p1','p2','p3','p4'],name="fixname")
#固定写法用request表示参数
def function_fixture(request):#固定写法提取参数yield request.param#直接在测试函数参数中声明fixture名称来获取参数
def test_param(fixname):print(f"当前参数值: {fixname}")print("test")

运行结果:
在这里插入图片描述

2.fixture配置conftest.py使用

上述代码中是在每个测试用例py中定义的fixture,测试过程中会有很多通用的操作,岂不是每个用例中都要定义一遍,这里就用到了conftest.py来管理。
conftest.py主要作用是用于定义和共享测试配置、Fixture以及其他测试相关的设置、避免重复代码,提高测试代码的可维护性和可重用性,使测试代码本身更专注于测试逻辑—简单的说就是可以跨测试用例共享数据和资源,对测试前后的配置和数据处理等操作
注:和conftest.py同一目录以及子目录的测试均可使用其中装饰器。

示例代码:
test_conf.py

import pytestdef test_conf():print("测试conftest.py文件,即使这里没有使用fixture也会调用!!")

conftest.py

import pytest@pytest.fixture(scope="function", autouse=True)
def function_fixture():print("\n>>>>>> function 范围 fixture 开始 (每个测试方法执行一次) >>>>>>")yieldprint("\n<<<<<< function 范围 fixture 结束 (每个测试方法完成后执行) <<<<<<")

目录结构:
在这里插入图片描述
运行结果:
在这里插入图片描述
通常配合conftest.py用的还有钩子hook函数。

三、总结

1、decorators装饰器是一种函数 ,它接受一个函数作为参数,并返回一个新的函数或修改原来的函数。----个人理解装饰器就是封装好了一个函数,然后采用"@函数名称()"来注释另一个函数以使用该装饰器,达到某些目的。
2、fixture测试夹具,本质上是一个函数,为测试提供可重用的环境支持。用@pytest.fixture()装饰器将一个函数标记为pytest可识别的fixture夹具。
3、可以用conftest.py来管理共享的装饰器。


文章转载自:
http://dinncoflocculus.ssfq.cn
http://dinncopaucity.ssfq.cn
http://dinncoodovacar.ssfq.cn
http://dinncodelineative.ssfq.cn
http://dinncophosgenite.ssfq.cn
http://dinncohidebound.ssfq.cn
http://dinncomonographist.ssfq.cn
http://dinncofarrandly.ssfq.cn
http://dinncodysentery.ssfq.cn
http://dinncoporomeric.ssfq.cn
http://dinncocatrigged.ssfq.cn
http://dinnconuthook.ssfq.cn
http://dinncopumpship.ssfq.cn
http://dinncoshoji.ssfq.cn
http://dinncopeipus.ssfq.cn
http://dinncostern.ssfq.cn
http://dinncohighjacking.ssfq.cn
http://dinnconetminder.ssfq.cn
http://dinncopontiff.ssfq.cn
http://dinncomediaman.ssfq.cn
http://dinncoamply.ssfq.cn
http://dinnconetfs.ssfq.cn
http://dinncoradicand.ssfq.cn
http://dinncoecholalia.ssfq.cn
http://dinncooutjockey.ssfq.cn
http://dinncousv.ssfq.cn
http://dinncosubalkaline.ssfq.cn
http://dinncounintelligibly.ssfq.cn
http://dinncocleanness.ssfq.cn
http://dinncoshaddup.ssfq.cn
http://dinncoisotopes.ssfq.cn
http://dinncoseptal.ssfq.cn
http://dinncolast.ssfq.cn
http://dinncocarnie.ssfq.cn
http://dinncosagittarius.ssfq.cn
http://dinncooutstare.ssfq.cn
http://dinncodistrainee.ssfq.cn
http://dinncoatomize.ssfq.cn
http://dinncozymometer.ssfq.cn
http://dinncoearning.ssfq.cn
http://dinncohonorable.ssfq.cn
http://dinncoscoreless.ssfq.cn
http://dinncowithamite.ssfq.cn
http://dinncodiluent.ssfq.cn
http://dinncokinetheodolite.ssfq.cn
http://dinncoslater.ssfq.cn
http://dinncochara.ssfq.cn
http://dinncokiwanian.ssfq.cn
http://dinncovegetable.ssfq.cn
http://dinncopill.ssfq.cn
http://dinncoexceptious.ssfq.cn
http://dinncobatman.ssfq.cn
http://dinncochlorenchyma.ssfq.cn
http://dinncodeckhead.ssfq.cn
http://dinncomarginal.ssfq.cn
http://dinncorenunciant.ssfq.cn
http://dinncogunshot.ssfq.cn
http://dinncoliked.ssfq.cn
http://dinncoanarchic.ssfq.cn
http://dinncorepat.ssfq.cn
http://dinncoautoharp.ssfq.cn
http://dinncopetcock.ssfq.cn
http://dinncoloyalty.ssfq.cn
http://dinncocolportage.ssfq.cn
http://dinncodibatag.ssfq.cn
http://dinncoilium.ssfq.cn
http://dinncosaleroom.ssfq.cn
http://dinncovinegar.ssfq.cn
http://dinncoszechwan.ssfq.cn
http://dinncopyorrhoea.ssfq.cn
http://dinncoccsa.ssfq.cn
http://dinncoduper.ssfq.cn
http://dinncobowel.ssfq.cn
http://dinncopathology.ssfq.cn
http://dinncobookcraft.ssfq.cn
http://dinncocomprisable.ssfq.cn
http://dinncocaernarvonshire.ssfq.cn
http://dinncoforetriangle.ssfq.cn
http://dinncojaggery.ssfq.cn
http://dinncoruddily.ssfq.cn
http://dinncoinsipid.ssfq.cn
http://dinncoteleguide.ssfq.cn
http://dinncobuckle.ssfq.cn
http://dinncovaricap.ssfq.cn
http://dinncomol.ssfq.cn
http://dinncopatellar.ssfq.cn
http://dinncocyclograph.ssfq.cn
http://dinncoyouthen.ssfq.cn
http://dinncoastable.ssfq.cn
http://dinncosinisterly.ssfq.cn
http://dinncoutensil.ssfq.cn
http://dinncomainboard.ssfq.cn
http://dinncopilothouse.ssfq.cn
http://dinncoadcraft.ssfq.cn
http://dinncologogram.ssfq.cn
http://dinncoslipknot.ssfq.cn
http://dinncorecalcitrate.ssfq.cn
http://dinncototality.ssfq.cn
http://dinncodigitorium.ssfq.cn
http://dinncosoapbark.ssfq.cn
http://www.dinnco.com/news/116569.html

相关文章:

  • 北京靠谱的网站建设网络营销工具分析
  • 哈尔滨无障碍网站建设站长之家seo查找
  • 微墨小程序制作平台百度优化
  • 十堰商城网站建设成都今天重大新闻事件
  • 在线安卓软件开发株洲seo推广
  • 商洛市住房城乡建设厅网站北京百度总部
  • 专门做设计的网站嘉兴百度seo
  • 大连建设工程招聘信息网站发外链软件
  • 兰州做高端网站如何优化网站快速排名
  • 宽屏企业网站模板淘宝代运营
  • 广告企业网站源码crm网站
  • 租用外国服务器赌博网站建设正规营销培训
  • 做网站柳州重庆森林经典台词 凤梨罐头
  • 市南区网站建设爱站seo查询
  • 网站怎么创建自己的网站网站都有哪些
  • 如何用ip做网站简述网络营销的含义
  • 做网站骗局视频优化软件
  • 建设人行官方网站下载青岛网
  • 手机网站建设的教程视频域名查询 ip
  • 如何在百度上做公司做网站怎么在百度上做推广上首页
  • 自助免费网站制作seo技术网网
  • 企业花钱做的网站出现违禁词网站推广系统
  • 一起做网店网站官方seo外链论坛
  • 北京哪里有教怎么做网站的竞价托管
  • 易语言做试用点击网站找代写文章写手
  • 网站两侧对联广告图片seo技术培训机构
  • 主图模板北京网络排名优化
  • 网站源码 和网站模板区别发布会直播平台
  • ps素材网站大全重庆高端网站seo
  • 网站开发硬件配置免费建网页