20.自动化测试框架开发之Excel配置文件的IO开发
20.自动化测试框架开发之Excel配置文件的IO开发
一、核心架构解析
1.1 类继承体系
class File: # 文件基类# 基础文件验证和路径管理class ExcelReader(File): # Excel读取器# 实现Excel数据解析逻辑
1.2 版本依赖说明
# 必须安装1.2.0版本(支持xlsx格式)
pip install xlrd==1.2.0# 版本兼容性说明:
# xlrd>=2.0.0 仅支持xls格式
# xlrd==1.2.0 支持xls/xlsx格式
二、核心参数解析
2.1 初始化参数表
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
excel_path | str | 是 | Excel文件绝对路径 |
sheet | str/int | 是 | 工作表名称或索引(从0开始) |
excel_title | bool | 否 | 首行是否为标题(默认True) |
三、数据解析流程
3.1 执行流程图解
开始
├─ 验证文件存在性
├─ 加载工作簿
├─ 选择工作表
│ ├─ 按索引选择(整数参数)
│ └─ 按名称选择(字符串参数)
├─ 读取数据行
│ ├─ 标题模式:首行作为字典键
│ └─ 非标题模式:直接返回二维列表
└─ 返回结构化数据
3.2 核心代码解析
# 延迟加载机制
@property
def data(self):if not self._data: # 首次访问时加载数据work_book = open_workbook(self._file_path) # 打开Excel文件# 工作表选择逻辑if isinstance(self._sheet, int):s = work_book.sheet_by_index(self._sheet)else:s = work_book.sheet_by_name(self._sheet)# 数据解析逻辑if self._excel_title:title = s.row_values(0) # 获取标题行for col in range(1, s.nrows):# 生成字典结构self._data.append(dict(zip(title, s.row_values(col))))else:for col in range(0, s.nrows):# 生成列表结构self._data.append(s.row_values(col))return self._data
四、数据结构对比
4.1 excel_title=True(默认模式)
输入表格:
ID | Username | Password |
---|---|---|
1 | test1 | pass123 |
2 | test2 | pass456 |
输出格式:
[{'ID': 1, 'Username': 'test1', 'Password': 'pass123'},{'ID': 2, 'Username': 'test2', 'Password': 'pass456'}
]
4.2 excel_title=False
输入表格:
| 1 | test1 | pass123 |
| 2 | test2 | pass456 |
输出格式:
[[1, 'test1', 'pass123'],[2, 'test2', 'pass456']
]
五、使用方法示例
5.1 读取测试用例
testcases = ExcelReader(excel_path='testcases.xlsx',sheet='LoginTestCases',excel_title=True
).datafor case in testcases:print(f"执行用例ID:{case['ID']}")print(f"输入用户名:{case['Username']}")
5.2 读取配置参数
configs = ExcelReader(excel_path='config.xlsx',sheet=0,excel_title=True
).datatimeout = next(item for item in configs if item['Environment'] == 'Production'
)['Timeout']
六、异常处理机制
6.1 常见异常类型
异常类型 | 触发条件 | 处理建议 |
---|---|---|
FileNotFoundError | 文件路径不存在 | 检查文件路径有效性 |
TypeError | 工作表参数类型错误 | 使用str或int类型参数 |
IndexError | 工作表索引超出范围 | 检查工作表总数 |
KeyError | 工作表名称不存在 | 检查拼写和大小写 |
七、性能优化建议
7.1 内存管理策略
# 处理大型文件时使用生成器
def iter_data(self):for item in self.data:yield item # 分页读取减少内存占用
7.2 数据类型转换
# 在字典生成时添加类型转换
def convert_value(value):try:return float(value) if '.' in value else int(value)except ValueError:return valueself._data.append({k: convert_value(v) for k, v in zip(title, values)})
八、完整代码
"""
Python :3.13.3
Selenium: 4.31.0
"""from os.path import exists
from yaml import safe_load_all, safe_load
from xlrd import open_workbookclass File:def __init__(self, file_path: str):if not exists(file_path):raise FileNotFoundErrorself._file_path = file_pathself._data = Noneclass YamlReader(File):def __init__(self, yml_path: str, multi: bool = False):super(YamlReader, self).__init__(yml_path)self._multi = multi@propertydef data(self):if not self._data:with open(self._file_path, 'rb') as fp:if self._multi:self._data = list(safe_load_all(fp))else:self._data = safe_load(fp)return self._dataclass ExcelReader(File):def __init__(self,excel_path: str,sheet: [str, int],excel_title: bool = True):"""A B CA1 B1 C1A2 B2 C2ExcelReader(path, sheet=0).data[{A:A1, B:B1, C:C1}, {A:A2, B:B2, C:C2}]ExcelReader(path, sheet=0, excel_title=False).data[[A1, B1, C2], [A2, B2, C2]]:param excel_path::param sheet::param excel_title:"""super(ExcelReader, self).__init__(excel_path)self._sheet = sheetself._excel_title = excel_titleself._data = []@propertydef data(self):if not self._data:# 使用openpyxl加载工作簿work_book = open_workbook(self._file_path)if not isinstance(self._sheet, (int, str)):raise TypeError('excel文件的表格:{}不存在'.format(self._sheet))if isinstance(self._sheet, int):s = work_book.sheet_by_index(self._sheet)else:s = work_book.sheet_by_name(self._sheet)if self._excel_title:title = s.row_values(0)for col in range(1, s.nrows):self._data.append(dict(zip(title, s.row_values(col))))else:for col in range(0, s.nrows):self._data.append(s.row_values(col))return self._data# Yaml查看数据
# obj = YamlReader(r'E:\Py3Sel3Ifram\chap5\demo.yml')
# print(obj.data)# 查看excel带列名的数据
obj = ExcelReader(r'E:\Py3Sel3Ifram\chap5\Demo.xlsx',sheet=0, excel_title=False).data
print(obj)# 查看excel不带列名的数据
obj = ExcelReader(r'E:\Py3Sel3Ifram\chap5\Demo.xlsx',sheet=0).data
print(obj)
工程实践建议:建议将Excel文件与测试代码分离存储,通过配置中心动态加载。实际测试数据显示,该方案处理1000行数据耗时约80-120ms。
「小贴士」:点击头像→【关注】按钮,获取更多软件测试的晋升认知不迷路! 🚀
相关文章:
20.自动化测试框架开发之Excel配置文件的IO开发
20.自动化测试框架开发之Excel配置文件的IO开发 一、核心架构解析 1.1 类继承体系 class File: # 文件基类# 基础文件验证和路径管理class ExcelReader(File): # Excel读取器# 实现Excel数据解析逻辑1.2 版本依赖说明 # 必须安装1.2.0版本(支持xlsx格式&#…...
1.1 Epson机器人常用指令1-Print函数、RobotInfo$
本文介绍Print, RobotInfo的使用. 主要总结如下: 1. Print可以向串口、网口、手操器TP1,RC软件等发送数据 2. RobotInfo$(4)可以得到机器人序列号。用于防止程序下载到其他机器人上。 3. CX, CY, CZ可以返回点的XYZ坐标值。 Rea…...
【机器人】复现 3D-Mem 具身探索和推理 | 3D场景记忆 CVPR 2025
3D-Mem 是用于具体探索和推理的3D场景记忆,来自CVPR 2025. 使用信息丰富的多视角图像,来表示场景并捕捉已探索区域的丰富视觉信息, 整合了基于前沿的探索,使智能体能够通过考虑已知和潜在的新信息,做出明智的决策。 …...
视觉-语言导航:综述与类别
22年4月来自国防科大的论文“Vision-Language Navigation: A Survey and Taxonomy”。 视觉-语言导航 (VLN) 任务要求智体遵循人类语言指令,在未曾见过的环境中导航。这个充满挑战的领域涉及自然语言处理、计算机视觉、机器人技术等领域,并催生了众多专…...
基于SpringBoot的家政预约系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
什么是子网委派?
Azure 子网委派的概念 子网委托使您能够为所选的 Azure PaaS 服务指定一个特定的子网,并将其注入到您的虚拟网络中。子网委托为客户提供了完全的控制权,可以管理 Azure 服务与其虚拟网络的集成。 当您将子网委托给 Azure 服务时,您允许该服务为该子网建立一些基本的网络配…...
5个yyds的.Net商城开源项目
今天一起来盘点下5个商城开源项目。 1、支持多语言、多商店的商城,.Net7 EF7领域驱动设计架构(Smartstore) 项目简介 Smartstore 支持桌面和移动平台、多语言、多商店、多货币的商城,并支持SEO优化,支持无限数量的…...
如何快速隔离被攻击的服务器以防止横向渗透
网络延迟过高会显著影响用户体验和服务性能,以下是系统化的排查思路和解决方案: --- ### **1. 快速定位问题范围** #### **基础检查** - **测试延迟目标**: bash ping <目标IP或域名> # 检查基础延迟(ICMP…...
【解决】自己的域名任何端口都访问不到,公网地址正常访问,服务器报错500。
一、问题描述 后端项目部署在服务器上,通过域名访问接口服务器报错500,通过浏览器访问殒命的任何端口都是无法访问此网站。 但是通过公网地址访问是可以正常访问到的,感觉是域名出现了问题 二、解决过程 先说结论:问题原因是…...
Kubernetes MCP服务器(K8s MCP):如何使用?
#作者:曹付江 文章目录 1、什么是 Kubernetes MCP 服务器?1.1、K8s MCP 服务器 2、开始前的准备工作2.1. Kubernetes集群2.2. 安装并运行 kubectl2.3. Node.js 和 Bun2.4. (可选)Helm v3 3、如何设置 K8s MCP 服务器3.1. 克隆存储…...
RHCE 练习三:架设一台 NFS 服务器
一、题目要求 1、开放 /nfs/shared 目录,供所有用户查询资料 2、开放 /nfs/upload 目录,为 192.168.xxx.0/24 网段主机可以上传目录,并将所有用户及所属的组映射为 nfs-upload,其 UID 和 GID 均为 210 3.将 /home/tom 目录仅共享给 192.16…...
SpringBoot(二)--- SpringBoot基础(http协议、分层解耦)
目录 前言 一、SpringBoot入门 1.入门程序 2.解析 二、HTTP协议 1.HTTP概述 2.HTTP请求协议 2.1 GET方式的请求协议 2.2 POST方式的请求协议 2.3 两者的区别 2.4 获取请求数据 3.HTTP响应协议 三、分层解耦 1.三层架构 2.IOC&DI 2.1 入门 2.2 IOC详解 2.…...
mongodb部署Shard Cluster
一、创建集群认证文件 mkdir ./data ./confopenssl rand -base64 756 > ./conf/keyfilechmod 400 ./conf/keyfiledocker network create mongo-cluster二、部署configsever副本集 #!/bin/bash inamemongodb:8.0.9 conf_namemongo_conf_ replset_nameconfrsecho "…...
【大数据】MapReduce 编程--索引倒排--根据“内容 ➜ 出现在哪些文件里(某个单词出现在了哪些文件中,以及在每个文件中出现了多少次)
将 Hadoop 所需的 JAR 文件添加到项目中,确保可以使用 Hadoop 的 API JAR (Java Archive) 文件是一种用于打包多个 Java 类文件、资源文件(如图片、配置文件等)以及元数据的压缩文件格式。它类似于 ZIP 文件,但 JAR 文件通常用于 …...
使用PHP对接东南亚、日本、印度和印度尼西亚股票数据源
本文将介绍如何通过StockTV提供的API接口,使用PHP语言来获取并处理东南亚(包括马来西亚、新加坡等)、日本、印度以及印度尼西亚的股票市场数据。我们将以获取市场列表、查询公司信息、查看涨跌排行榜为例,展示具体的操作流程。 准…...
从基础到高级:网站反爬技术全景解析与第三方工具对比
网站反爬与用户行为检测实战指南:从基础防护到智能识别 在当今数据驱动的互联网时代,网站面临着日益复杂的爬虫攻击和恶意行为威胁。本文将系统性地介绍网站反爬与用户行为检测的技术体系,包括基本原理、防护策略、第三方组件选型以及真实案例分析,帮助开发者构建更加安全…...
docker安装Prometheus+Grafana
docker 安装Prometheus 下载镜像 很多镜像服务器都不行了,我用的这个地址还可以 查看可用docker镜像地址:https://cloud.tencent.com/developer/article/2485043 docker pull docker.xuanyuan.me/prom/prometheus:latest启动 docker run -itd --name…...
解决 Linux Bash 脚本因换行符问题导致的 “bash^M: No such file or directory“ 错误
一、问题重现 最近在部署一个 Bash 脚本时遇到一个诡异的问题: bash $ chmod x deploy.sh $ ./deploy.sh /usr/bin/env: ‘bash\r’: No such file or directory 明明脚本内容正确,权限也设置好了,为什么会出现这样的错误? 二…...
DS1302实时时钟模块
目录 0.单片机定时器时钟的几个缺点: 1.DS1302介绍 2.引脚定义和应用电路 3.原理图 4.内部结果框图,RAM(寄存器) 5.寄存器定义 6.时序定义 7.DS1302时钟代码 第一步: 第二步: 第三步:…...
redis的List为什么用ziplist和quicklist
redis的List为什么用ziplist和quicklist 压缩列表(ziplist) 是一种节省内存的数据结构,最早是 Redis 中为了减少内存开销而引入的一种顺序存储结构。它不是标准库里的内容,而是某些底层系统(比如 Redis)在…...
Java 后端基础 Maven
Maven 1.什么是Maven 2.Maven的作用 Maven核心 Maven概述 IDEA集成Maven 1.创建Maven项目 点击设置里的 Project Structure 将jdk和编译语言进行设置 随后点击apply点击ok 2.Maven坐标 3.导入Maven项目 将文件夹复制到当前项目的目录下 在这个目录下,在磁盘中…...
开源情报的发展前景与行业运用
开源情报系统在实际中的应用正随着技术进步和社会需求的增长而不断拓展,其在国家安全、军事、经济、公共卫生等多个领域展现出显著价值。以下是结合最新动态与案例的综合分析: 一、国家安全:从传统到现代的情报体系升级 开源情报在国家安全…...
《黑马前端ajax+node.js+webpack+git教程》(笔记)——node.js教程+webpack教程(nodejs教程)
黑马程序员前端AJAX入门到实战全套教程,包含学前端框架必会的(ajaxnode.jswebpackgit),一套全覆盖 文章目录 Node.js与Webpack-01.Node.js入门定义和作用什么是前端工程化?(离不开node.js)Node.…...
Canvas设计图片编辑器全讲解(一)Canvas基础(万字图文讲解)
一、前序 近两年AI发展太过迅速,各类AI产品层出不穷,AI绘图/AI工作流/AI视频等平台的蓬勃发展,促使图片/视频等复杂内容的创作更加简单,让更多普通人有了图片和视频创作的机会。另一方面用户内容消费也逐渐向图片和视频倾斜。在“…...
disryptor和rabbitmq
disryptor和rabbitmq Disruptor 是什么? Disruptor 是一个由 LMAX Exchange 开发的高性能、低延迟的进程内(in-process)并发编程框架/库。它最初是为了解决金融交易系统中高吞吐量、低延迟消息传递的需求而设计的。 核心特点和设计理念&am…...
java基础-关键字:static、单例模式
1.例如:我们创造一个人的类,我们希望他是中国人类,所以我们希望所有对象都共有中国人的属性; import org.w3c.dom.ls.LSOutput;import java.sql.Connection; import java.sql.SQLOutput; import java.util.Arrays;public class Ma…...
深入解析PyTorch中MultiheadAttention的参数key_padding_mask与attn_mask
1. 基本背景 在multiheadattention中存在两个mask,一个参数是key_padding_mask,另外一个是attn_mask,尽管这两个参数是被人们所熟知的填充掩码和注意力掩码,但是深度理解以便清晰区分对于深刻理解该架构非常重要。 2. 参数Key_p…...
【Hadoop】--HA高可用搭建--3.2.2
修改环境配置文件 hadoop-env.sh # 在文件末尾添加以下内容: # java_home记得修改 export JAVA_HOME/usr/java/jdk1.8.0xxxx export HDFS_NAMENODE_USERroot export HDFS_DATANODE_USERroot export HDFS_ZKFC_USERroot export HDFS_JOURNALNODE_USERroot export YA…...
OpenCv(7.0)——银行卡号识别
文章目录 前言1.1 模板处理模块读取模板图像并预处理轮廓检测与处理构建数字模板库 1.2 银行卡图像预处理图像尺寸标准化形态学操作二值化与闭操作 1.3 卡号区域定位轮廓筛选逻辑 1.4 数字识别与结果展示完整代码展示总结 前言 本代码实现基于传统图像处理技术,通过…...
新手怎么样制作网站?
如果你是没有任何的建站基础,又没有任何的网站管理经验,那么应该如何开展网站制作呢?今天由我给大家分享一下网站制作的步骤和流程: 一、制定网站的核心主题: 在用户开展网站制作的之前,先确定一下以下的内…...
React集成百度【JSAPI Three】教程(002):设置不同的环境效果
文章目录 2、设置不同的天气2.1 安装antd前端UI库2.2 是否开启动态天空2.3 创建天气组件2.4 代码2.0版本下载2、设置不同的天气 2.1 安装antd前端UI库 安装命令: npm install antd --save2.2 是否开启动态天空 天气中的阴天、多云需要在开启动态天空后才能有效显示。在页面…...
Helm Chart 中配置多个 Docker Registry 地址以实现备用访问
在 Helm Chart 中配置多个 Docker Registry 地址以实现备用访问,可以通过以下几种方式实现: 1. 在 values.yaml 中定义多个 Registry 在 values.yaml 中定义主 Registry 和备用 Registry,以便在部署时灵活切换: # values.yaml …...
星云智控v1.0.0产品发布会圆满举行:以创新技术重构物联网监控新生态
星云智控v1.0.0产品发布会圆满举行:以创新技术重构物联网监控新生态 2024年5月15日,成都双流蛟龙社区党群服务中心迎来了一场备受业界瞩目的发布会——优雅草科技旗下”星云智控v1.0.0”物联网AI智控系统正式发布。本次发布会吸引了包括沃尔沃集团、新希…...
利用ffmpeg截图和生成gif
ffmpeg -i input.mp4 -ss 00:00:10 -vframes 1 output.jpgffmpeg -i input.mp4 -ss 00:00:10 -vframes 180 output.jpg -vframes 180代表截取180帧, 实测后发现如果视频是60fps,那么会从第10秒截取到第13秒-i input.mp4:指定输入视频文件。-ss 00:00:10:…...
OpenCV CUDA 模块中的矩阵算术运算-----在频域中执行两个复数频谱的逐元素乘法的函数mulSpectrums()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 mulSpectrums()是OpenCV CUDA 模块中用于在频域中执行两个复数频谱的逐元素乘法的函数。 该函数实现了以下运算: d s t s r c 1 ⋅…...
可视化图解算法41:搜索二维矩阵(二维数组中的查找)
1. 题目 牛客网 面试笔试TOP101 | LeetCode 74. 搜索二维矩阵 描述 在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数…...
OpenCV CUDA模块中的矩阵算术运算------创建卷积操作对象的工厂方法 cv::cuda::createConvolution
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 createConvolution函数是OpenCV CUDA 模块中用于创建卷积操作对象的工厂方法。它返回一个指向 cv::cuda::Convolution 接口的智能指针࿰…...
从代码学习深度学习 - 用于预训练词嵌入的数据集 PyTorch版
文章目录 前言辅助工具代码绘图工具 (utils\_for\_huitu.py)数据处理工具 (utils\_for\_data.py)读取数据集 (PTB)构建词表下采样高频词中心词和上下文词的提取负采样小批量加载训练实例整合代码:构建数据加载器总结前言 词嵌入(Word Embedding)是将词语映射到低维连续向量…...
基于jsp+mysql+Spring的Springboot旅游网站管理系统设计和实现
基于jspmysqlSpring的Springboot旅游网站管理系统设计和实现 🍅 作者主页 网顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定…...
【Rust迭代器】Rust迭代器用法解析与应用实战
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
嵌入式学习笔记DAY23(树,哈希表)
一、树 1.树的概念 之前我们一直在谈的是一对一的线性结构,现实中,还存在很多一对多的情况需要处理,一对多的线性结构——树。 树的结点包括一个数据元素及若干指向其子树的分支,结点拥有的子树数称为结点的度。度为0的结点称为叶…...
操作系统————五种页面置换算法(OPT,FIFO,LRU,NRU,加强版NRU)大总结
❤️❤️❤️算法1:最佳置换算法(OPT) 算法思想: 值得注意的是这是一种理想型算法,实际上并不可能实现,读者需要注意 下面我们来解析一下它的原理: 我们假设有三个内存块,对于页面…...
数据结构(二) 线性表
一. 线性表 1.定义 线性表是由n(n>0)个具有相同数据类型的数据元素构成的有限序列。其中,元素之间通过顺序关系排列,每个元素有且只有一个直接前驱和一个直接后继(除首尾元素外) 二.线性表的顺序表示(顺序表) 1.存储方式 使用连续的内存空间(数组)存储…...
TS04:高性能四通道自动灵敏度校准电容触摸传感器
在现代电子设备中,电容触摸传感器的应用越来越广泛,而高性能的传感器芯片是实现良好用户体验的关键。 TS04 四通道电容触摸传感器,凭借其自动灵敏度校准功能和多种特性,成为理想的解决方案。本文将简要介绍 TS04 的主要特性、功能…...
鸿蒙 系统-安全-程序访问控制-应用权限管控
Ability Kit 提供了一种允许应用访问系统资源(如:通讯录等)和系统能力(如:访问摄像头、麦克风等)的通用权限访问方式,来保护系统数据(包括用户个人数据)或功能࿰…...
ArcGIS Pro 3.4 二次开发 - 框架
环境:ArcGIS Pro SDK 3.4 .NET 8 文章目录 框架1 框架1.1 如何在 DockPane 可见或隐藏时订阅和取消订阅事件1.2 执行命令1.3 设置当前工具1.4 激活选项卡1.5 激活/停用状态 - 修改条件1.6 判断应用程序是否繁忙1.7 获取应用程序主窗口1.8 关闭 ArcGIS Pro1.9 获取 …...
打破传统仓库管理困局:WMS如何重构出入库全流程
引言 在制造业与零售业高速发展的今天,仓库管理仍普遍面临效率低、错发漏发频发、库存数据滞后等痛点。人工登记导致30%的错单率,货位混乱让拣货耗时增加50%,而账实不符引发的二次采购成本更吞噬着企业利润。如何突破传统管理桎梏࿱…...
npm 安装时 SSL 证书过期问题笔记
问题描述: npm error code CERT_HAS_EXPIRED npm error errno CERT_HAS_EXPIRED npm error request to https://registry.npm.taobao.org/axios failed, reason: certificate has expired 这表明当前配置的 npm 镜像源(淘宝镜像 https://registry.npm.taobao.org&…...
【大数据】MapReduce 编程-- PageRank--网页排名算法,用于衡量网页“重要性”-排序网页
PageRank 是 Google 创始人拉里佩奇(Larry Page)和谢尔盖布林(Sergey Brin)在 1998 年提出的一种网页排名算法,用于衡量网页“重要性”的一种方式。它是搜索引擎中用于排序网页的一种基础算法 一个网页越是被其他重要…...
Craw4AI:LLM友好的网页爬虫
GitHub:https://github.com/unclecode/crawl4ai 更多AI开源软件:发现分享好用的AI工具、AI开源软件、AI模型、AI变现 - 小众AI Crawl4AI旨在让网页爬取和数据提取变得简单而高效。无论构建复杂的 AI 应用程序还是增强大语言模型,Crawl4AI 都能…...