问题1:做接口测试,常常需要将上一个接口的值传入到下一个接口中,这里使用了jsonPath语法来解决;
问题2:发送请求前,常常需要传入很多变量,这里变量不一定是上一个接口的响应,有可能是时间、计算后的数据等。这里使用替换字符串来解决。
问题3:接口发送是,涉及到很多JSON格式问题,以下也是使用函数来解决。
问题4:注意使用python跑接口测试前, 需把fiddler等其它网络代理给关了,否则无法跑测试
1. 创建excel,拟定好excel文件格式。
2. 写两个方法,一个读取excel方法,一个发送请求方法,有注释
import json
import requests
from openpyxl import load_workbook
class ExcelOperate:
"""
excel文件操作工具包
"""
# 读取excel
def read_excel(self, filename, sheet_name, cases_title):
"""
:param filename: excel文件名称
:param sheet_name: sheet页名称
:param cases_title: 用例标题名称
:return:
"""
excel = load_workbook(rf'../data/{filename}') # 读取excel 【如果使用相对路径,参照路径为调用这个方法的路径】
sheet = excel[sheet_name] # 读取sheet页
data_list = [] # 定义空列表,将获取到excel的数据存放至此
# 定义个false值,后面做判断用
false = False
# 遍历获取到的excel的值(行行遍历)
for i in sheet.values:
# 将(用例标题)为None的用例存放至data_list
if false:
if i[2] is None:
data_list.append(i)
else:
break
# 将(用例标题)为True的用例存放至data_list
if str(i[2]) in cases_title:
data_list.append(i)
false = True
# 将列表转换成元组,方便后面的接口方法接收
tup1 = tuple(data_list)
# 返回元组
return tup1
# 接口请求方法
def url_request(self, po, ur, he, da):
"""
po请求方式,ur请求地址,he请求头,da请求体。传入的he和da必须是json格式文本
json.dumps:转换成json格式,json.loads转换成python可识别的JSON格式,requests模块默认的是拉丁语,需要转换成utf-8
有些请求头是空的, 有些请求体是空的, 所以用到if
:param po: 请求方法
:param ur: 请求地址
:param he: 请求头
:param da: 请求体
:return:
"""
if po and ur and he and da:
res = getattr(requests, po)(
url=ur,
data=json.loads(json.dumps(da)).encode("utf-8"),
headers=eval(he)
)
# 获取接口响应
text_ = getattr(res, "text")
# 返回接口响应(返回的是str)
return text_
if (he is None) and da:
res = getattr(requests, po)(
url=ur,
data=json.loads(json.dumps(da)).encode("utf-8")
)
text_ = getattr(res, "text")
return text_
if (da is None) and he:
res = getattr(requests, po)(
url=ur,
headers=eval(he)
)
text_ = getattr(res, "text")
return text_
if (he is None) and (da is None):
res = getattr(requests, po)(
url=ur
)
text_ = getattr(res, "text")
return text_
3. 然后就可以发送请求了。
# 实例化
ua = UrlClass()
# 调用read_excel方法,获取excel('1.登录')接口值
dt = ua.read_excel('1.登录')
# 调用url_request方法发送请求
ra = ua.url_request(dt[1], dt[2], dt[3], dt[4])
# 使用jsonpath语法, 提取token
token = jsonpath(json.loads(ra), "$.data.uucToken")
uuid = jsonpath(json.loads(ra), "$.data.uuid")
# 调用read_excel方法,获取excel('2.查询用户')接口值
dt2 = ua.read_excel('2.查询用户')
# 将token值替换自定义变量,替换后传回变量,以达到替换目的
dt2 = str(dt2).replace('test_2214', str(token[0]))
dt2 = str(dt2).replace('test_2215', str(uuid[0]))
# 替换变量需是str,调用接口请求需是元组, 所以替换完后需将str转成元组
dt2 = tuple(eval(dt2))
# 发送请求
ra2 = ua.url_request(dt2[1], dt2[2], None, None)
# 打印响应
print(ra2)