Python 接口测试response返回数据对比的方法

背景:之前写的接口测试一直没有支持无限嵌套对比key,上次testerhome逛论坛,有人分享了他的框架,看了一下,有些地方不合适我这边自己修改了一下,部署在jenkins上跑完效果还不错,拿出来分享一下。ps:还是要多看看别人写的,新学了不少python自带的一些常用方法。

这次直接上代码,下面写一下这次我新学一些方法和思路。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

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的数据时返回该列表的索引和值,例如:

1

2

3

4

>>> 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

还可以控制索引的起始值开始迭代,例如:

1

2

3

>>> 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,例如:

1

2

>>> isinstance(list1,dict)

False

ps:这个方法真的挺好用的,很基础可以根据返回的布尔类型走不同的if分支。

内置函数format()

这个函数作用就是格式化字符串,这里面不是非要用,我用完感觉还是挺方便的,结构也清晰,在下面举个常用例子。
1.通过位置进行映射:

1

2

3

4

>>> '{},{}'.format('abc',123)

'abc,123'

>>> '{1}{0}{1}'.format('abc',123)

'123abc123'

2.通过下标

1

2

3

>>> 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天多,看着简单,自己写坑还是挺多的。

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/244441.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

记录 | mac安装node

第一种方法(下载官网对应 node 版本的 .pkg文件) 访问nodejs官网(Node.js 中文网)选择合适的版本 双击刚下载的 .pkg 文件,进行安装 安装完成后检查 node 和 npm 的版本 node -v npm -v第二种方法,是使用 Homebrew 使用命令安装 //默认安…

Outlook邮箱设置邮件签名的步骤指南

outlook邮箱如何设置邮件签名? 要为Outlook邮箱设置电子邮件签名,请按照以下步骤操作:   1、打开Outlook,从左侧边栏选择“邮件”选项卡。   2、在文件菜单中,从右上角单击“设置”选项。   3、找到“撰写和答复”部分&…

第四十一篇:移动端调试工具

1.下载工具 npm install vconsole 2.在main.js里全局引用 > import Vconsole from vconsole > new Vconsole()

【Linux进程控制】进程终止和等待(waitpid回收僵尸进程)

前言 什么是写时拷贝 创建子进程,没必要将不会被访问 或只读的数据重新拷贝一份 只有将来会被父或子进程写入的数据才 值得拷贝,提前拷贝也并不会立马使用 一般而言即使是os,也无法提前知道 哪些空间可能被写入 所以os选择写时拷贝技术对父子…

程序员必读:Python 中如何完美处理日志记录?

日志记录在软件开发中扮演着至关重要的角色。它不仅可以帮助开发人员跟踪应用程序的状态和行为,还能提供有价值的诊断信息。Python 提供了内置的 logging 模块,为开发者提供了一个强大且灵活的日志记录工具。 日志的重要性 在软件开发中,对…

uni-app开发者必看:如何轻松适配微信小程序?

一、v-if避坑 看uniapp官方文档上,v-if是支持多端支持的。小程序上仅支持微信小程序,用hbuilderx运行到小程序后就会变成微信的指令语法wx:if。这里有个坑,要特别注意! v-if指令表达式 如果指令表达式为json对象,而…

数据可视化免费化的双面影响探析

近年来数据可视化的免费化也越来越明显,今天就以我作为可视化设计师的经验来和大家分析一下,数据可视化工具免费化所带来的利与弊。 先从好处入手,最明显的就是免费化可以让数据可视化工具得到更广泛的使用。 免费数据可视化工具使得更多人可…

基于 Webpack5 Module Federation 的业务解耦实践

前言 本文中会提到很多目前数栈中使用的特定名词,统一做下解释描述 dt-common:每个子产品都会引入的公共包(类似 NPM 包) AppMenus:在子产品中快速进入到其他子产品的导航栏,统一维护在 dt-common 中,子产品从 dt-com…

06.CSS选择器

CSS选择器 1.选择器的优先级 介绍 通过不同的选择器,选中相同的元素 ,并且为相同的样式名设置不同的值时,就发生了样式的冲突 到底应用哪个样式,此时就需要看优先级了 简单描述 行内样式 > ID选择器 > 类选择器 > …

用 SpringBoot+Redis 解决海量重复提交问题

1 前言 在实际的开发项目中,一个对外暴露的接口往往会面临很多次请求,我们来解释一下幂等的概念:**任意多次执行所产生的影响均与一次执行的影响相同 。**按照这个含义,最终的含义就是 对数据库的影响只能是一次性的,不能重复处理…

一站式API解决方案:工程通API连接营销系统、CRM与用户运营,推动无代码集成

无代码开发的革命:简化电商与CRM系统集成 在信息技术迅猛发展的今天,电商企业迫切需要一个高效、便捷的系统来管理客户关系和销售流程。然而,传统的系统集成方式往往因复杂的API开发而令人望而却步。工程通API应运而生,它的无代码…

Halcon 模板匹配基于相关性

文章目录 基于相关性使用匹配助手 基于相关性 适用场景 模板匹配:当你需要在图像中找到一个已知的模板时,例如在工业生产线上检测产品的特定标识或零件的特征时,相关性匹配是一种简单而有效的方法。实时应用:相关性匹配通常具有较…

<软考高项备考>《论文专题 - 8 论文的项目背景之背景段的写法》

1 背景特征 比较好的背景特征: 语句通顺,简洁明了逻辑清晰、层次分明(建议分1段-2段描写)项目内容描写清楚,和规模相符合(从你写的项目内容和业务描述上,能够勾勒出项目的原型图)技术新颖、路线清晰、描写…

我的隐私计算学习——匿踪查询

笔记内容来自多本书籍、学术资料、白皮书及ChatGPT等工具,经由自己阅读后整理而成。 (一)PIR的介绍 ​ 匿踪查询,即隐私信息检索(Private InformationRetrieval,PIR),是安全多方计算…

Epicypher:CUTANA™ E. coli Spike-in DNA

来源于Escherichia coli(E.coli)的片段DNA可以用作核酸酶靶向切割和释放(CUT&RUN)的实验标准化的spike-in对照。产品CUTANA™ E. coli Spike-in DNA含有足够的材料,可用于100-200个CUT&RUN样本(高丰…

Linux系统编程总结:进程间通信之网络编程

这一块内容放在进程间通信也没有问题,因为进程间通信研究的就是进程之间如何进行协同操作、如何交换数据进行对话的过程,上一篇文章介绍的几种机制都是用在一台机器上的进程互相进行通信的,而网络套接字这种机制则是用来为两台不同机器上的进…

使用apriori来挖掘关联规则

1、apriori最重要的三个概念: 1、支持度 支持度 (Support):指某个商品组合出现的次数与总订单数之间的比例。 在这个例子中,我们可以看到“牛奶”出现了 4 次,那么这 5 笔订单中“牛奶”的支持度就是 4/50.8。 2、置信度 置信度…

Win10错误代码0x80070005的解决方法

在Win10电脑操作过程中,用户可能会遇到各种各样的问题,从而影响到自己正常使用电脑办公。现在,就有用户遇到了错误码0x80070005的提示,但不清楚具体的解决方法。下面小编给大家分享不同的解决方法,解决后Win10电脑就能…

IP属地变化背后的原因

随着互联网的普及和技术的不断发展,IP属地变化的现象越来越受到人们的关注。近日,有网友发现自己的IP属地发生了变化,引发了广泛讨论。那么,IP属地为什么会发生变化呢? 首先,网络环境的变化是导致IP属地变化…

如何设置自动通过好友申请+自动回复?

1. 提供即时服务 当用户发送微信消息时,微信可以自动回复相应的内容,如欢迎语、订单确认、问题解答等,提供即时服务,不需要用户等待或反复发送消息。这种自动回复可以在特定的时间内自动通过好友请求,发送预先设置的…