Python openpyxl +requests 接口测试实操
前言
Python 是一个强大易学的语言。当前需要对URL进行请求时,我们可以使用requests库来实现Post或者Get请求。当需要对Excel表格数据进行访问编辑时,我们可以使用openpyxl库来实现Excel工作簿操作。
那当我们接收到项目组紧急通知需要一天内对几百上千个接口测试时, RD直接扔一个Excel接口文档过来,束手无策了?
这不,前面我们学习到的模块这些模块知识派上用场了。
哦耶,那我们来简单的分析一下实现需求,主要三个步骤要实现如下
读取接口Excel文档数据
对每个接口进行请求
接口数据回写到Excel表格Result列
OK,需求我们分析玩来,接下来看看具体实操吧
1. openpyxl读取Excel数据
假设,RD给我们的接口文档里面的接口信息如图所示:
如何使用openpyxl来读取如上表格的数据,步骤有如下几步:
openpyxl.load_workbook()加载Excel文档
指定测试的表格
获取最大行数
使用for循环获取每行指定列的数据用字典形式储存
利用列表把获取每行字典数据添加起来
def get_data(filename,sheet): wb = load_workbook(filename) sheet = wb[sheet] cases = sheet.max_row list_case = [] for case in range(2,cases+1): dict_case=dict(id = sheet.cell(row=case,column=1).value, ip = sheet.cell(row=case,column=3).value, api = sheet.cell(row=case,column=4).value, data = sheet.cell(row=case,column=5).value, expect_code = sheet.cell(row=case,column=6).value) list_case.append(dict_case) return list_case 复制代码
2. requests请求接口
我们观察到的接口文档表里,所以的接口都是Post请求的,因此可以使用requests.post()方法来实现。
URL:主要由IP、端口号、API路径组成
data: URL请求body内容,通常都是Json格式的
请求的返回数据:主要形式也是Json格式
返回状态码:成功-200,请求端异常-4XX,服务端异常-5XX
def do_post(ip,api,data): headers = {"Content-Type": "application/json"} url = "http://" + ip + ":3333" + api response = requests.post(url,headers = headers,data = json.dumps(data)) result = response.json() return result 复制代码
3. 断言回写数据
我们实现了对Excel表格数据读取和请求Post方法两步了,接下来我们实现最后一步,对接口进行测试断言判断后,把结果写入到Excel表格中。
调用get_data()指定接口文档如testapi.xlsx和表格
使用for循环读取每一行id、ip、api、data数据
data 数据从Excel表格是字符串,需要调用eval()转换成json格式
使用if判断返回码是否正常,对rel_result赋值结果
重新加载接口文档,把rel_result结果写入到result栏
import openpyxl from Test import data_post cases = data_post.get_data("testapi.xlsx", "Sheet2") for case in cases: id = case.get("id") api = case.get("api") data = case.get("data") data = eval(data) print(data) ip = case.get("ip") expect = case.get("expect") result = data_post.do_post(ip, api, data) if result["code"] == expect["code"]: print("success") real_result = "success" else: print("fail") real_result = "fail" wb = openpyxl.load_workbook("testapi.xlsx") sheet = wb['Sheet2'] sheet.cell(id + 1, 7).value = real_result wb.save("testapi.xlsx") 复制代码
总结
本期,我们对openpyxl与request进行结合使用,简单实现对接口自动化测试进行实现。
如何更好地在实际工作使用,需要我们平时对其进行大量的练习。
作者:盆友圈的小可爱
链接:https://juejin.cn/post/7066438841803997192