python使用openpyxl读取excel文件
1、自动化测试时常常用例是放在一个单独的excel文件进行管理的,那么就会涉及到怎么将用例读取出来
2、如下是用例中要用到的字段
3、对openpyxl进行封装读取表单内容,写入用例运行后的预期与结果
import openpyxl
class DoExcel:
def __init__(self,file_name,sheet_name): # file_name为你文件的路径,sheet_name为excel中表单名称
self.file_name =file_name
self.sheet_name = sheet_name
# 将表格中的第一行的值作为键,其他行作为值,已字典的形式存在列表中
def get_cases(self):
wb =openpyxl.load_workbook(self.file_name)
sh =wb[self.sheet_name]
cases = []
# 获取最大行号
rows =sh.max_row
# 获取最大列号
cols = sh.max_column
for row in range (2,rows+1):
case ={}
for col in range (1,cols+1):
case[sh.cell(1,col).value] = sh.cell(row,col).value
cases.append(case)
wb.save(self.file_name)
wb.close()
return cases
# row是你要传的行号,actual是你要断言的值,result是你要写入的用例执行结果
def write_result(self,row,actual,result):
wb = openpyxl.load_workbook(self.file_name)
sh = wb[self.sheet_name]
sh.cell(row=row,column=8).value =actual # 在第几行几列写入你的断言值
sh.cell(row=row, column=9).value = result # 在第几行几列写入你的用例运行结果,也就是拿你的断言值去与运行后获取到的某个值进行对比
wb.save(self.file_name)
wb.close()
4、实例化调用封装好的类
if __name__ == '__main__':
excel =DoExcel(file_name,"sheet_name") # file_name为你文件的路径,sheet_name为excel中表单名称
datas =excel.get_cases()
if student_name[0] == data["name"]:
excel.write_result(data["id"]+ 1, student_name[0], "pass") # id为什么要加1,是因为表格中第一行是title,要在第二行写数据的时候,其实他的id是1,不过你的id也可以直接从2开始就不用加1了
else:
excel.write_result(data["id"] + 1, student_name[0], "fail")
5、这是读取出来的excel中的内容,列表中嵌套字典
6、用例运行的结果(此处运行用例用到了unittest框架省略),表格中多了两列数据,就是之前类中封装的写入值