前言:为什么要使用openpyxl?
1、openpyxl是用来读取excel中的测试用例到代码中
2、DDT数据驱动
一、测试用例维护
1.测试用例均维护在Excel文件中,每个sheet页中存放单一接口的测试用例。
包含用例编号,接口名,测试场景,接口类型,接口url,接口参数,预期返回结果...具体字段根据实际项目需要增加或减少
二、openpyxl安装
1.打开cmd
2.输入命令
pip install openpyxl
3.等待安装成功即可
4.安装失败的解决办法
(1)加入-user
pip install -user openpyxl
(2)先更新pip,在安装
python -m pip install --upgrade pip
pip install openpyxl
(3)超时处理
pip --default-timeout=100 install openpyxl
三、openpyxl读取excel
思路:
1.类的初始化方法,将文件路径和sheet名当做参数传入
class Handle_Excel:
# 初始化方法,传入文件名和sheet名
def __init__(self, filename, sheetname):
self.filename = filename
self.sheetname = sheetname
2.导入excel
(1)创建work工作簿对象,传入文件路径
(2)传入sheet名,获取到sheet页中全部的数据,并转换成list(列表)类型
(3)通过列表推导式取出excel中第一行的数据,也就是表头
(4)循环第二行开始至最后一行的数据,也就是用例数据
(5)使用zip进行测试用例表头和用例数据的组装,并转换成dict类型
def read_excel(self):
# 读取excel到代码中
workbook = openpyxl.load_workbook(self.filename)
sh = workbook[self.sheetname]
# 获取到所有行的数据
res = list(sh.rows)
cases = []
# 获取第一行的表头
title = [i.value for i in res[0]]
# 遍历第一行之外的其他行
for item in res[1:]:
data = [i.value for i in item]
dic = dict(zip(title, data))
cases.append(dic)
# 返回读取出来的数据
return cases
3.将结果写入到excel中
(1)创建work工作簿对象,传入文件路径
(2)传入sheet名,创建sheet页对象
(3)sheet页对象调用cell方法,传入row,volumn,value
(4)工作簿对象调用save方法,对工作簿进行保存
def write_excel(self, row, column, value):
# 写入结果到Excel中,基本不怎么用
workbook = openpyxl.load_workbook(self.filename)
sh=workbook[self.sheetname]
sh.cell(row=row,column=column,value=value)
workbook.save(self.filename)
4.打印结果
if __name__ =='__main__':
excel=Handle_Excel(os.path.join(DATA_DIR, 'apicases.xlsx'), 'register')
res=excel.read_excel()
print(res)
(1)打印title
title:['case_id', 'interface', 'title', 'method', 'url', 'data', 'expected', 'result', 'check_sql']
(2)打印dic
dic:{'case_id': 1, 'interface': 'register', 'title': '注册成功-带注册名', 'method': 'POST', 'url': '/member/register', 'data': '{"mobile_phone":#mobile#,"pwd":"xxxx","type":1,"reg_name":"34254sdfs"}', 'expected': '{"code": 0, "msg": "OK"}', 'result': None, 'check_sql': '\'SELECT * FROM futureloan.member WHERE mobile_phone="{}"\''}
dic:{'case_id': 2, 'interface': 'register', 'title': '成功-不带用户名', 'method': 'POST', 'url': '/member/register', 'data': '{"mobile_phone":#mobile#,"pwd":"xxxx","type":1}', 'expected': '{"code": 0, "msg": "OK"}', 'result': None, 'check_sql': '\'SELECT * FROM futureloan.member WHERE mobile_phone="{}"\''}
(3)打印dic(我只打印了一部分,格式都差不多)
[{'case_id': 1, 'interface': 'register', 'title': '注册成功-带注册名', 'method': 'POST', 'url': '/member/register', 'data': '{"mobile_phone":#mobile#,"pwd":"xxxx","type":1,"reg_name":"34254sdfs"}', 'expected': '{"code": 0, "msg": "OK"}', 'result': None, 'check_sql': '\'SELECT * FROM futureloan.member WHERE mobile_phone="{}"\''}]