pytest数据驱动

文章目录
- 一、数据驱动概念
- 二、数据驱动yaml
- 1、yaml的基本语法:
- 2、yaml支持的数据格式:
- 3、安装
- 4、使用
- 5、读取方法
- a、目录结构
- b、yaml文件
- c、测试方法
- d、测试用例
- e、测试结果
- 三、数据驱动excel
- 1、安装导入
- 2、操作
- 3、读取方法
- a、目录结构
- b、excel文件
- c、测试方法
- d、测试用例
- e、测试结果
- 四、数据驱动csv
- 1、读取数据
- 2、方法
- a、目录结构
- b、csv文件
- c、测试方法
- d、测试用例
- e、测试结果
- 五、数据驱动json
- 1、json格式:
- 2、读取json文件
- a、目录结构
- b、json文件
- c、测试方法
- d、测试用例
- e、测试结果
一、数据驱动概念
数据驱动就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。简单来说,就是参数化的应用。数据量小的测试用例可以使用代码的参数化来实现数据驱动,数据量大的情况下建议大家使用一种结构化的文件(例如yaml,json,csv、excel等)来对数据进行存储,然后在测试用例中读取这些数据。
二、数据驱动yaml
yaml是一种数据序列化格式,用于人类的可读性和与脚本语言的交互,一种被认为超越XML、json的配置文件。
1、yaml的基本语法:
大小写敏感
使用缩进标识层级关系
缩进时不允许使用tab键,只允许使用空格
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
#表示注释,从这个字符一直到行尾,都会被解析器忽略
2、yaml支持的数据格式:
对象(字典):键值对的集合,用冒号“:”表示
数组(列表):一组按次序排列的值,前加“-”
纯量:单个的、不可再分的值
字符串
布尔值
整数
浮点数
Null
时间
日期
3、安装
pip install pyyaml
4、使用
datas:测试数据
func:测试方法
testcases:测试用例
5、读取方法
yaml.safe_load(file)
a、目录结构

b、yaml文件
# [[1,1,2],[3,6,9],[100,200,300]]
-- 1- 1- 3
-- 3- 6- 9
-- 100- 200- 300
c、测试方法
#被测方法,相加功能
def my_add3(x, y):result = x + yreturn result
d、测试用例
文件或者目录不可以创建为yaml关键字
import pytest
from testing_data.func.operation_yaml import my_add#用到yaml文件中的数据时,就需要读取出来# pip install pyyaml
#todo 文件或者目录不可以创建为yaml关键字
import yamldef get_data():#如果yaml文件有中文,必须加上excoding='utf-8'with open('../datas/data.yaml',encoding='utf-8') as f:data=yaml.safe_load(f)return dataclass TestWithYAML:@pytest.mark.parametrize('x,y,expected',get_data())def test_add(self, x, y, expected):assert my_add(int(x), int(y)) == int(expected)
e、测试结果

三、数据驱动excel
1、安装导入
pip install openpyxl
import openpyxl
2、操作
读取工作簿
读取工作表
读取单元格
3、读取方法
book=openpyxl.load_workbook(‘文件路径’) :读取工作簿
sheet=book.active :读取工作表
cells=sheet[‘A1’:‘C3’]
cell.value :读取数据
a、目录结构

b、excel文件

c、测试方法
#被测方法,相加功能
def my_add1(x, y):result = x + yreturn result
d、测试用例
import openpyxl
import pytest
from testing_data.func.operation_excel import my_add1#用到excel文件中的数据时,就需要读取出来def test_get_excel():"""解析Excel数据:return: [[1,1,2],[3,6,9],[100,200,300]]"""#获取工作簿book=openpyxl.load_workbook('../datas/data.xlsx')#获取工作表sheet1sheet=book.active#读取数据cells=sheet['A1':'C3']print(cells)values=[]for row in cells:data=[]for cell in row:data.append(cell.value)values.append(data)print(values)return valuesclass TestWithEXCEL:@pytest.mark.parametrize('x,y,expected',test_get_excel(),ids=[1,2,3])def test_add1(self, x, y, expected):assert my_add1(int(x), int(y)) == int(expected)
e、测试结果

四、数据驱动csv
格式:逗号分隔值
以纯文本形式存储数字和文本
文件由任意数目的记录组成
每行记录由多个字段组成
1、读取数据
内置模块:import csv
2、方法
raw=csv.reader(iterable)
参数:iterable是一个可迭代对象;返回迭代器,每次迭代会返回一行数据
csv文件

读取csv文件
import csvdef get_csv():with open('demo.csv','r',encoding='utf-8') as file:raw=csv.reader(file)for line in raw:print(line)if __name__ == '__main__':get_csv()
读取结果:
['富强', '明主', '文明', '和谐']
['自由', '平等', '公正', '法制']
['爱国', '诚信', '敬业', '友善']
a、目录结构

b、csv文件

c、测试方法
#被测方法,相加功能
def my_add2(x, y):result = x + yreturn result
d、测试用例
import csvimport pytest
from testing_data.func.operation_csv import my_add2#用到csv文件中的数据时,就需要读取出来
def get_csv():"""读取csv文件中的数据:return: 格式:[[1,2,3],[3,6,9]]"""with open('../datas/data.csv','r',encoding='utf-8') as file:raw=csv.reader(file)data=[]for line in raw:data.append(line)print(data)return dataclass TestWithCSV:@pytest.mark.parametrize('x,y,expected',get_csv())def test_add2(self, x, y, expected):assert my_add2(int(x), int(y)) == int(expected)
e、测试结果

五、数据驱动json
1、json格式:
是一种轻量级的数据交换格式
以键值对的格式存储数据,多个键值用逗号分割
支持嵌套
支持数组(列表)
{"name:": "study ","detail": {"course": "python","city": "北京"},"remark": [1000,666,888]
}
2、读取json文件
内置库:
import json
内置方法
json.loads()
json.dumps()
import jsondef get_json():with open('demo.json','r',encoding='utf-8') as file:data=json.loads(file.read())print(data,type(data))data1=json.dumps(data, ensure_ascii=False)print(data1,type(data1))if __name__ == '__main__':get_json()
读取结果
{'name:': 'study ', 'detail': {'course': 'python', 'city': '北京'}, 'remark': [1000, 666, 888]} <class 'dict'>
{"name:": "study ", "detail": {"course": "python", "city": "北京"}, "remark": [1000, 666, 888]} <class 'str'>
a、目录结构

b、json文件
{"case1": [1, 1, 2],"case2": [3, 6, 9],"case3": [100, 200, 300]
}
c、测试方法
#被测方法,相加功能
def my_add3(x, y):result = x + yreturn result
d、测试用例
import json
import pytest
from testing_data.func.operation_json import my_add3#用到json文件中的数据时,就需要读取出来
def get_json():"""读取json文件中的数据:return: 格式:[[1,2,3],[3,6,9]]"""with open('../datas/data.json','r',encoding='utf-8') as file:data=json.loads(file.read())data_values=data.values()return list(data_values)class TestWithJson:@pytest.mark.parametrize('x,y,expected',get_json())def test_add3(self, x, y, expected):assert my_add3(int(x), int(y)) == int(expected)
e、测试结果


相关文章:
pytest数据驱动
文章目录一、数据驱动概念二、数据驱动yaml1、yaml的基本语法:2、yaml支持的数据格式:3、安装4、使用5、读取方法a、目录结构b、yaml文件c、测试方法d、测试用例e、测试结果三、数据驱动excel1、安装导入2、操作3、读取方法a、目录结构b、excel文件c、测…...
OSI七层网络模型
应用层 定义了各种应用协议规范数据格式:HTTP协议、HTTPS协议、FTP协议、DNS协议、TFTP、SMTP等等。 表示层 翻译工作。提供一种公共语言、通信。 会话层 1、可以从校验点继续恢复数据进行重传。——大文件 2、自动收发,自动寻址的功能。 传输层 1、…...
易基因|MeRIP-seq揭示m6A RNA甲基化通过调控组蛋白泛素化来促进癌症生长和进展:Cancer Res
大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。2022年05月16日,《Cancer Res》杂志发表了题为“M6A RNA Methylation Regulates Histone Ubiquitination to Support Cancer Growth and Progression”的研究论文,该…...
Java 日期处理踩过的坑
前言 整理Java日期处理遇到过的问题,希望对大家有帮助 制作不易,一键三连,谢谢大家。 1.用 Calendar 设置时间的坑 反例: //提供者模式获取实例Calendar calendar Calendar.getInstance();//获取当前时间Date currentDate c…...
一文吃透 Spring 中的IOC和DI(二)
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
【期末指北】嵌入式系统——选择题(feat. ChatGPT)
作者|Rickyの水果摊 时间|2023年2月20日 基本信息 ☘️ 本博客摘录了一些 嵌入式系统 的 常见选择题,供有需求的同学们学习使用。 部分答案解析由 ChatGPT 生成,博主进行审核。 使用教材信息:《嵌入式系统设计与应…...
MyBatis-Plus——代码生成器(3.5.1+版本)
文章目录配置数据源配置(DataSource)全局配置(GlobalConfig)包配置(PackageConfig)策略配置(StrategyConfig)模板引擎配置(TemplateEngine)代码生成器测试样例…...
宁盾上榜第五版《CCSIP 2022 中国网络安全行业全景册》
2月1日,国内网络安全行业媒体Freebuf咨询正式发布《CCSIP(China Cyber Security Panorama)2022 中国网络安全行业全景册》第五版。宁盾作为国产身份安全厂商入驻身份识别和访问管理(SSO、OTP、IDaaS)及边界访问控制&am…...
【Linux系统】第七篇:Linux调试器gdb的使用
文章目录一、gdb简介二、gdb的安装三、gdb使用3.1、release和debug版本3.2、gdb基本使用命令1、启动gdb2、调试命令3、显示代码(list)4、断点命令(breakpoint)5 、变量命令(variable)6、特殊调试命令7、调用…...
Shell 特殊变量及其含义
shell是我们在linux下编写自动执行程序的常见脚本工具,通常会涉及到以下几个特殊变量,它们分别是:$#、$*、$、$?、$$。 变量含义$0当前脚本的文件名。$n(n≥1)传递给脚本或函数的参数。n 是一个数字,表示…...
LeetCode 2396. 严格回文的数字
如果一个整数 n 在 b 进制下(b 为 2 到 n - 2 之间的所有整数)对应的字符串 全部 都是 回文的 ,那么我们称这个数 n 是 严格回文 的。 给你一个整数 n ,如果 n 是 严格回文 的,请返回 true ,否则返回 fals…...
【RocketMQ】源码详解:Broker启动流程
Broker启动 入口: org.apache.rocketmq.broker.BrokerStartup#main broker的启动主要分为两部分:1.创建brokerController 2.启动brokerController。与平时进行业务开发时不同的是,这里的BrokerController相当于Broker的一个中央控制器类&…...
vue事件
1. 事件传参 <button click"clickEvt($event, 22)">点我</button>2. 事件修饰符 prevent:阻止默认事件stop:阻止事件冒泡(加到子元素)once:事件只触发一次capture:使用事件的捕获模…...
研报精选230220
目录 【行业230220国信证券】银行业行业专题:经济复苏中的优质中小银行【行业230220国信证券】汽车行业周报(2023年第7周):吉利将发布新品牌“银河” ,2022年宇通纯电动客车获欧洲销量冠军【行业230220开源证券】商贸零…...
kubernetes sd configs配置详解
1.基于Kubernetes的服务发现 kubernetes_sd_config 这个是以角色(role)来定义收集的,Kubernetes SD配置允许从Kubernetes的RESTAPI中检索scrape目标,并始终与群集状态保持同步。 凡<role>必须是endpoints,service,pod&…...
Linux查看文件的命令
目录 1、tail 2、head 3、cat 4、more 5、sed 6、less Linux查看日志的命令有多种: tail、cat、tac、head、echo等,本文只介绍几种常用的方法。 1、tail 命令格式: tail[必要参数][选择参数][文件] -f 循环读取 -q 不显示处理信息 -v 显示详细的处理信…...
如何单独清除某个网页的缓存(reload)
有时候在自己服务器上调试的时候,刷新一直不更新,样式改了也看不到,就很烦 今天教你一个方法快速清除 F12 控制台情况下右击左上角的刷新 这三个分别代表: ①正常重新加载(Ctrl R): 正常重新加载 此方法,浏览器发送请求时会…...
魔兽世界经典怀旧服务器架设教程
准备工具:MySQL服务端服务器最重要的你需要会技术、要不然都瞎扯 给你东西你也看不懂。教程开始:安装MySQL并创建数据库安装MySQL社区版,并配置SQL服务器。安装SQLyog。利用其登录,创建realmd、characters、mangos、scriptdev2数据…...
Interview系列 - 05 Java|Iterator迭代器|集合继承体系|Set List Map接口特性|List实现类区别
文章目录01. 迭代器 Iterator 是什么?02. 迭代器 Iterator 有什么特点?03. 迭代器 Iterator 怎么使用?04. 如何边遍历边移除 Collection 中的元素?05. Iterator 和 ListIterator 有什么区别?06. 数组和集合的区别&…...
LeetCode 1769. 移动所有球到每个盒子所需的最小操作数
有 n 个盒子。给你一个长度为 n 的二进制字符串 boxes ,其中 boxes[i] 的值为 ‘0’ 表示第 i 个盒子是 空 的,而 boxes[i] 的值为 ‘1’ 表示盒子里有 一个 小球。 在一步操作中,你可以将 一个 小球从某个盒子移动到一个与之相邻的盒子中。…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
