前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python递归通用接口响应深层提取(一)

Python递归通用接口响应深层提取(一)

作者头像
王大力测试进阶之路
发布2019-12-25 11:46:29
6710
发布2019-12-25 11:46:29
举报
文章被收录于专栏:橙子探索测试橙子探索测试

最近在做接口自动化断言时,每个接口文件里都写了一遍提取接口响应数据,然后append到列表里,传给公共的断言方法与sql查询出来的数据做比对,这样如果是100个接口,每个接口都写一遍接口响应数据提取,就要写100遍,太过依赖于返回数据的格式了,如果list里面多嵌套几层,而且都要效验,那....,通用性也不好,据说递归可以实现此通用方法,可以 一层一层拆,提取出自己想要的数据,组装一个 自己的数据组,然后和 预期结果一组一组对比,实现公共断言方法。

直接或间接的调用自身的函数,称为递归函数。函数递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制。每调用一次自身,相当于复制一份该函数,只不过参数有变化,参数的变化,就是重要的结束条件 递归函数特性: 1、必须有一个明确的结束条件; 2、每次进入更深一层递归时,问题规模相比上次递归都应有所减少 3、相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入)。 4、递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

5、递归次数有上限

for循环实现1-100的和:

代码语言:javascript
复制
def sum():
  x=0
  for i in range(1,101):
    x+=i
  return x
print(sum())

"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py
5050

Process finished with exit code 0

递归实现1-100的和:

代码语言:javascript
复制
def sum(max):
  if max>=0 and max<=100:
    return max+sum(max-1)
  else:
    return 0
print(sum(100))


"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py
5050

Process finished with exit code 0

下面json串是一个列表类模块的接口响应数据,我想断言接口响应的字段created_at和updated_at,使用递归将这2个字段值提取出来,append到列表里与sql查询库里的created_at和updated_at也append到列表里,两个列表做对比,所有同类型接口的断言可使用此公共方法进行提取断言。

代码语言:javascript
复制
接口响应json串如下:
json_data={
  'count_tab_4': 13,
  'total': 13,
  'list': [{
    'created_at': '2019-12-19 16:10:01',
    'updated_at': '2019-12-19 16:15:01',
    'company': {
      'full_name': '项目',
      'short_name': '项目简'
    },
    'task_sex': 1,
    'task_user_id_card': '610523198806273676',
    'task': {
      'type_child_name': '软件开发',
      'users_type_txt': '用户'
    }
  }, {
    'created_at': '2019-12-17 11:25:02',
    'updated_at': '2019-12-17 11:30:02',
    'company': {
      'full_name': '项目',
      'short_name': '项目简'},
    'task_sex': 1,
    'task_name': '啊啊啊任务啊啊',
    'task': {
      'type_child_name': '软件开发',
      'users_type_txt': '用户'}
  }],
  'page_size': 10,
  'page': 1
}


方法实现,提取created_at和updated_at的value组合成list:
response_values=[]
def test(response_data,keys=[]):
    if isinstance(response_data,list):
        for value in response_data:
            if isinstance(value,list) or isinstance(value,dict):
                test(value,keys)
    elif isinstance(response_data,dict):
        for i,j in response_data.items():
            if i in keys:
                response_values.append(j)
            else:
                test(j,keys)
    else:
        pass

test(json_data,['created_at','updated_at'])
print(response_values)


"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py
['2019-12-19 16:10:01', '2019-12-19 16:15:01', '2019-12-17 11:25:02', '2019-12-17 11:30:02']

Process finished with exit code 0


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 橙子探索测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档