一、操作excel
1.1、人工操作步骤:
1)打开excel
2)选择sheet表
3)选择单元格
1.2、代码步骤:
1)work_book对象
2)sheet对象
3)cell对象
二、自动化接口测试用例步骤
2.1、编写测试用例
1、用例描述(与功能测试用例一样)
2、请求方法(Request Method)
3、接口地址(Request URL)
4、请求参数(Request Payload)
5、期望结果
6、实际结果
2.2、读取测试用例
case_datas=handle_excel.get_case_data_dict()
2.3、发请求
# 发送post请求 for case in case_datas: # 用户登陆 res=login_test.user_login(url=case['url'],data=ast.literal_eval(case['data'])) #执行user_login
2.4、获取响应结果
actual_data = {'code': res['code'], 'msg': res['msg']} #从res中将code和msg取出
2.5、和预期结果进行比对(断言)
result=login_test.login_check(expected_data=ast.literal_eval(case['expected_data']),response_data=actual_data) #执行login_check,进行断言
2.6、保存测试结果
handle_excel.write_result(rows=case['id']+1,column=7,result=result)
三、openpyxl库
3.1、安装
pip install openpyxl
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple openpyxl
3.2、读取
1、用cell获取单元格数据 from openpyxl import load_workbook #导入openpyxl的load_workbook方法 work_book=load_workbook(filename='testCase.xlsx') #打开excel sheet=work_book['sheet1'] #选择sheet表(获取sheet对象) val=sheet.cell(1,2).value #获取表的行和列表(获取单元格数据),openpxl的行和列,索引从1开始 max_rows=sheet.max_row #获取最大行 max_cols=sheet.max_column #获取最大列 print(val,max_rows,max_cols)
2、用iter_rows()批量获取单元格数据 from openpyxl import load_workbook #导入openpyxl的load_workbook方法 work_book=load_workbook(filename='testCase.xlsx') #初始化表格对象:文件路径file_path、表单名称sheet_name sheet=work_book['sheet1'] #初始化sheet对象 datas=sheet.iter_rows(values_only=True) #获取表格数据 print(list(datas)) #返回嵌套元素,每一行是一个元素
1)load_workbook()
work_book=load_workbook(filename='testCase.xlsx') #打开excel sheet=work_book['sheet1'] #选择sheet表(获取sheet对象)
filename:excel文件名(路径)
read_only=False:是否只读,默认False。False:可以读也可以写,True:只能读
keep_vba=KEEP_VBA:是否保留VBA代码
data_only=False:是否读取公式计算后的结果,默认False。False:不读取,True:读取计算后的结果
keep_links=True:是否保留外部链接,默认True。False:不保留,True:保留
2)cell():获取单元格数据
val=sheet.cell(1,2).value #获取表的行和列表(获取单元格数据),openpxl的行和列,索引从1开始
3)max_row:获取最大行
max_rows=sheet.max_row #获取最大行
4)max_column:获取最大列
max_cols=sheet.max_column #获取最大列
5)iter_rows():批量获取单元格数据
datas=sheet.iter_rows(values_only=True) #批量获取表格数据
min_row=None:起始行,默认1
max_row=None:结束行,默认最大行
min_col=None:起始列,默认1
max_col=None:结束列,默认最大列
values_only=False:返回单元格对象
values_only=True:返回单元格内容
3.3、写表
1)写入
sheet.cell(7,1).value="{'code':1,'msg':'密码为空'}" #写表
2)保存
work_book.save(filename='testCase.xlsx') #保存
四、封装excel
import pprint from openpyxl import load_workbook class HandleExcel: def __init__(self,file_path,sheet_name): #初始化表格对象 self.work_book = load_workbook(filename=file_path) #初始化sheet对象 self.sheet = self.work_book[sheet_name] #获取表头和所有测试用例数据 def __get_all_data(self): all_datas = list(self.sheet.iter_rows(values_only=True)) #print(list(all_datas)) title=all_datas[0] #获取表头 case_datas=all_datas[1:] #获取测试用例数据 return title,case_datas #数据拼接(dict) def get_case_data_dict(self): case_list=[] title,case_datas = self.__get_all_data() for val in case_datas: result = dict(zip(title,val)) case_list.append(result) return case_list if __name__ == '__main__': cl=HandleExcel('testCase.xlsx','sheet1') case_list=cl.get_case_data_dict() pprint.pprint(case_list)
4.1、导入模块
from openpyxl import load_workbook
4.2、初始化表格对象:文件路径file_path
self.work_book = load_workbook(filename=file_path)
4.3、初始化sheet对象
self.sheet = self.work_book[sheet_name]
4.4、获取表格数据
all_datas = list(self.sheet.iter_rows(values_only=True)) title=all_datas[0] #获取表头 case_datas=all_datas[1:] #获取测试用例数据
4.5、数据拼接:zip(),将对象数据拼接
case_list=[] title,case_datas = self.__get_all_data() for val in case_datas: result = dict(zip(title,val)) case_list.append(result)
4.6、用例执行:将测试数据放到业务逻辑中执行
import ast from homework0508 import HandleExcel from demo1601 import LoginCase handle_excel = HandleExcel(file_path='testCase.xlsx',sheet_name='sheet1') #HandleExcel实例化 login_test=LoginCase() #LoginCase实例化 case_datas=handle_excel.get_case_data_dict() #获取测试用例数据 # 发送post请求 for case in case_datas: # 用户登陆 res=login_test.user_login(url=case['url'],data=ast.literal_eval(case['data'])) #执行user_login #取预期结果 expected_data=ast.literal_eval(case['expected_data']) #用ast库中的literal_eval()方法将str转成dict #获取响应结果 actual_data = {'code': res['code'], 'msg': res['msg']} #从res中将code和msg取出 # 断言 result=login_test.login_check(expected_data=expected_data,response_data=actual_data) #执行login_check,进行断言 #保存测试结果 handle_excel.write_result(rows=case['id']+1,column=7,result=result)