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

直接或间接的调用自身的函数,称为递归函数。函数递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制。每调用一次自身,相当于复制一份该函数,只不过参数有变化,参数的变化,就是重要的结束条件

递归函数特性:
1、必须有一个明确的结束条件;
2、每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3、相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入)。
4、递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

5、递归次数有上限

for循环实现1-100的和:


def sum():x=0for i in range(1,101):x+=ireturn x
print(sum())"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py
5050Process finished with exit code 0

递归实现1-100的和:

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
5050Process finished with exit code 0

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

接口响应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:passtest(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

Python递归通用接口响应深层提取相关推荐

  1. Java通用接口响应封装类

    Java接口响应封装类 Web开发中,前后分离是个趋势,现在大部分公司研发部门已经在走前后分离的路子了,前后分离开发各司其职能够有效的提高工作效率和开发质量. REST接口会返回各种各样的数据,如果对 ...

  2. python接口测试非json的断言_荐在接口自动化测试中,如何利用Pytest + JSONPath 进行接口响应断言...

    之前有一篇文章,介绍了如何使用JSONSchema对接口响应进行断言,主要的适用场景是对响应的数据结构进行校验,保证客户端收到的数据结构稳定和合法.今天,介绍使用JSONPath对接口响应的值进行断言 ...

  3. python数据接口获取数据_python UI自动化实战记录二:请求接口数据并提取数据

    该部分记录如何获取预期结果-接口响应数据,分成两步: 1 获取数据源接口数据 2 提取后续页面对比中要用到的数据 并且为了便于后续调用,将接口相关的都封装到ProjectApi类中. 新建python ...

  4. python接口测试-项目实践(二)获取接口响应,取值(re、json)

    一 分别请求3个接口,获取响应. 第三方接口返回有两种:1 纯字符串  2 带bom头的json字串 import requestsapi1 = 'url1' response1 = requests ...

  5. Jmeter BeanShell采样器提取接口响应并传递(三)

    1.将fastjson-1.2.68.jar放置C:\jmeter\apache-jmeter-5.0\lib路径下 2.CSV 数据文件设置多个手机号 3.添加登录接口,${mobile}调用2种的 ...

  6. 实习手册一(Python基于Tornado框架的接口响应服务)软件下载与环境配置

    目录 一.软件下载及环境配置: 1.Homebrew 2.python3.9 3.PyCharm专业版 4.MySQL 5.Navicat for MySQL 6.Redis 7.Postman 此次 ...

  7. 实习手册八(Python基于Tornado框架的接口响应服务)最终章

    目录 前言 Tornado_program common handler_base mysql_base sqlalchemy_base redis_base model log user serve ...

  8. 浅谈python+requests实现接口自动化

    前言 今年2月调去支持项目接口测试,测试过程中使用过postman.jmeter工具,基本能满足使用,但是部分情况下使用较为麻烦. 比如:部分字段存在唯一性校验或字段间有业务性校验,每次请求均需手工修 ...

  9. 在接口自动化测试中,如何利用Pytest + JSONPath 进行接口响应断言

    之前有一篇文章,介绍了如何使用JSONSchema对接口响应进行断言,主要的适用场景是对响应的数据结构进行校验,保证客户端收到的数据结构稳定和合法.今天,介绍使用JSONPath对接口响应的值进行断言 ...

最新文章

  1. c语言编程 构建围墙,c语言程序设计朝盛 综合程序练习题.ppt
  2. Linux学习(七)---组管理和权限管理
  3. php多图片上传程序,php多文件上传 多图片上传程序代码
  4. 利用奇异值分解(SVD)简化数据
  5. 机器学习从入门到精通50讲(一)-大数据平台下的数据质量管理
  6. 原生开发安卓/iOS,Visual Studio迎神器扩展
  7. php 5.4日志文件在哪里,我的错误日志文件在哪里?(Where are my error log files?)
  8. uva 10308 Roads in the North
  9. canon mp 258清零方法
  10. C盘清理和简单的批处理操作
  11. 从python开始学编程mobi_Python编程快速上手[azw3+epub+mobi][13.99MB]
  12. 中国象棋详细设计分析
  13. Excel查看工作表有多少列
  14. LSTM之父最新长文:现代AI和深度学习发展史
  15. 互联网晚报 | 1月13日 星期四 | 恒驰5首车下线;抖音电商测试快递服务“音尊达”;中国移动10086 App月底停止运营...
  16. 超硬核!程序员10种副业赚钱之道,实现月收入增加20k!
  17. clickhouse 如何快速写入数据
  18. Setting up Basic Access Control
  19. winsock 错误多的真爽啊
  20. “穷X”事件程序员致歉:以后老实写代码,正紧写注释

热门文章

  1. LeetCode.31 下一个排列
  2. oracle中$的用法,关于expdp 中query用法小结
  3. 图纸管理软件_造价20万以内的农村别墅长啥样?挑选5套图纸,让城里人羡慕吧...
  4. charles 安装 ssl_「从零开始Python爬虫」1.7.1 Charles的安装与配置
  5. 为什么Mac source ~/.bash_profile只生效一次(macOS Catalina)
  6. postman新手使用教程
  7. python 引入同一路径的类_Python入门 模块导入 import ...\from... import...
  8. html5小游戏是用js做的吗,谁说做H5动画和游戏一定要canvas?
  9. (DFS or BFS)Find The Multiple(poj1426)
  10. (找规律)Magic of David Copperfield