自动化实践-全量Json对比在技改需求提效实践

这篇具有很好参考价值的文章主要介绍了自动化实践-全量Json对比在技改需求提效实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 背景

随着自动化测试左移实践深入,越来越多不同类型的需求开始用自动化测试左移来实践,在实践的过程中也有了新的提效诉求,比如技改类的服务拆分项目或者BC流量拆分的项目,在实践过程中,这类需求会期望不同染色环境在相同的配置条件下,拆分后的代码和基准release代码的接口响应response有全量对比结果才能更好达到需求验证点。

2 实践成果

在这种需要对接口返回response做全量json对比的背景下,商家域新的自动化平台新增了json全量对比的组件。在多个技改项目,比如服务拆分和BC流量拆分项目中这种比较大,花费人日比较多的项目测试中,应用了json全量对比验证。在实践过程中,比如原来要先写自动化,把响应结果挨个验证,或者在不同染色请求跟拆分前代码分别执行再对比结果。

在这种技改需求诉求下,全量json对比组件很好地满足了需要验证大量的服务拆分前接口和服务拆分后的接口返回json值全量对比。以商家服务拆分技改为例,技改跨几个迭代,需要回归大量的接口(目前该技改测试的接口已过千,还在跨迭代测试中)。测试过程利用全量json对比组件,不光测试一轮极大提高了测试效率,在二轮还可以用自动化回归提效。

3 实践过程

3.1 源组件:JSONCompareUtils

本次全量json对比引用的源组件是JSONCompareUtils,是Artemis框架提供的。JSONCompareUtils提供基于万行级Json的精确比对能力,这个能力基于一套嵌套降噪配置的递归算法实现。在配置合理的情况下,能快速进行较大Json串的比对。详情如下:

引入方式:

自动化实践-全量Json对比在技改需求提效实践,得物技术,自动化,json,测试

方法名:JSONCompare

参数:JSON expect, JSON actual, Properties properties

自动化实践-全量Json对比在技改需求提效实践,得物技术,自动化,json,测试

public static Map<String, String> JSONCompare(JSON expect, JSON actual, Properties properties) {
    Map<String, String> diffs = new HashMap<>();
​
    if (null == expect && null == actual) {
        return diffs;
    } else if (expect instanceof JSONObject && actual instanceof JSONObject) {
        diffs.putAll(JSONObjectCompare((JSONObject) expect, (JSONObject) actual, "$", properties));
    } else if (expect instanceof JSONArray && actual instanceof JSONArray) {
        diffs.putAll(JSONArrayCompare((JSONArray) expect, (JSONArray) actual, "$", properties));
    } else {
        diffs.put("$", (expect + COMPARE_ARROW + actual) + "not the same instance type");
    }
​
    if (!org.springframework.util.CollectionUtils.isEmpty(diffs)) {
        for (Map.Entry<String, String> entry : diffs.entrySet()) {
            logger.info("[key]" + entry.getKey() + "," + "[value]" + entry.getValue());
        }

3.2 JSONCompareUtils组件改造

JSONCompareUtils组件改造后适应于目前效能平台适用的自动化平台组件。

改造后的组件:

改造后的组件名:21471: [JSON] 全量比对-两Json传入:对比接口提取返回与入参的json异同。

修改点:改成对比两个接口提取返回,提取字段取名json1、json2。

入参保留propeties:返回多个时候的排序字段,没有默认空,不排序。

举例:"propeties": "$.data.order=order_no",$.data.order为list[Object],以Object中order_no排序后,再对list做对比。

import json
import requests
​
def call(env_vars, g_vars, l_vars, sys_funcs, asserts, logger, **kwargs):
    param = sys_funcs.get_call_param()
    path = "http://******/artemis/component/interface-platform/compare/json"
    method = "POST"
    actual1 = l_vars.get("json1")
    actual2 = l_vars.get("json2")
​
    headers = {
        "Content-Type":"application/json; charset=utf8",
    }
    body = {
        "expect" : json.dumps(actual1,ensure_ascii=False),
        "actual" : json.dumps(actual2,ensure_ascii=False),
        "properties" : str(param["propeties"])
    }
    logger.info("Artemis请求body:" + str(body))
    try:
        resq = requests.post(
            path,
            data = json.dumps(body),
            headers = headers,
            timeout=8
        )
        res = json.loads(resq.text)
        logger.info("======================artemis组件结果======================")
        logger.info(res)

        asserts.assertTrue(res["success"], msg="调用artemis-interface异常")
        asserts.assertEqual(str(res["data"]), "{}", msg="存在不一致比对数据 :")
    except Exception as e:
        logger.info(f'执行JSON比对失败【{str(e)}】')
        raise e
    return res
 

3.3 组件应用

步骤1: 提取接口返回json1、json2

自动化实践-全量Json对比在技改需求提效实践,得物技术,自动化,json,测试

自动化实践-全量Json对比在技改需求提效实践,得物技术,自动化,json,测试 

 

步骤2: 添加组件

自动化实践-全量Json对比在技改需求提效实践,得物技术,自动化,json,测试

 

步骤3:对比上面两个接口的提取的返回值

自动化实践-全量Json对比在技改需求提效实践,得物技术,自动化,json,测试

 

3.4 实践场景

3.4.1 实践一

提取接口返回全量标准被参照对比的标准json1,再提取新代码中期望跟标准json1对比的json2,添加全量json组件,对比json1和json2的值。

测试场景:服务拆分技改类需求中需要对不同服务两个或者多个接口返回response全量json结果对比的场景;

提取被参照对比全量json1见图一,对比全量json2见图二,组件执行结果见图三:

自动化实践-全量Json对比在技改需求提效实践,得物技术,自动化,json,测试

图一

自动化实践-全量Json对比在技改需求提效实践,得物技术,自动化,json,测试

图二

自动化实践-全量Json对比在技改需求提效实践,得物技术,自动化,json,测试

图三

3.4.2 实践二

返回json多次设置、多次对比数据。

测试场景:BC流量拆分前和拆分后的代码不同接口路由但是同一个业务功能,返回response全量json需要在不同染色多次对比结果的场景

json1、json2可进行多次设置、多次对比。

自动化实践-全量Json对比在技改需求提效实践,得物技术,自动化,json,测试

 

3.4.3 实践三

全量json对比不同环境返回数据。

测试场景:拆分前和拆分后的代码相同接口需要在相同配置不同染色环境下返回response全量json结果对比的场景。

服务拆分的接口,不同染色环境对比返回的结果:举例如下:

自动化实践-全量Json对比在技改需求提效实践,得物技术,自动化,json,测试

自动化实践-全量Json对比在技改需求提效实践,得物技术,自动化,json,测试 

 

3.4.4 实践四

全量json对比list结果返回顺序不一致的数据。

测试场景:拆分前和拆分后的代码相同接口返回response全量json需要先排序再对比结果的场景

Demo如下:

服务拆分的接口,请求是一个list数组,每次调用返回的list里面的顺序可能不一致,可利用组件的参数先排序再对比json返回结果,两个接口返回的json如下:

自动化实践-全量Json对比在技改需求提效实践,得物技术,自动化,json,测试 

可用组件的"propeties": "$.data=userId"(或者"propeties": "$.data=merchantId")json里面的list先排序再对比,这样就规避了list返回顺序不一致的情况:

自动化实践-全量Json对比在技改需求提效实践,得物技术,自动化,json,测试 

4 结论

在实际测试过程中,技改的需占比也不小,几乎每个迭代每个域都会有技改类的需求。本文为例,举了几个例子涉及提效需求点:

1.服务拆分技改类需求中需要对不同服务两个或者多个接口返回response全量json结果对比的场景;

2.拆分前和拆分后的代码相同接口需要在相同配置不同染色环境下返回response全量json结果对比的场景;

3.拆分前和拆分后的代码相同接口返回response全量json需要先排序再对比结果的场景;

4.BC流量拆分前和拆分后的代码不同接口路由但是同一个业务功能,返回response全量json需要在不同染色多次对比结果的场景;

以上场景均能通过自动化+全量json对比组件的方式去提效测试,且在后续回归中直接用自动化覆盖回归,尤其在商家服务拆分跨好几个迭代涉及上千个接口的大的技改类需求中,达到明显的提效效果。

公司目前提供了很多现有的平台和小工具,不同类型的技改需求可以利用平台+小工具模式去实践应用,适合的场景下合理地应用,可以达到事半功倍的效果。

*文/mango

本文属得物技术原创,更多精彩文章请看:得物技术官网

未经得物技术许可严禁转载,否则依法追究法律责任!文章来源地址https://www.toymoban.com/news/detail-642090.html

到了这里,关于自动化实践-全量Json对比在技改需求提效实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 接口自动化测试实践指导(下):接口自动化测试断言设置思路

    作者 : 石臻臻 , CSDN博客之星Top5 、 Kafka Contributor 、 nacos Contributor 、 华为云 MVP , 腾讯云TVP , 滴滴Kafka技术专家 、 KnowStreaming 。 KnowStreaming 是滴滴开源的Kafka运维管控平台, 有兴趣一起参与参与开发的同学,但是怕自己能力不够的同学,可以联系我,当你导师带你参与开源! 。 在

    2024年01月18日
    浏览(76)
  • Jmeter接口自动化测试 —— Jmeter断言之Json断言

     json断言可以让我们很快的定位到响应数据中的某一字段,当然前提是响应数据是json格式的,所以如果响应数据为json格式的话,使用json断言还是相当方便的。 还是以之前的接口举例 添加一个Json断言 维护上想要判断的字段 查看结果 ​ 我们将期望的值故意改成错的545111看看

    2024年02月05日
    浏览(62)
  • Android常用9种自动化测试框架对比,Appium有哪些优势?

    随着移动终端的普及,手机应用越来越多,也越来越重要。 App的回归测试用例数量也越来越多,全量回归也越来越消耗时间。 移动 APP自动化测试 的难点 移动 APP的UI自动化测试长久以来一直是一个难点,难点在于UI的”变”, 变化导致自动化用例的大量维护。 从分层测试的角

    2024年01月21日
    浏览(44)
  • Docker 自动化部署(实践)

    docker search jenkins查看需要的jenkins镜像源 docker pull jenkins/jenkins 拉取jenkins镜像 docker images查看下载的镜像源 docker ps 查看包含启动以及未启动的容器 docker ps -a查看启动的容器 docker rm 容器id/容器名称 删除容器 docker rm -f 容器id/容器名称 删除容器(强制删除容器,运行状态也删除

    2024年02月07日
    浏览(48)
  • 朝夕光年游戏自动化测试实践

    朝夕光年是面向全球用户与开发者的游戏研发与发行业务品牌,致力于服务全球玩家,帮助玩家在令人惊叹的虚拟世界中一起玩耍与创造。 在游戏的研发过程中,游戏自动化一直是开展难度较大的工程,具体包括机房机架、设备调度、软件框架、算法调校这些中台建设,复杂

    2024年02月10日
    浏览(36)
  • 接口自动化测试工程实践分享

    本文作者:欧海锋,碧桂园服务高级测试工程师,致力于研究测试技术。 一、前言 接口自动化测试是一种软件测试技术,它通过模拟用户系统操作来对系统的接口进行自动化测试。接口自动化测试的目的是为了提高测试效率和准确性,同时降低测试成本和周期。以下是为什

    2024年04月17日
    浏览(48)
  • 低代码自动化测试的实践

    何为低代码测试 传统上,功能、 UI、端到端等测试自动化的实现都涉及编写测试脚本,代替测试人员执行重复的手动测试任务。自动化脚本的开发工作通常由 QA 工程师或开发人员完成,这需要编写大量代码。 而低代码甚至无代码的理念也是在自动化测试技术比较成熟之后出

    2024年01月17日
    浏览(50)
  • 懒人自动化生成e2e测试文件:JSON => playwright

    本工具实现的是:使用简单的 JSON 配置,生成可执行的 playwright UI 测试文件。 然后通过项目内已经配置好的 playwright 配置实现 UI 测试。 工具工作流程: 期望达到的目的是: ✅ 基础页面(进入页面)即获取页面快照对比 ✅ 等待页面某些请求结束,才进行页面快照对比 ⚪️

    2024年02月16日
    浏览(44)
  • 如何在pytest接口自动化框架中扩展JSON数据解析功能?

    上期内容简单说到了。params类类型参数的解析方法。相较于简单。本期内容就json格式的数据解析,来进行阐述。 在MeterSphere中,有两种方式可以进行json格式的数据维护。一种是使用他们自带的JsonSchema来填写key-value表单。另一种就是手写json。 手写json在日常工作中效率较低,

    2024年02月11日
    浏览(52)
  • 基于Java的接口自动化传参是json格式,如何转义

    废话少说,直接贴刚新鲜完成的源码; 框架是Java+springboot+mybatisplus+testng+jenkins+git

    2024年01月19日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包