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中优化NumPy包使用性能的教程
Apr 23 Python
python创建临时文件夹的方法
Jul 06 Python
Python中表示字符串的三种方法
Sep 06 Python
python中map()函数的使用方法示例
Sep 29 Python
对python中的float除法和整除法的实例详解
Jul 20 Python
Python学习笔记之迭代器和生成器用法实例详解
Aug 08 Python
pytorch numpy list类型之间的相互转换实例
Aug 18 Python
Python实现把类当做字典来访问
Dec 16 Python
在win64上使用bypy进行百度网盘文件上传功能
Jan 02 Python
对Tensorflow中Device实例的生成和管理详解
Feb 04 Python
关于python中导入文件到list的问题
Oct 31 Python
python源码剖析之PyObject详解
May 18 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
给海燕B411配件机起死回生配上件
2021/03/02 无线电
php下MYSQL limit的优化
2008/01/10 PHP
PHP添加MySQL数据记录代码
2008/06/07 PHP
用php来限制每个ip每天浏览页面数量的实现思路
2015/02/24 PHP
laravel 操作数据库常用函数的返回值方法
2019/10/11 PHP
浅谈PHP之ThinkPHP框架使用详解
2020/07/21 PHP
jquery.validate使用攻略 第二部
2010/07/01 Javascript
document.execCommand()的用法小结
2014/01/08 Javascript
JavaScript字符串对象replace方法实例(用于字符串替换或正则替换)
2014/10/16 Javascript
javascript中setTimeout和setInterval的unref()和ref()用法示例
2014/11/26 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
2015/10/21 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
基于JS+Canves实现点击按钮水波纹效果
2016/09/15 Javascript
完美解决spring websocket自动断开连接再创建引发的问题
2017/03/02 Javascript
使用原生js写ajax实例(推荐)
2017/05/31 Javascript
vue 中自定义指令改变data中的值
2017/06/02 Javascript
js案例之鼠标跟随jquery版(实例讲解)
2017/07/21 jQuery
JS实现的透明度渐变动画效果示例
2018/04/28 Javascript
详解如何构建Promise队列实现异步函数顺序执行
2018/10/23 Javascript
nodejs微信开发之接入指南
2019/03/17 NodeJs
ES6知识点整理之函数对象参数默认值及其解构应用示例
2019/04/17 Javascript
VUE 实现动态给对象增加属性,并触发视图更新操作示例
2019/11/29 Javascript
javascript开发实现贪吃蛇游戏
2020/07/31 Javascript
OpenLayers3实现地图鹰眼以及地图比例尺的添加
2020/09/25 Javascript
Python Web框架Flask中使用百度云存储BCS实例
2015/02/08 Python
pygame学习笔记(4):声音控制
2015/04/15 Python
python2.7 mayavi 安装图文教程(推荐)
2017/06/22 Python
Django框架登录加上验证码校验实现验证功能示例
2019/05/23 Python
浅析Python 引号、注释、字符串
2019/07/25 Python
Python 利用Entrez库筛选下载PubMed文献摘要的示例
2020/11/24 Python
英国在线汽车和面包车零件商店:Car Parts 4 Less
2018/08/15 全球购物
马德里竞技官方网上商店:Atletico Madrid Shop
2019/03/31 全球购物
在职研究生自我鉴定
2013/10/16 职场文书
法人委托书的范本格式
2014/09/11 职场文书
MySQL删除和插入数据很慢的问题解决
2021/06/03 MySQL
关于Oracle12C默认用户名system密码不正确的解决方案
2021/10/16 Oracle