接口自动化测试,一键快速校验接口返回值全部字段_自动化怎么对比不同环境返回的字段是否一致

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

主要组成部分:

二、DeepDiff 使用

2.1 案例一:比较两个JSON

2.2 案例二:比较接口响应

2.3 案例三:正则搜索匹配

三、最后一个小技巧:DeepDiff 黑名单

四、小结


大家在日常开展自动化测试工作时,为了保证接口测试的有效性,少不了要对接口返回的响应字段进行校验断言等操作。当接口返回的字段数量本身就很少时,接口断言操作一般都很容易就能实现,但当接口的返回字段特别多,结构特别复杂时,例如响应字段数量达到了成百上千时,**如何快速实现全部返回字段的校验?**这类问题,相信困扰了很多的正在开展接口测试的小伙伴。

今天针对如何快速审核接口返回值全部字段问题,分享一些解答思路,希望能帮到大家~

其实解决上述之类问题,市面上常见的解决方案有两类:

  • 根据业务校验需求,自定义开发校验规则库
  • 借助现有的第三方库

今天,我们先来聊聊,如何借助现有的第三方库来解决: 快速校验API接口返回的全部字段。由于当今大部分接口都是基于Restful API,后续我介绍中,我们假设接口响应体格式以JSON为例。

要满足上面的实现需求,第三方库方案有很多,比如常见的就有:deepdiffdifflibjson-diffjson_tools 等,这些三方库之间,都有各自侧重点,本篇文章,重点介绍:如何借助DeepDiff库来解决快速校验接口返回字段的问题

一、认识一下,DeepDiff 介绍

Deepdiff模块常用来校验两个对象是否一致,并找出其中差异之处。其中提供了三个类,DeepDiff,DeepSearch和DeepHash,官网地址:DeepDiff OLD 4.0.7 documentation! — DeepDiff 4.0.7 documentation ,当前最新版本为:V5.5.0

主要组成部分:
  • DeepDiff:比较两个对象,对象可以是字段、字符串等可迭代的对象,针对对象的深层差异,递归查找所有更改。
  • DeepSearch:在对象中搜索其他对象
  • DeepHash:根据对象的内容进行哈希处理

DeepDiff 的初衷是用来找出不同数据的差别,可以比较JSONXML文本类的,也可以比较图片,在使用了一下之后,其实我们完全可以直接使用它作为测试的断言,这也是从另一个思考角度提供了一种全新的校验思路

二、DeepDiff 使用

当你看完上述的介绍,相信还是一脸懵,不知如何下手,接下来,就通过几个案例来进一步感受一下Deepdiff的功能和作用。

使用之前,先安装:

pip install deepdiff

2.1 案例一:比较两个JSON

利用Deepdiff 比较 JSON 的差异:

import pytest
import requests
import pprint
from deepdiff import DeepDiff

class TestDemo(object):

    def test_case_01(self):
        a = {"Object": {
            "code": "0",
            "message": "success"
        },
            "code": "0",
            "message": "success"
        }

        b = {"Object": {
            "code": "0",
            "message": "failure"
        },
            "message": "success",
            "timestamp": "1614301293"
        }

        pprint.pprint(DeepDiff(a, b))

上述案例,作用是比较a和b两者的差异,result 差异的输出结果是:

.{'dictionary_item_added': [root['timestamp']],
 'dictionary_item_removed': [root['code']],
 'values_changed': {"root['Object']['message']": {'new_value': 'failure',
                                                  'old_value': 'success'}}}

上述输出结果中,实际上根据这个返回的 json 获取所有的差别。主要是对比对象之间的值、类型前后之间的变化以及删除的或者增加的情况key进行了结果输出。

主要包含以下四种情况:

  • 1、type_changes:类型改变的key
  • 2、values_changed:值发生变化的key
  • 3、dictionary_item_added:字典key添加
  • 4、dictionary_item_removed:字段key删除
2.2 案例二:比较接口响应

有了案例一的基础,进一步,我们将本地定义写死的变量值改成采取调用接口的方式(更符合实际接口测试),通过发起请求,获取响应、并结合Deepdiff来断言使用。

核心思路:先定义预期的响应结构体(意味着,你得事先知道你期望的结果是什么),再根据实际返回的结构体两者通过Deepdiff进行自动比较。

import pytest
import requests
import pprint
from deepdiff import DeepDiff


class TestDemo(object):

    def setup_class(self):
        self.response = requests.get('http://www.httpbin.org/json').json()

    def test_case_02(self):
        expected_reps = {'slideshow': {'author': 'Yours Truly', 'date': 'date of publication',
                                       'slides': [{'title': 'Wake up to WonderWidgets!', 'type': 'all'}, {
                                           'items': ['Why <em>WonderWidgets</em> are great',
                                                     'Who <em>buys</em> WonderWidgets'], 'title': 'Overview',
                                           'type': 'all'}], 'title': 'Sample Slide Show'}}
        pprint.pprint(DeepDiff(expected_reps, self.response))

由于实际返回的结构体和预期定义待校验的结构体数据完全一样,因此上述代码输出结果为:{},即两者没有差异。(也意味着实际和预期结果一致)

在此基础上,如果我们把上述expected_reps预期结构体中的authorYours Truly修改为Yours,再执行一次,则输出的结果为:

{'values_changed': {"root['slideshow']['author']": {'new_value': 'Yours Truly',
                                                    'old_value': 'Yours'}}}


![img](https://img-blog.csdnimg.cn/img_convert/63954681aab35556172b6d98e6aec776.png)
![img](https://img-blog.csdnimg.cn/img_convert/7f04beff32f02d3ca42b0126acc0a434.png)
![img](https://img-blog.csdnimg.cn/img_convert/3cb98d3071d99acec4349fffa796bcdb.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

  • 18
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值