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

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的基本语法&#xff1a;2、yaml支持的数据格式&#xff1a;3、安装4、使用5、读取方法a、目录结构b、yaml文件c、测试方法d、测试用例e、测试结果三、数据驱动excel1、安装导入2、操作3、读取方法a、目录结构b、excel文件c、测…...

OSI七层网络模型

应用层 定义了各种应用协议规范数据格式&#xff1a;HTTP协议、HTTPS协议、FTP协议、DNS协议、TFTP、SMTP等等。 表示层 翻译工作。提供一种公共语言、通信。 会话层 1、可以从校验点继续恢复数据进行重传。——大文件 2、自动收发&#xff0c;自动寻址的功能。 传输层 1、…...

易基因|MeRIP-seq揭示m6A RNA甲基化通过调控组蛋白泛素化来促进癌症生长和进展:Cancer Res

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。2022年05月16日&#xff0c;《Cancer Res》杂志发表了题为“M6A RNA Methylation Regulates Histone Ubiquitination to Support Cancer Growth and Progression”的研究论文&#xff0c;该…...

Java 日期处理踩过的坑

前言 整理Java日期处理遇到过的问题&#xff0c;希望对大家有帮助 制作不易&#xff0c;一键三连&#xff0c;谢谢大家。 1.用 Calendar 设置时间的坑 反例&#xff1a; //提供者模式获取实例Calendar calendar Calendar.getInstance();//获取当前时间Date currentDate c…...

一文吃透 Spring 中的IOC和DI(二)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

【期末指北】嵌入式系统——选择题(feat. ChatGPT)

作者&#xff5c;Rickyの水果摊 时间&#xff5c;2023年2月20日 基本信息 ☘️ 本博客摘录了一些 嵌入式系统 的 常见选择题&#xff0c;供有需求的同学们学习使用。 部分答案解析由 ChatGPT 生成&#xff0c;博主进行审核。 使用教材信息&#xff1a;《嵌入式系统设计与应…...

MyBatis-Plus——代码生成器(3.5.1+版本)

文章目录配置数据源配置&#xff08;DataSource&#xff09;全局配置&#xff08;GlobalConfig&#xff09;包配置&#xff08;PackageConfig&#xff09;策略配置&#xff08;StrategyConfig&#xff09;模板引擎配置&#xff08;TemplateEngine&#xff09;代码生成器测试样例…...

宁盾上榜第五版《CCSIP 2022 中国网络安全行业全景册》

2月1日&#xff0c;国内网络安全行业媒体Freebuf咨询正式发布《CCSIP&#xff08;China Cyber Security Panorama&#xff09;2022 中国网络安全行业全景册》第五版。宁盾作为国产身份安全厂商入驻身份识别和访问管理&#xff08;SSO、OTP、IDaaS&#xff09;及边界访问控制&am…...

【Linux系统】第七篇:Linux调试器gdb的使用

文章目录一、gdb简介二、gdb的安装三、gdb使用3.1、release和debug版本3.2、gdb基本使用命令1、启动gdb2、调试命令3、显示代码&#xff08;list&#xff09;4、断点命令&#xff08;breakpoint&#xff09;5 、变量命令&#xff08;variable&#xff09;6、特殊调试命令7、调用…...

Shell 特殊变量及其含义

shell是我们在linux下编写自动执行程序的常见脚本工具&#xff0c;通常会涉及到以下几个特殊变量&#xff0c;它们分别是&#xff1a;$#、$*、$、$?、$$。 变量含义$0当前脚本的文件名。$n&#xff08;n≥1&#xff09;传递给脚本或函数的参数。n 是一个数字&#xff0c;表示…...

LeetCode 2396. 严格回文的数字

如果一个整数 n 在 b 进制下&#xff08;b 为 2 到 n - 2 之间的所有整数&#xff09;对应的字符串 全部 都是 回文的 &#xff0c;那么我们称这个数 n 是 严格回文 的。 给你一个整数 n &#xff0c;如果 n 是 严格回文 的&#xff0c;请返回 true &#xff0c;否则返回 fals…...

【RocketMQ】源码详解:Broker启动流程

Broker启动 入口&#xff1a; org.apache.rocketmq.broker.BrokerStartup#main broker的启动主要分为两部分&#xff1a;1.创建brokerController 2.启动brokerController。与平时进行业务开发时不同的是&#xff0c;这里的BrokerController相当于Broker的一个中央控制器类&…...

vue事件

1. 事件传参 <button click"clickEvt($event, 22)">点我</button>2. 事件修饰符 prevent&#xff1a;阻止默认事件stop&#xff1a;阻止事件冒泡&#xff08;加到子元素&#xff09;once&#xff1a;事件只触发一次capture&#xff1a;使用事件的捕获模…...

研报精选230220

目录 【行业230220国信证券】银行业行业专题&#xff1a;经济复苏中的优质中小银行【行业230220国信证券】汽车行业周报&#xff08;2023年第7周&#xff09;&#xff1a;吉利将发布新品牌“银河” &#xff0c;2022年宇通纯电动客车获欧洲销量冠军【行业230220开源证券】商贸零…...

kubernetes sd configs配置详解

1.基于Kubernetes的服务发现 kubernetes_sd_config 这个是以角色(role)来定义收集的&#xff0c;Kubernetes SD配置允许从Kubernetes的RESTAPI中检索scrape目标&#xff0c;并始终与群集状态保持同步。 凡<role>必须是endpoints&#xff0c;service&#xff0c;pod&…...

Linux查看文件的命令

目录 1、tail 2、head 3、cat 4、more 5、sed 6、less Linux查看日志的命令有多种: tail、cat、tac、head、echo等&#xff0c;本文只介绍几种常用的方法。 1、tail 命令格式: tail[必要参数][选择参数][文件] -f 循环读取 -q 不显示处理信息 -v 显示详细的处理信…...

如何单独清除某个网页的缓存(reload)

有时候在自己服务器上调试的时候&#xff0c;刷新一直不更新&#xff0c;样式改了也看不到&#xff0c;就很烦 今天教你一个方法快速清除 F12 控制台情况下右击左上角的刷新 这三个分别代表&#xff1a; ①正常重新加载(Ctrl R): 正常重新加载 此方法,浏览器发送请求时会…...

魔兽世界经典怀旧服务器架设教程

准备工具&#xff1a;MySQL服务端服务器最重要的你需要会技术、要不然都瞎扯 给你东西你也看不懂。教程开始&#xff1a;安装MySQL并创建数据库安装MySQL社区版&#xff0c;并配置SQL服务器。安装SQLyog。利用其登录&#xff0c;创建realmd、characters、mangos、scriptdev2数据…...

Interview系列 - 05 Java|Iterator迭代器|集合继承体系|Set List Map接口特性|List实现类区别

文章目录01. 迭代器 Iterator 是什么&#xff1f;02. 迭代器 Iterator 有什么特点&#xff1f;03. 迭代器 Iterator 怎么使用&#xff1f;04. 如何边遍历边移除 Collection 中的元素&#xff1f;05. Iterator 和 ListIterator 有什么区别&#xff1f;06. 数组和集合的区别&…...

LeetCode 1769. 移动所有球到每个盒子所需的最小操作数

有 n 个盒子。给你一个长度为 n 的二进制字符串 boxes &#xff0c;其中 boxes[i] 的值为 ‘0’ 表示第 i 个盒子是 空 的&#xff0c;而 boxes[i] 的值为 ‘1’ 表示盒子里有 一个 小球。 在一步操作中&#xff0c;你可以将 一个 小球从某个盒子移动到一个与之相邻的盒子中。…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

Axure 下拉框联动

实现选省、选完省之后选对应省份下的市区...

使用python进行图像处理—图像滤波(5)

图像滤波是图像处理中最基本和最重要的操作之一。它的目的是在空间域上修改图像的像素值&#xff0c;以达到平滑&#xff08;去噪&#xff09;、锐化、边缘检测等效果。滤波通常通过卷积操作实现。 5.1卷积(Convolution)原理 卷积是滤波的核心。它是一种数学运算&#xff0c;…...