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 Django批量导入不重复数据
Mar 25 Python
简介Python的collections模块中defaultdict类型的用法
Jul 07 Python
Python获取当前页面内所有链接的四种方法对比分析
Aug 19 Python
Python callable()函数用法实例分析
Mar 17 Python
Python实现的HMacMD5加密算法示例
Apr 03 Python
python3 selenium 切换窗口的几种方法小结
May 21 Python
Python 利用内置set函数对字符串和列表进行去重的方法
Jun 29 Python
python @classmethod 的使用场合详解
Aug 23 Python
使用Python的Turtle库绘制森林的实例
Dec 18 Python
Python GUI编程学习笔记之tkinter事件绑定操作详解
Mar 30 Python
python cookie反爬处理的实现
Nov 01 Python
Python+Selenium实现读取网易邮箱验证码
Mar 13 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
php Static关键字实用方法
2010/06/04 PHP
php文件上传的简单实例
2013/10/19 PHP
php之header的不同用法总结(实例讲解)
2017/11/28 PHP
Javascript实现的分页函数
2006/12/22 Javascript
jQuery AJAX回调函数this指向问题
2010/02/08 Javascript
javascript真的不难-回顾一下基础知识
2013/01/15 Javascript
在新窗口打开超链接的方法小结
2013/04/14 Javascript
jquery淡化版banner异步图片文字效果切换图片特效
2014/04/08 Javascript
JavaScript DSL 流畅接口(使用链式调用)实例
2015/03/15 Javascript
javascript制作的滑动图片菜单
2015/05/15 Javascript
微信小程序 教程之WXSS
2016/10/18 Javascript
javascript实现简单的可随机变色网页计算器示例
2016/12/30 Javascript
详解如何在react中搭建d3力导向图
2018/01/12 Javascript
Vue仿今日头条实例详解
2018/02/06 Javascript
详解webpack4多入口、多页面项目构建案例
2018/05/25 Javascript
小程序获取当前位置加搜索附近热门小区及商区的方法
2019/04/08 Javascript
Vue使用JSEncrypt实现rsa加密及挂载方法
2020/02/07 Javascript
微信小程序上传帖子的实例代码(含有文字图片的微信验证)
2020/07/11 Javascript
基于原生js实现判断元素是否有指定class名
2020/07/11 Javascript
vue 使用async写数字动态加载效果案例
2020/07/18 Javascript
通过实例解析jQ Ajax操作相关原理
2020/09/23 Javascript
JS中锚点链接点击平滑滚动并自由调整到顶部位置
2021/02/06 Javascript
Python实例之wxpython中Frame使用方法
2014/06/09 Python
python中sys.argv参数用法实例分析
2015/05/20 Python
安装Python的教程-Windows
2017/07/22 Python
Python实现的微信支付方式总结【三种方式】
2019/04/13 Python
详解Python 函数如何重载?
2019/04/23 Python
Python 实用技巧之利用Shell通配符做字符串匹配
2019/08/23 Python
个人自我鉴定
2013/11/07 职场文书
资源工程专业毕业生求职信
2014/02/27 职场文书
留学推荐信中文范文
2015/03/26 职场文书
2015年医生个人工作总结
2015/04/25 职场文书
在职证明书模板
2015/06/15 职场文书
升学宴学生致辞
2015/07/27 职场文书
python基于tkinter制作m3u8视频下载工具
2021/04/24 Python
php 文件上传至OSS及删除远程阿里云OSS文件
2021/07/04 PHP