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 Matplotlib库入门指南
May 18 Python
python下os模块强大的重命名方法renames详解
Mar 07 Python
Python实现的堆排序算法原理与用法实例分析
Nov 22 Python
简单谈谈python中的lambda表达式
Jan 19 Python
pandas多级分组实现排序的方法
Apr 20 Python
python2 与 python3 实现共存的方法
Jul 12 Python
python在回调函数中获取返回值的方法
Feb 22 Python
Python实现堡垒机模式下远程命令执行操作示例
May 09 Python
Python 用turtle实现用正方形画圆的例子
Nov 21 Python
python实现简单的购物程序代码实例
Mar 03 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
Mar 04 Python
Python insert() / append() 用法 Leetcode实战演示
Mar 31 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会员权限控制实现原理分析
2011/05/29 PHP
PHP发明人谈MVC和网站设计架构 貌似他不支持php用mvc
2011/06/04 PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
2012/02/04 PHP
php+ajax无刷新上传图片实例代码
2015/11/17 PHP
thinkphp3.x中display方法及show方法的用法实例
2016/05/19 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
2019/10/09 PHP
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
利用jquery操作select下拉列表框的代码
2010/06/04 Javascript
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
2010/06/30 Javascript
Jquery插件之打造自定义的select标签
2011/11/30 Javascript
现代 JavaScript 开发编程风格Idiomatic.js指南中文版
2014/05/28 Javascript
Javascript中的高阶函数介绍
2015/03/15 Javascript
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
基于jQuery实现的向下滑动二级菜单效果代码
2015/08/31 Javascript
深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解
2016/04/03 Javascript
JavaScript解八皇后问题的方法总结
2016/06/12 Javascript
详解nodejs express下使用redis管理session
2017/04/24 NodeJs
Vue.js tab实现选项卡切换
2017/05/16 Javascript
Javascript(es2016) import和require用法和区别详解
2017/08/11 Javascript
Vuex中mutations与actions的区别详解
2018/03/01 Javascript
如何获取vue单文件自身源码路径
2019/05/06 Javascript
javascript的惯性运动实现代码实例
2019/09/07 Javascript
uni-app如何实现增量更新功能
2020/01/03 Javascript
Python使用numpy实现BP神经网络
2018/03/10 Python
解决Pycharm出现的部分快捷键无效问题
2018/10/22 Python
python for循环remove同一个list过程解析
2019/08/14 Python
Win10环境中如何实现python2和python3并存
2020/07/20 Python
在职人员函授期间自我评价分享
2013/11/08 职场文书
优秀团员个人事迹材料
2014/01/29 职场文书
广告设计应届生求职信
2014/03/01 职场文书
元旦晚会活动总结
2014/07/09 职场文书
2014年女职工工作总结
2014/11/27 职场文书
素质拓展训练感想
2015/08/07 职场文书
numpy数据类型dtype转换实现
2021/04/24 Python
浅谈css实现背景颜色半透明的两种方法
2021/12/06 HTML / CSS
nginx rewrite功能使用场景分析
2022/05/30 Servers