接上文: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()
-
-
-
-
跑起来效果图如下:
