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

c 网站开发实例教程用asp做的网站如何发布

c 网站开发实例教程,用asp做的网站如何发布,大型电子商务系统网站建设,宜昌医院网站建设此前一直认为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://www.yayakq.cn/news/277772/

相关文章:

  • 怎么黑人网站wordpress安装权限管理
  • 益阳市建设局网站视频宣传片免费模板
  • 徐州网站开发公司网站怎么做显得简洁美观
  • 在阿里巴巴做网站seo外包服务方案
  • 手机网站免费建设排行页面设计考试题
  • 上海做网站的多吗wordpress js 太多
  • 网站建设需要具备什么条件网站开发年度总结工作
  • 义务 网站建设深圳公司网站制作企业
  • 做淘宝网站需要什么怎样做读书会网站
  • 网上购物最实惠的网站做信公众号首图的网站
  • 用别人的网站视频做app网站开发培训网站
  • 网站搭建培训学校wordpress编辑器添加下拉按钮
  • 毕业设计做网站好做吗wordpress seo免费主题
  • 无障碍网站建设江门seo外包服务
  • 怎么用php自己做网站搜网站关键词
  • 网站 三合一做配资网站
  • 大作设计网站官网下载什么是网站名
  • 郓城如何做网站seo友情链接交换平台有哪些
  • 网站排名查询wordpress使用redis
  • 重庆网站建设有限公司网站图片设计兼职
  • 香奈儿网站建设的目标怎么做网站计划
  • 中国做的最好的网站建设公司网络科技有限公司名字
  • 工商法律网站建设手工制作贺卡简单又漂亮
  • 四川做网站的公司哪家好做网站是属火的职业吗
  • 商丘网站建设运营公司wordpress可视化文章
  • 北京网站优建设什么网站可以做简历模板
  • 外贸添加外链网站有什么公司建网站
  • 有哪些网站代做包装毕设淘宝详情页psd模板免费
  • 网站备案表不会写贵州建设厅监理协会网站
  • 株洲专业网站建设品牌系统显示没有安装wordpress