python中一般使用xlrd(excel read)来读取Excel文件,使用xlwt(excel write)来生成Excel文件(可以控制Excel中单元格的格式),需要注意的是,用xlrd读取excel是不能对其进行操作的:xlrd.open_workbook()方法返回xlrd.Book类型,是只读的,不能对其进行操作。而xlwt.Workbook()返回的xlwt.Workbook类型的save(filepath)方法可以保存excel文件。(参考博客:https://www.cnblogs.com/liuyang92/p/7492336.html)
因为是对已经存在的excel文件(也就是接口测试用例)进行写操作,所以要把测试结果写进excel文件,需要用到xlutils(依赖于xlrd和xlwt)提供复制excel文件内容和修改文件的功能。
1.先看一个demo:
# coding:utf-8 import xlrd from xlutils.copy import copy # 导入xlutils的copy方法 file = 'E:InterfaceTest_Frameworkexcel_json_demodemo3.xlsx' # 文件路径 data = xlrd.open_workbook(file) # 定义一个excel文件的workbook对象 print('data的类型为:', type(data)) data_copy = copy(data) # 获取data的copy对象 print('data的copy对象类型为:', type(data_copy)) sheet_copy = data_copy.get_sheet(0) # 从data_copy对象中获取第一个sheet对象 sheet_copy.write(1, 11, '测试写入内容') # 向sheet的某个单元格写入值 data_copy.save(file) # 写入完成后保存data的copy对象
下面是excel文件运行前后对比图,可以看到在保留原文件内容不变的情况下,写入了新的值
2.接下来,把向excel中写入数据的操作封装起来
在之前的操作excel文件的类中(handle_excel.py)加一个写入数据的方法:
# 向某个单元格写入数据 def write_value(self, row, col, value): data = xlrd.open_workbook(self.file) # 打开文件 data_copy = copy(data) # 复制原文件 sheet = data_copy.get_sheet(0) # 取得复制文件的sheet对象 sheet.write(row, col, value) # 在某一单元格写入value data_copy.save(self.file) # 保存文件
主函数调整:
# coding:utf-8 from base.run_method import RunMain from util.handle_excel import * from util.common import CommonUtil import json class RunTestCase: def __init__(self): self.Runmain = RunMain() # 实例化调用get/post请求对象 self.data = HandleExcel() # 实例化操作excel文件对象 self.common = CommonUtil() # 实例化判断实际结果是否与预期结果一致 def go_run(self): rows_count = self.data.get_rows() # 获取excel行数 for i in range(1,rows_count): # 利用行数进行迭代处理每个接口 url = self.data.get_value(i, get_url()) # 循环获取url的值 # print(url) method = self.data.get_value(i, get_method()) # 循环获取method的值 data = json.loads(self.data.get_value(i, get_params())) # 循环获取请求参数,并将得到的数据反序列化 expect = self.data.get_value(i, get_expectvalue()) # 循环获取期望输出 # print(data) is_run = self.data.get_value(i, get_priority()) # 获取是否运行,即判断excel中priority是不是"H" if is_run == 'H': res = self.Runmain.run_main(url, method, data) # 调用get/post主函数 if expect in res: print('测试通过') self.data.write_value(i, get_resultvalue(), 'pass') # 调用写入数据方法,将实际结果写进excel else: print('测试失败') self.data.write_value(i, get_resultvalue(), 'fail') if __name__ == '__main__': run = RunTestCase() run.go_run()
运行结果对比: