解析接口返回数据
1、把json格式的数据
转换成单个{key,value}的形式,并把每个dict存入list
def parse(self,data): #解析json格式的数据 ,生成list
for key, value in data.items():
if isinstance(value, dict):
self.parse(value)
elif isinstance(value, list):
for k in range(len(value)):
# 由于list没有items,所以一个一个遍历lis里面的值,然后针对list的每一个项 进行解析
self.parse(value[k])
else:
self.L.append({key: value})
return self.L
2、把 变成list的request 和expect一一对比
得知预期值和返回值是否是相符合
def compare(self,resjson,targjson): #比较两个数值返回,如果相等,则返回True,否则返回false
self.init()
res_list = self.parse(resjson)
self.init()
targ_list = self.parse(targjson)
count = len(targ_list)
while count:
if targ_list[count - 1] in res_list: # list里面,成员运算符,in or not in
count -=1
else:
return False
return True
3、测试一下看是否正确
if __name__ == "__main__":
t = Tools()
request = {
"head": {
"clientId": "12",
"appUDID": "",
"appVersion": "",
"channelId": "",
"innerMedia": "",
"outerMedia": "",
"subClientId": "h5",
"origin": "",
"test":[{"hahah":"haha"}]
},
"body": {
"userName": "your user name",
"password": "password"
}
}
expect = {"username":"your user name","password":"password"}
# print(t.parse(request))
print(t.compare(request,expect))
结果:返回True or False,因为username两边大小写不一致,所以返回为False
小结:这个parse加compare函数,就可以在接口返回结果时候,直接assert(),得出true or false
完整代码
class Tools:
def __init__(self):
self.L = []
def init(self):
self.L = []
def parse(self,data): #解析json格式的数据 ,生成list
for key, value in data.items():
if isinstance(value, dict):
self.parse(value)
elif isinstance(value, list):
for k in range(len(value)): # 由于list没有items,所以一个一个遍历lis里面的值,然后针对list的每一个项 进行解析
self.parse(value[k])
else:
self.L.append({key: value})
return self.L
def compare(self,resjson,targjson): #比较两个数值返回,如果相等,则返回True,否则返回false
self.init()
res_list = self.parse(resjson)
self.init()
targ_list = self.parse(targjson)
count = len(targ_list)
while count:
if targ_list[count - 1] in res_list: # list里面,成员运算符,in or not in
count -=1
else:
return False
return True
python请求接口,抓取返回的数据
代码如下
# 引入包
import urllib2
import json
import sys
url = 'http://alisleepy.top' # 接口地址
responseResult = urllib2.urlopen(url, None, timeout=2000)
code = responseResult.getcode()
print '接口状态码:' + str(code)
if code != 200:
sys.exit('request failed,please check interface is correct!')
# 检查数据,是否符合预期
data = json.loads(responseResult.read()) # 反序列化json数据
print 'code码:' + str(data['code])
print 'msg信息:' + str(data['msg'])
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。