python 接口测试response返回数据对比的方法


Posted in Python onFebruary 11, 2018

背景:之前写的接口测试一直没有支持无限嵌套对比key,上次testerhome逛论坛,有人分享了他的框架,看了一下,有些地方不合适我这边自己修改了一下,部署在jenkins上跑完效果还不错,拿出来分享一下。ps:还是要多看看别人写的,新学了不少python自带的一些常用方法。

这次直接上代码,下面写一下这次我新学一些方法和思路。

def check_response_hope_key(self,response={},hope_response={}):
  temp_data={}
  for n1 in hope_response:
   print "n1:",n1
   #如果值是字典类型
   if isinstance(hope_response[n1],dict):
    print "dict"
    if not Check_Response_Hope().check_response_hope_key(response=response.get(n1), hope_response=hope_response[n1]):
     MailFile().checkfail(response=response.get(n1), hope_response=hope_response[n1])
     return False
     raise '{},{}'.format(hope_response[n1],response[n1])
   
   #如果值是列表类型
   elif isinstance(hope_response[n1],list):
    print "list"
    for hope_index,hope_listValue in enumerate(hope_response[n1]):
     #print "hope_index:",hope_index
     #print "hope_listValue:",hope_listValue
     for response_index,response_listValue in enumerate(response[n1]):
      #print "response_index:",response_index
      #print "response_listValue:",response_listValue
      if isinstance(hope_listValue,dict):
       Check_Response_Hope().check_response_hope_key(response=response[n1][response_index],
hope_response=hope_response[n1][response_index])
      elif isinstance(hope_listValue,list):
       if hope_response[n1][hope_index]==response[n1][hope_index]:
        break
       else:
        MailFile().checkfail(response=response_listValue,hope=hope_listValue)
        raise Exception ("hope_response="+str(hope_response[n1][hope_index])+"\n"+
"response="+str(response[n1][response_index]))
      else:
       if hope_response[n1][hope_index]==response[n1][hope_index]:
        break
       else:
        MailFile().checkfail(response=response[n1][hope_index],hope=hope_response[n1][hope_index])
        raise Exception ("hope_response="+str(hope_listValue)+"\n"+"response="+str(response_listValue))
   else:
    print "string"
    if response.has_key(n1):
     continue
    else:
     temp_data['error_data']='{}:{},{}:{}'.format(n1,hope_response[n1],n1,response[n1])
     #发送邮件
     MailFile().checkfail(response=response[n1],hope=hope_response[n1])
     raise Exception ("hope_response="+str(hope_response[n1])+"\n"+"response="+str(response.get(n1)))
    
  return True

内置函数enumerate():

传入list的数据时返回该列表的索引和值,例如:

>>> list1=[1,2,3,4]
>>> for list_index,list_value in enumerate(list1):
...  print list_index,list_value
...

0 1
1 2
2 3
3 4

还可以控制索引的起始值开始迭代,例如:

>>> for list_index,list_value in enumerate(list1,1):
...  print list_index,list_value
...

1 1
2 2
3 3
4 4

内置函数isinstance(object,type):

用于判断传入对象是什么类型,返回布尔类型true或false,例如:

>>> isinstance(list1,dict)
False

ps:这个方法真的挺好用的,很基础可以根据返回的布尔类型走不同的if分支。

内置函数format()

这个函数作用就是格式化字符串,这里面不是非要用,我用完感觉还是挺方便的,结构也清晰,在下面举个常用例子。
1.通过位置进行映射:

>>> '{},{}'.format('abc',123)
'abc,123'
>>> '{1}{0}{1}'.format('abc',123)
'123abc123'

2.通过下标

>>> list1=['a','b']
>>> '{0[1]},{0[0]}'.format(list1)
'b,a'

当然还其他很多用法,我也没用到,还是挺强大的,有兴趣自己百度一下吧,很多写的很详细。

思路:

接口返回response一定是字典格式的,因为我写的接口测试框架用的orm链接数据库动态从数据库中传参数,所以返回value可能会不同,但是返回response的key肯定是固定的,所以我这里验证所有的key。

首先遍历hope_response(期望接口返回),hope_response[n]可能类型字典,列表或者string/int(我目前没有见过key是int型的),所以使用isinsstance()去判断value的类型。如果是string就表示是最简单的一层{key:value}形式,这里就使用has_key来判断response中有没有该key。hope_response[n]是dict类型,就递归,最后一定会落到string/int类型的分支。如果hope_response[n]是list类型,就用到enumerate()来拿到索引和值,根据值的类型去判断。大体思路这样的,我调试1天多,看着简单,自己写坑还是挺多的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python encode和decode的妙用
Sep 02 Python
python实现simhash算法实例
Apr 25 Python
python使用正则表达式分析网页中的图片并进行替换的方法
Mar 26 Python
Python常用随机数与随机字符串方法实例
Apr 09 Python
详解Python正则表达式re模块
Mar 19 Python
如何利用Python开发一个简单的猜数字游戏
Sep 22 Python
深度学习入门之Pytorch 数据增强的实现
Feb 26 Python
浅谈numpy中np.array()与np.asarray的区别以及.tolist
Jun 03 Python
Python连接mysql数据库及简单增删改查操作示例代码
Aug 03 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
Oct 19 Python
Python干货实战之八音符酱小游戏全过程详解
Oct 24 Python
使用python求解迷宫问题的三种实现方法
Mar 17 Python
使用Python读取大文件的方法
Feb 11 #Python
python脚本作为Windows服务启动代码详解
Feb 11 #Python
分析Python读取文件时的路径问题
Feb 11 #Python
Django中针对基于类的视图添加csrf_exempt实例代码
Feb 11 #Python
python jieba分词并统计词频后输出结果到Excel和txt文档方法
Feb 11 #Python
代码讲解Python对Windows服务进行监控
Feb 11 #Python
django 按时间范围查询数据库实例代码
Feb 11 #Python
You might like
在IIS上安装PHP4.0正式版
2006/10/09 PHP
PHP开发APP端微信支付功能
2017/02/17 PHP
利用ajax和PHP实现简单的流程管理
2017/03/23 PHP
浅谈PHP中类和对象的相关函数
2017/04/26 PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
2017/11/28 PHP
JS操作XML中DTD介绍及使用方法分析
2019/07/04 PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
2019/10/18 PHP
Javascript里使用Dom操作Xml
2006/09/20 Javascript
js tab 选项卡
2009/04/26 Javascript
jquery 弹出层实现代码
2009/10/30 Javascript
javascript倒计时功能实现代码
2012/06/07 Javascript
Javascript级联下拉菜单以及AJAX数据验证核心代码
2013/05/10 Javascript
JavaScript中的style.cssText使用教程
2014/11/06 Javascript
浅谈jQuery中setInterval()方法
2015/07/07 Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
2016/08/25 Javascript
vue.js初学入门教程(2)
2016/11/07 Javascript
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
2016/11/30 Javascript
JS打开摄像头并截图上传示例
2017/02/18 Javascript
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
2017/09/25 Javascript
详解Angular中实现自定义组件的双向绑定的两种方法
2018/11/23 Javascript
跟老齐学Python之坑爹的字符编码
2014/09/28 Python
Python运用于数据分析的简单教程
2015/03/27 Python
Python实现的字典值比较功能示例
2018/01/08 Python
使用python 爬虫抓站的一些技巧总结
2018/01/10 Python
Python学习笔记之文件的读写操作实例分析
2019/08/07 Python
python实现的多任务版udp聊天器功能案例
2019/11/13 Python
Python基于requests实现模拟上传文件
2020/04/21 Python
关于canvas.toDataURL 在iOS运行失败的问题解决
2020/09/16 HTML / CSS
美国高级工作服品牌:Carhartt
2018/01/25 全球购物
PHP面试题集
2016/12/18 面试题
拉拉队口号
2014/06/16 职场文书
2015应届毕业生自荐信范文
2015/03/05 职场文书
幽灵公主观后感
2015/06/09 职场文书
Python如何利用正则表达式爬取网页信息及图片
2021/04/17 Python
pytorch 运行一段时间后出现GPU OOM的问题
2021/06/02 Python
MySQL数据库安装方法与图形化管理工具介绍
2022/05/30 MySQL