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赋值操作方法分享
Mar 23 Python
用Python进行基础的函数式编程的教程
Mar 31 Python
在Python中进行自动化单元测试的教程
Apr 15 Python
python3+PyQt5实现支持多线程的页面索引器应用程序
Apr 20 Python
详解Python_shutil模块
Mar 15 Python
Python基础之函数的定义与使用示例
Mar 23 Python
详解pandas删除缺失数据(pd.dropna()方法)
Jun 25 Python
Python中关于浮点数的冷知识
Sep 22 Python
python识别验证码图片实例详解
Feb 17 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
Feb 25 Python
Jupyter Notebook的连接密码 token查询方式
Apr 21 Python
Pytorch中TensorBoard及torchsummary的使用详解
May 12 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
改造一台复古桌面收音机
2021/03/02 无线电
PHP实现时间轴函数代码
2011/10/08 PHP
基于thinkPHP类的插入数据库操作功能示例
2017/01/06 PHP
PHP/HTML混写的四种方式总结
2017/02/27 PHP
PHP实现的ID混淆算法类与用法示例
2018/08/10 PHP
JavaScript 权威指南(第四版) 读书笔记
2009/08/11 Javascript
jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML
2011/10/16 Javascript
js判断上传文件的类型和大小示例代码
2013/10/18 Javascript
js 获取元素下面所有li的两种方法
2014/04/14 Javascript
IE中JS跳转丢失referrer问题的2个解决方法
2014/07/18 Javascript
jquery实现先淡出再折叠收起的动画效果
2015/08/07 Javascript
第一章之初识Bootstrap
2016/04/25 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
原生JS发送异步数据请求
2017/06/08 Javascript
vue源码解析之事件机制原理
2018/04/21 Javascript
layui获取多选框中的值方法
2018/08/15 Javascript
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
详解vue中axios的使用与封装
2019/03/20 Javascript
[06:59]DOTA2-DPC中国联赛3月7日Recap集锦
2021/03/11 DOTA
python实现图片批量剪切示例
2014/03/25 Python
简单介绍Python中的struct模块
2015/04/28 Python
Python多进程分块读取超大文件的方法
2016/04/13 Python
Python基于TCP实现会聊天的小机器人功能示例
2018/04/09 Python
正则给header的冒号两边参数添加单引号(Python请求用)
2019/08/09 Python
详解python中eval函数的作用
2019/10/22 Python
解决Python中回文数和质数的问题
2019/11/24 Python
django 框架实现的用户注册、登录、退出功能示例
2019/11/28 Python
python Qt5实现窗体跟踪鼠标移动
2019/12/13 Python
CSS3实现图片抽屉式效果的示例代码
2019/11/06 HTML / CSS
使用数据结构给女朋友写个Html5走迷宫游戏
2019/11/26 HTML / CSS
Crabtree & Evelyn欧盟:豪华洗浴、身体和护发
2021/03/09 全球购物
北大青鸟学生求职信
2013/09/24 职场文书
2014领导班子四风问题对照检查材料思想汇报
2014/09/21 职场文书
在校证明模板
2015/06/17 职场文书
小学家庭教育心得体会
2016/01/14 职场文书
2019年XX公司的晨会制度及流程!
2019/07/23 职场文书