接上文:W31-01,本文改为使用excel驱动实现数据驱动维护自动化数据,实现数据与代码分离,主要知识点如下:
1.使用excel相关功能:
pip install openyxl -i https://pypi.tuna.tsinghua.edu.cn/simple
2.反射获取到用例里面写的关键字函数
主函数上代码,依赖文件见附件:
"""
@Time : 2024/8/10 21:28
@Auth : jany
"""
import traceback
from tools.keywords import Web
from tools.Logger import path,logger
from tools.Excel import Reader, Writer
def run_case(web, line):
"""
运行一行用例
:param web: 关键字对象
:param line: 一行Excel数据列表
:return:
"""
logger.info(line)
# 第四个单元格式关键字
method = line[3]
# 反射获取到用例里面写的关键字函数
func = getattr(web, method)
# 获取参数,是一行里面4~6这三个元素
params = line[4:7]
# 对参数从右往左找,找最后一个不为空的,然后把所有空的全部截掉
# 兼容都是空的情况
index = -1
for i in range(2, -1, -1):
if len(params[i]) > 0:
index = i
break
params = params[0:index + 1]
return func(*params)
# 创建关键字对象
web = Web()
reader = Reader()
writer = Writer()
# 打开一个excel
reader.open_excel(path + 'lib/cases/百度搜索雷军.xlsx')
# 复制新建一个结果文件写入
writer.copy_open(path + 'lib/cases/百度搜索雷军.xlsx', path + 'lib/cases/result-百度搜索雷军.xlsx')
# 获取所有sheet
sheets = reader.get_sheets()
print(sheets)
for sheet in sheets:
# 设置读取的sheet页面
reader.set_sheet(sheet)
writer.set_sheet(sheet)
# 读取当前sheet的所有行
lines = reader.readline()
logger.debug(lines)
# 遍历每一行,然后执行
for i in range(len(lines)):
line = lines[i]
print(line)
if len(line[0]) > 0 or len(line[1]) > 0:
# 分组信息不用跑
continue
# 一次跑完,尽量多发现问题
try:
res = str(run_case(web, line))
writer.write(i, 7, 'PASS', 3)
writer.write(i, 8, res)
except Exception as e:
writer.write(i, 7, 'FAIL', 2)
# # 简单的报错信息
# writer.write(i, 8, e.__str__())
# 报错堆栈信息
writer.write(i, 8, traceback.format_exc())
logger.exception(e)
# 记得保存
writer.save_close()
跑起来效果图如下: