今天发现之前发的接口自动化运行一直报错,emm的写的时候都试过没报错的,
然后优化了一版,代码如下,只展示了post的,get的基本差不多暂时没写了
还有使用json方法数据需要全部都加双引号,excel数据格式如下图
接口调用线性代码如下:
import excel_01
import re
import json
import requests
excel_data = excel_01.list_excel_data()
# data_dict = {'commodityId': '1777', 'mchId': '30010'}
data_dict = {}
for ii in range(0, len(excel_data)):
a = excel_data[ii]
url = a.get('url')
request_type = a.get("请求类型")
header = a.get('header')
data_json = a.get('params')
if_response_object_draw = a.get('响应中是否有字段需要提取')
response_draw_name = a.get("响应提取字段名称") # 需要判断有多个字段的情况
if_params_draw = a.get("入参中是否需要上一接口返回值")
params_draw_name = a.get("入参中需要上一接口返回字段名称") # 需要判断有多个字段的情况
# 将data入参转义成json
data_json_l = json.loads(data_json)
# 将header入参转义成json
header_l = json.loads(header)
# 获取header入参中参数是否有引用上一接口返回参数值,使用正则返回列表格式
header_re = re.findall('"\\${(.*?)}"', header)
# 获取data入参中参数是否有引用上一接口返回参数值,使用正则返回列表格式
params_re = re.findall('"\\${(.*?)}"', data_json)
if request_type == "post": # 判断接口类型
if len(header_re) > 0: # 判断header入参中参数是否有引用上一接口返回参数值
for kk in header_re: # 如果有用到上一接口返回值,通过循环替换当前header中的入参值,上一接口返回值会存在data_dict字典里
header_l[kk] = data_dict.get(kk)
if len(params_re) > 0: # 判断data入参中参数是否有引用上一接口返回参数值
for mm in params_re: # 如果有用到上一接口返回值,通过循环替换当前data中的入参值,上一接口返回值会存在data_dict字典里
data_json_l[mm] = data_dict.get(mm)
# 替换完相关参数值后,调用requests.post
response_value = requests.post(url=url, json=data_json_l, headers=header_l)
print(response_value.text) # 输出接口response
else: # 这里相当于header、data入参里面都没有引用其他接口的返回值做入参
response_value = requests.post(url=url, json=data_json_l, headers=header_l)
print(response_value.text)
# 这里是判断当前接口返回的response中有需要提取的参数,有多个需要提取的参数用英文逗号分割,提取的参数存到data_dict字典中,方便后面使用
if if_response_object_draw == "是":
if ',' in response_draw_name: # 多个提取参数的情况,我这里用逗号判断的
response_draw_name_list = response_draw_name.split(',') # 按逗号分割开参数
for kk in response_draw_name_list: # 使用正则re循环去response_value中取出值
response_draw_name_value = re.findall('%s":"(.*?)",' % kk, response_value.text)[-1]
data_dict[kk] = response_draw_name_value # 将取出的值放data_dict字典里
else: # 这里是只有一个提取参数的情况
response_draw_name_value = re.findall('%s":"(.*?)",' % response_draw_name, response_value.text)[-1]
data_dict[response_draw_name] = response_draw_name_value