pytest(二)框架实现一些前后置(固件,夹具)的处理,常用三种
为什么需要这些功能?
比如:web自动化执行用例前是否需要打开浏览器?执行用例后需要关闭浏览器?
示例代码:
import pytest
class Testcase:#这是每条测试用例执行前的初始化函数def setup(self):print("\n我是每条测试用例执行前的准备工作,比如:打开浏览器,加载页面等")#这是没条用例执行后的清理函数def teardown(self):print("\n我是每条测试用例执行后的清理工作,比如:关闭浏览器")#这是生活有用例执行前的初始化函数def setup_class(self):print("\n我是所有测试用例执行前的准备工作,比如:链接数据库,打开文件等")#这是所有用例执行后的清理工作def teardown_class(self):print("\n我是所有测试用例执行后的清理工作,比如:断开数据连接,关闭文件等")#测试用例1def test_case1(self):print("执行测试用例1")#测试用例2def test_case2(self):print("执行测试用例2")
if _name_=='_main_':pytest.main(["-vs"])
2.1 autose:是否自动执行
示例代码1(指定部分用例触发初始化、清理函数):
import pytest
# 添加此装饰器的函数可以实现初始化和清理工作
@pytest.fixture()
def fun():print("我是初始化工作")yieldprint("我是清理工作")
class TestCase:# 测试用例1def test_case(self):print("执行测试用例1")# 测试用例2:只有将初始化、清理函数作为参数传入用例,才会触发def test_case2(self, fun):print("执行测试用例2")
if __name__ == '__main__':pytest.main(["-sv"])
@注意:如果@pytest.fixture()装饰器内没有传递autouse参数,默认为False,只有传递了初始化方法的测试用例会触发初花清理方法,如示例代码中:测试用例1不会触发,测试用例2就会触发
示例代码2(全部符合规则的用例都会触发初始化清理方法)
import pytest#添加此装饰器的函数可以实现初始化和清理工作
@pytest.fixture(autouse=True)
def fun():print("我是初始化工作")yieldprint("我是清理工作")class TestCase:#测试用例1 def test_case1(self):print("执行测试用例1")#测试用例2def test_case(self):print("执行测试用例2")if __name__=='__main__':pytest.main(["-vs"])
2.2 scope:表示被@pytest.fixture标记的方法的作用域
·示例代码
import pytest"""
scope参数:表示被@pytest.fixture标记的方法的作用域function:函数(默认值),传递此参数或者不传则每条测试方法执行前都会触发初始化清理方法class:传递此参数则每个类执行前后都会触发一次初始化清理方法module:传递此参数则每个py模块执行前后悔触发一次初始化清理方法package:传递此参数则每个包执行前后会触发一次初始化清理方法"""
#添加此装饰器的函数可以实现初始化和清理工作
@pytest.fixture(autouse = True,scope="class")def fun():print("我是初始化工作")yieldprint("我是清理工作")class TestCase:#测试用例1def test_case1(self):print("执行测试用例1")#测试用例2def test_case2(self):print("执行测试用例2")
if __name__=='__main__':pytest.main(["-vs"])
2.3 params:参数化,支持:列表[],元组(),字典列表[{},{}],字典元组({},{})
·示例代码:
import pytest"""·装饰器内参数是params,注意带s·初始化、清理方法定义阶段要有一个实参必须为request·初始化、清理方法内结合params参数化返回的值固定写法为:request.param,注意不带s·params传递进去了几组测试数据,就会调用几次测试用例,并每次分发测试数据
"""
#添加此装饰器的函数可以实现初始化和清理工作
@pytest.fixture(params=[1,2,3])
def fun(request):print("我是初始化工作")
#固定写法:形参名字必须为request,而返回数据必须为request.paramyield request.paramprint("我是清理工作")class TestCase#测试用例1def test_case1(self)print("执行测试用例1")#测试用例2 初始化、清理方法内yiele或者return返回的结果会保存在初始化/清理方法名内,用例内可直接调用def test_case2(self,fun)print("执行测试用例2")print("测试数据:",fun)if __name__=='__main__':pytest.main(["-vs"])
注意:
·装饰器内参数是params,注意带s
·初始化、清理方法定义阶段要有一个实参必须为request
·初始化、清理方法内结合params参数化返回的值固定写法为:request.param,注意不带s
·params传递进去了几组测试数据,就会调用几次测试用例,并每次分发测试数据
2.4 ids :当使用params参数化时,给每一个值设置一个变量名,意义不大
·示例代码:
import pytest
"""
ids里面传递的别名必须和参数个数保持一致
在执行结果中可以看到打印的nodeid里面的参数已经替换成了别名
"""#添加此装饰器的函数可以实现初始化清理工作
@pytest.fixture(params=[1,2,3],ids=["data1","data2","data3"])
def fun(request):print("我是初始化工作")#固定写法:形参名字必须为request,而返回数据必须为request.paramyield request.paramprint("我是清理工作")class TestCase:#测试用例1def test_case(self):print("执行测试用例1")#测试用例2def test_case2(self,fun):print("执行测试用例2")print("测试数据",fun)if __name__=='__main__':pytest.main(["-vs"])
2.5 name :给被@pytest.fixture标记的方法取一个别名,意义不大
import pytest
"""
起别名后,用例可以用别名来引用原来的方法名
起别名后原来的名字则无法使用了,否则报错
"""#添加此装饰器的函数可以实现初始化和清理工作
@pytest.fixture(params=[1,2,3],name="aaa")
def fun(request):print("我是初始化工作")#固定写法:形参名字必须为request,而返回数据必须为request.paramyield request.paramprint("我是清理工作")class TestCase:#测试用例1def test_case1(self):print("执行测试用例1")#测试用例2def test_case2(self,aaa):print("执行测试用例2")print("测试数据",aaa)if __name__=='__main__':pytest.main(["-vs"])
三、通过conftest.py和pytest.fixture()结合使用实现全局的前置应用(比如:项目的全局登录,模块的全局处理等)
使用规则:
conftest.py文件是单独存放的一个家具配置文件,名称是不能更改的
用处:可以在不同的py文件中使用同一个fixture函数
原则上conftest.py需要喝运行的用例放到同一层,并且不需要做任何import 导入操作
注意:如果一个测试用例添加了两个测试夹具,后面的一个夹具会在前一个的内层执行
如:
class TestCase:#测试用例def test_case(self,fun1,fun2):print("执行测试用例")print("测试数据:",fun1)print("测试数据:",fun2)
相关文章:
pytest(二)框架实现一些前后置(固件,夹具)的处理,常用三种
为什么需要这些功能? 比如:web自动化执行用例前是否需要打开浏览器?执行用例后需要关闭浏览器? 示例代码: import pytest class Testcase:#这是每条测试用例执行前的初始化函数def setup(self):print("\n我是每…...
【计算机网络 - 自顶向下方法】计算机网络和因特网
目录 1. What is the Internet? 1.1 因特网的具体构成 1.2 因特网的功能 2. Network core 2.1 基本介绍 2.2 分组交换 2.2.1 序列化时延 2.2.2 排队延迟和丢包 2.2.3 分组交换的优缺点 2.3 电路交换 2.3.1 基本概念 2.3.2 电路交换网络中的复用 2.3.3 电路交换文件…...
【Java 基础篇】Java Condition 接口详解
Java 提供了一种更灵活和高级的线程协作机制,通过 Condition 接口的使用,你可以更精细地控制线程的等待和唤醒,实现更复杂的线程同步和通信。本文将详细介绍 Java 的 Condition 接口,包括它的基本概念、常见用法以及注意事项。 什…...
.360勒索病毒和.halo勒索病毒数据恢复|金蝶、用友、ERP等数据恢复
导言: 随着数字化时代的持续发展,网络安全威胁也变得前所未有地复杂和难以应对。在这个充满挑战的网络环境中,勒索病毒已经成为了一种极为危险和破坏性的威胁。最近引起广泛关注的是.360勒索病毒,一种可怕的恶意软件,…...
计算机毕业设计 基于SpringBoot餐厅点餐系统的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...
天空飞鸟 数据集
今天要介绍的数据集则是天空飞鸟 数据集: 数据集名称:天空飞鸟 数据集 数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):以文件包含图片…...
集成学习-树模型
可以分为三部分学习树模型: 基本树(包括 ID3、C4.5、CART).Random Forest、Adaboost、GBDTXgboost 和 LightGBM。基本树 选择特征的准则 ID3:信息增益max C4.5:信息增益比max CART:基尼指数min 优缺点 ID3 核心思想是奥卡姆剃刀(决策树小优于大) 缺点: ID3 没…...
代码随想录算法训练营第一天(C)| 704. 二分查找 27. 移除元素
文章目录 前言一、704. 二分查找二、27. 移除元素三、34. 在排序数组中查找元素的第一个和最后一个位置总结 前言 这次是C; 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素_愚者__的博客-CSDN博客 (java) 一、704. 二分查找 的优…...
重构优化第三方查询接口返回大数据量的分页问题
# 问题描述 用户线上查询其上网流量详单数据加载慢,且有时候数据没有响应全~ 1、经排除是调用第三方数据量达10w条响应会超时,数据没正常返回 2、现有线上缓存分页也是加载慢数据不能正常展示 3、第三方接口返回类似报文jsonj&#…...
Cento7 Docker安装Zabbix,定制自定义模板
1.先安装docker环境 yum -y install yum-utils device-mapper-persistent-data lvm2#导入docker安装库 yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo #按指定版本安装好docker yum install docker-ce-20.10.5 docker-ce-cli-20…...
网络防御--防火墙
拓扑 Cloud 1 作为电脑与ENSP的桥梁 防火墙配置 登录防火墙 配置IP地址及安全区域 添加地址对象 配置策略 1、内网可以访问服务器 结果 2、内网可以访问公网 结果 配置NAT策略 结果...
淘宝商品详情数据采集
淘宝商品详情数据采集的方法如下: 确定采集目标:明确要采集的商品信息,如商品标题、价格、销量、评论、图片等。选择采集工具:可以选择Scrapy框架、Java的WebMagic框架等。编写爬虫程序:进入目标文件夹,输…...
mac安装virtualenv和virtualenvwrapper
1.安装(推荐用sudo安装,直接pip3安装会有坑) sudo pip3 install virtualenv sudo pip3 install virtualenvwrapper 2.查看python virtualenvwrapper.sh 位置 # 查看python默认解释器 which python3 # 查看virtualenvwrapper.sh which virtualenvwrapper.sh 3.打…...
利用PCA科学确定各个指标的权重系数
背景参考: 1、提取主成分 对样本进行PCA分析,查看不同变量贡献率,确定主要的指标。我们可以通过下列代码获取需要的所有数据: import numpy as np from sklearn.decomposition import PCA# 创建一个数据 np.random.seed(0) data = np.random.random((100,5)) y = np.ra…...
代码随想录 -- day55 --392.判断子序列 、115.不同的子序列
392.判断子序列 dp[i][j] 表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列的长度为dp[i][j]。 if (s[i - 1] t[j - 1]) t中找到了一个字符在s中也出现了if (s[i - 1] ! t[j - 1]) 相当于t要删除元素,继续匹配 if (s…...
mysql5升级到mysql8的血泪教训
核心问题1:下载中断这个包就会有问题,下载中断的话一定要重新下载 核心问题2:低版本向高版本迁移 无法整库备份 只能单库备份 1.数据备份 我这里备份了全库,所以后面数据没恢复回来,把DDL语句拆出来了单独建表 mysqldump -u root -p --al…...
Unity 开发人员转CGE(castle Game engine)城堡游戏引擎指导手册
Unity 开发人员的城堡游戏引擎概述 一、简介2. Unity相当于什么GameObject?3. 如何设计一个由多种资产、生物等组成的关卡?4. 在哪里放置特定角色的代码(例如生物、物品)?Unity 中“向 GameObject 添加 MonoBehaviour”…...
卷运维不如卷网络安全
最近发现很多从事运维的选择了辞职,重新规划自己的职业发展方向。运维工程师这个岗位在IT行业里面确实是处于最底层的,不管什么环节出现问题,基本都是运维背锅。背锅也就罢了,薪资水平也比不上别的岗位。 一般运维的薪资水平大多数…...
Digger PRO - Voxel enhanced terrains
资源链接在文末 Digger PRO 是一个简单但强大的工具,可以直接从 Unity 编辑器或游戏中创建天然洞穴和悬岩。会让你感觉自己手中握有一个体素地形,且毫无瑕疵。它实际上保持着最新、最快且可靠的 Unity 地形系统,并在你需要的地方无缝创建洞穴/悬岩峭壁网格。Digger 内…...
文字处理工具 word 2019 mac中文版改进功能
Microsoft Word 2019 是微软公司的文字处理软件,是 office 2019 套件中的一部分。它是一个功能强大、易于使用的工具,可以帮助用户创建各种类型的文档,包括信函、简历、报告、手册等。 Word 2019 提供了许多功能和改进,包括更好的…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
