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 相关文章推荐
linux 下实现python多版本安装实践
Nov 18 Python
python使用suds调用webservice接口的方法
Jan 03 Python
python多线程并发让两个LED同时亮的方法
Feb 18 Python
python ---lambda匿名函数介绍
Mar 13 Python
使用Python创建简单的HTTP服务器的方法步骤
Apr 26 Python
python opencv实现信用卡的数字识别
Jan 12 Python
Python利用全连接神经网络求解MNIST问题详解
Jan 14 Python
详解基于Scrapy的IP代理池搭建
Sep 29 Python
Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)
Nov 24 Python
python批量生成身份证号到Excel的两种方法实例
Jan 14 Python
Python实现仓库管理系统
May 30 Python
Django中celery的使用项目实例
Jul 07 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中Date()时间日期函数的使用方法小结
2011/04/20 PHP
PHP计算2点经纬度之间的距离代码
2013/08/12 PHP
php实现网页缓存的工具类分享
2015/07/14 PHP
Laravel下生成验证码的类
2017/11/15 PHP
php项目中类的自动加载实例讲解
2019/09/12 PHP
用ADODB.Stream转换
2007/01/22 Javascript
jQuery 使用手册(四)
2009/09/23 Javascript
如何使用jquery动态加载js,css文件实现代码
2013/04/03 Javascript
JS调用页面表格导出excel示例代码
2014/03/18 Javascript
javascript数组去重小结
2016/03/07 Javascript
jquery横向纵向鼠标滚轮全屏切换
2017/02/27 Javascript
微信小程序 密码输入(源码下载)
2017/06/27 Javascript
JS简单实现数组去重的方法分析
2017/10/14 Javascript
JS实现前端页面的搜索功能
2018/06/12 Javascript
解决VUE中document.body.scrollTop为0的问题
2018/09/15 Javascript
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
JS Html转义和反转义(html编码和解码)的实现与使用方法总结
2020/03/10 Javascript
js+canvas实现转盘效果(两个版本)
2020/09/13 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
2020/09/21 Javascript
JS模拟实现京东快递单号查询
2020/11/30 Javascript
python中map、any、all函数用法分析
2015/04/21 Python
深入解读Python解析XML的几种方式
2016/02/16 Python
Python实现读取并保存文件的类
2017/05/11 Python
Django在win10下的安装并创建工程
2017/11/20 Python
Python WEB应用部署的实现方法
2019/01/02 Python
如何利用Anaconda配置简单的Python环境
2019/06/24 Python
Python短信轰炸的代码
2020/03/25 Python
零基础学python应该从哪里入手
2020/08/11 Python
HTML5新特性之type=file文件上传功能
2018/02/02 HTML / CSS
SmartBuyGlasses德国:购买太阳镜和眼镜
2019/08/20 全球购物
丑小鸭教学反思
2014/02/03 职场文书
消防安全宣传口号
2014/06/10 职场文书
优秀毕业生的求职信
2014/07/21 职场文书
2015年重阳节主持词
2015/07/04 职场文书
责任书格式
2019/04/18 职场文书
使用python向MongoDB插入时间字段的操作
2021/05/18 Python