1、Excel封装是为了框架中读取测试数据,打开我们设置写好的用例Excel文件
该类里边最常用的就是read方法,经验所得最好以字典的方式进行读取
举个例子,下图是我的测试用例,我们可以将第一行当作字典的‘key',比如:{‘caseid’:'1,2'}
如果是采取列表方式,则后续可能我们对文件进行插入列的时候,就需要更改test_case文件的一些参数,很麻烦
2、
from openpyxl import load_workbook
class ExcelHandler:
'''Excel封装'''
def __init__(self,file_name):
self.file_name = file_name
self.wb = load_workbook(file_name)
def choose_sheet(self,sheet_name):
'''选择表单
如果sheet name是整数就根据索引获取
如果sheet name是字符串就用名字获取
'''
if isinstance(sheet_name,int):
return self.wb.worksheets[sheet_name]
return self.wb.get_sheet_by_name(sheet_name)
def read_line(self,sheet_name,line):
'''获取行'''
sheet = self.choose_sheet(sheet_name)
sheet_data = sheet[line] #取出来的是元祖(Cell(1,1),Cell(1,2))
#把里边的数据取出来
data = []#用列表接收比较灵活
for c in sheet_data:
data.append(c.value)
return data
#以列表形式的读取
# def read(self,sheet_name,start_row=2,start_column = 1):
# '''获取所有数据'''
# sheet = self.choose_sheet(sheet_name)
# #max_row max_column
# data = []
# for row in range(start_row,sheet.max_row+1):
# row_data=[]
# for cell in range(start_column,sheet.max_column+1): # 遍历一行中从start_column 到 max_column + 1所有的列号赋值给cell
# row_data.append(sheet.cell(row,cell).value) # 通过行号和列号获取对应的cell的value append到row_data里
# data.append(row_data)
# return data
#以字典方式的读取
def read(self,sheet_name,start_row=2, start_column=1):
"""获取所有的数据"""
sheet = self.choose_sheet(sheet_name)
#获取第一行的内容(字典中的key)
# header = []
# for column in sheet[0]:
# header.append(column.value)
header = [c.value for c in sheet[1]]#用扩展内容将上边几行代码直接精简化
data = []
for row in range(start_row, sheet.max_row + 1):
row_data = []
for column in range(start_column, sheet.max_column + 1):
row_data.append(sheet.cell(row, column).value)
row_data = dict(zip(header, row_data))#使用zip函数将列表转化为字典,将header和data两个列表拼装成一个字典
data.append(row_data)
return data
def read_cell(self,sheet_name,row,column):#row:行 column:列
sheet = self.choose_sheet(sheet_name)
return sheet.cell(row,column).value
def write(self,sheet_name,row,column,data):
sheet = self.choose_sheet(sheet_name)
sheet.cell(row, column).value=data
self.save()
def save(self):
self.wb.save(self.file_name)
self.wb.close()
@staticmethod
def write(file_name, sheet_name, row, column, data):
wb = load_workbook(file_name)
sheet = wb.get_sheet_by_name(sheet_name)
sheet.cell(row, column).value = data
#保存、关闭
wb.save(file_name)
wb.close()
这里边说明下,sheet_name 没有放在init属性是因为我的一个Excel里边会存放多个sheet_name,同时也是为了自己使用思路方便,这个就是具体项目环境具体灵活更改,ExcelHandler里边最常用到的就是读取数据方法,其他都不大长用,可能是在回写Excel文件时回用到write方法,这里把write当作一个静态方法使用,主要是怕写入的数据回复盖之前的