一、openpyxl模块介绍

openpyxl是读写Excel的python库,是一个比较综合的工具,能够同时读取和修改Excel文档,在自动化测试实现过程中利用openpyxl读取excel测试用例表中的数据,再结合ddt模块能够高效提升测试效率,减少代码冗余度。


1.openpyxl中有三个不同层次的类,每一个类都有各自的属性和方法:

* 
    Workbook是一个excel工作表 
* 
   Worksheet是工作表中的表单sheet
* 
   cell表单中的一个格

2..打开excel的一般场景 * 打开或者创建一个Excel需要创建一个Workbook对象 * 获取一个表则需要先创建一个Workbook对象,然后使用该对象的方法来得到一个Worksheet对象


一般流程如下: 第一步:打开excel workbook1=load_workbook('test_case.xlsx') 第二步:定位表单(test_data) sheet=workbook1['test_data'] 第三步:操作excel的test_data表单 1、定位单元格(cell),根据行列读取测试数据 例如: data=sheet.cell(3,2).value print(data) 注意: * excel 存储的数据,数字还是数字:int—>int、 float—>float 、其他类型—>str * 使用eval(数据) 将str类型转换为他原来的类型


统计行和列 max_row=sheet.max_row max_cow = sheet.max_column

下面是我自己封装了一个Handle类,功能大致如下: 1.读取excel表格中的测试用例信息,压缩成字典格式 2.将自动化测试结果写入excel,并保存测试结果 3.此模块可以作为通用功能使用,在以后的自动化测试中如果有需要可直接导入进行使用 注意:保存的时候要确保你当前的excel文件是关闭状态

代码展示:

from openpyxl import load_workbook
import os

"""
类属性:文件路径,sheet表单,工作簿对象
类方法:
1.打开文件2.获取表头信息 3.获取文件内容
"""
class Handle:
def __init__(self, filepath, sheet):
self.wb = load_workbook(filepath)
self.sh = self.wb[sheet]


#获取所有的行对象
def get_all_rows_obj(self):
rows = list(self.sh.rows)
return rows

#获取表头信息
def get_title(self):
rows = self.get_all_rows_obj()
titles = []
for item in rows[0]:
titles.append(item.value)
return titles

# 获取所有case信息,与表头信息titles压缩成字典
def get_all_caseinfo(self):
rows = self.get_all_rows_obj()
titles = self.get_title()
cases = []
for row in rows[1:]:
values = []
for item in row:
values.append(item.value)
cases.append(dict(zip(titles, values)))
print(cases)
return cases

#将测试结果写入excel
def write_result_to_excel(self,row,col,value):
self.sh.cell(row, col).value = value

#保存测试结果
def save_result(self,file_path):
self.wb.save(file_path)



if __name__ == '__main__':
"""
1.获取文件路径
"""
cur_path = os.path.dirname(__file__)
case_path = os.path.join(os.path.dirname(cur_path), "resource\\login_case.xlsx")
print(case_path)
handle = Handle(case_path, "Sheet1")
handle.get_all_caseinfo()