JSONCompareUtils: Full JSON Comparison Component for Automated Testing

JSONCompareUtils, a full‑JSON comparison component added to the Artemis framework, lets automated tests recursively compare large JSON responses via a Maven‑provided library with Java and Python wrappers, streamlining service‑splitting, BC‑traffic, and cross‑environment validation while dramatically cutting manual verification effort and speeding regression testing.

DeWu Technology
DeWu Technology
DeWu Technology
JSONCompareUtils: Full JSON Comparison Component for Automated Testing

Background: With the deepening of left‑shift automated testing, many demands require full JSON response comparison between split code and the baseline release.

Practice results: The new automation platform added a full‑JSON comparison component, greatly improving testing efficiency in service‑splitting and BC‑traffic‑splitting projects.

Component details: The source component JSONCompareUtils, provided by the Artemis framework, offers precise comparison of large JSON strings using a recursive algorithm with configurable noise‑reduction.

Integration method: Add the Maven dependency

<dependency>
  <groupId>com.dewu.tester</groupId>
  <artifactId>artemis</artifactId>
  <version>1.1.9‑SNAPSHOT</version>
</dependency>

and use the method JSONCompare(JSON expect, JSON actual, Properties properties) with parameters expect, actual, and properties.

Implementation example (Java):

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

Python wrapper example for invoking the component:

import json, 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"
    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))
    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="存在不一致比对数据 :")
    return res

Practice process: Steps include extracting JSON1 and JSON2 from interfaces, adding the component, and performing the comparison.

Scenarios covered: service‑splitting validation, BC‑traffic splitting, cross‑environment comparison, and list‑order normalization using properties such as "$.data=order_no" or "$.data=merchantId".

Conclusion: The component significantly reduces manual verification effort and accelerates regression testing for large‑scale service‑splitting initiatives.

Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

JavaAutomated TestingAPI comparisonComponentJSONmaven
DeWu Technology
Written by

DeWu Technology

A platform for sharing and discussing tech knowledge, guiding you toward the cloud of technology.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.