当前位置:首页 >知识 >自动化实践 应用了json全量对比验证

自动化实践 应用了json全量对比验证

2024-06-30 17:31:05 [百科] 来源:避面尹邢网

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

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

1、自动背景

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

2、实践成果

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

自动化实践 应用了json全量对比验证

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

自动化实践 应用了json全量对比验证

3、实践过程

3.1 源组件:JSONCompareUtils

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

自动化实践 应用了json全量对比验证

引入方式:

maven配置

版本说明

<dependency>

<groupId>com.dewu.tester</groupId>

<artifactId>artemis</artifactId>

<version>1.1.9-SNAPSHOT</version>

</dependency>

  1. 发布JSONChecker的工具。
  2. 发布使用样例:JSONCompareExample

方法名:JSONCompare

参数:JSON expect, JSON actual, Properties properties

参数名

参数类型

类名说明

expect

期望比对的json串

com.alibaba.fastjson.JSON

actual

真实比对的json串

com.alibaba.fastjson.JSON

properties

比对方式和比对降噪配置

java.util.Properties

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());        }    }    TrackingUtils.tracking();    return diffs;}

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

改造后的组件:

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

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

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

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

import jsonimport requestsdef call(env_vars, g_vars, l_vars, sys_funcs, asserts, logger, **kwargs):    param = sys_funcs.get_call_param()    path = "http://

(责任编辑:时尚)

    推荐文章
    热点阅读