美文网首页jmeter
jdbc 比较api的方法

jdbc 比较api的方法

作者: 水岩 | 来源:发表于2019-03-06 21:50 被阅读3次

////

//在测试计划中导入odbc6.jar到classpath里头

//打jar包,put in path where jmeter bin is Jmeter软件的lib\ext目录下

import com.alibaba.fastjson.*;

import java.util.*;

public class JsonDiff{

    /**

    * 对JSON进行排序

    * @param jsonStr

    * @return

    */

    @SuppressWarnings({ "rawtypes", "unchecked" })

    public static List<TreeMap<String,Object>> generateSortedTreeMap(String jsonStr){

        //最终接受排序后的数据

        List<TreeMap<String,Object>> dataList = new ArrayList<TreeMap<String,Object>>();

        //对数据转换成有序的Map

        List<Map> list = new ArrayList<Map>();

        try {

            list = JSON.parseArray(jsonStr, Map.class);

        }catch(Exception e) {

            System.out.println("+++++++++转换JSON数组失败,尝试转换成JSON对象:"+e.getMessage());

            try {

                Map obj = JSON.parseObject(jsonStr, Map.class);

                list.add(obj);

            }catch(Exception e1) {

                System.out.println("+++++++++JSON对象转换失败:"+e.getMessage());

            }

        }

        for(Map map:list) {

            //获取JSON的键

            Set<String> keys = (Set<String>)map.keySet();

            List<String> sortKeys = new ArrayList<String>(keys);

            //对键进行排序

            Collections.sort(sortKeys);

            //使用有序列表来存储

            TreeMap<String,Object> tree = new TreeMap<String,Object>();

            for(String key:sortKeys) {

                tree.put(key, map.get(key));

            }

            dataList.add(tree);

        }

        return dataList;

    }

    /**

    * 对比两个JSON

    * @param json1

    * @param json2

    * @return

    */

    public static boolean compareJSON(String json1,String json2) {

        List<TreeMap<String,Object>> data1List = generateSortedTreeMap(json1);

        List<TreeMap<String,Object>> data2List = generateSortedTreeMap(json2);

        for(TreeMap<String,Object> map:data1List) {

            if(!data2List.contains(map)) {

                return false;

            }

        }

        return true;

    }

/*

    public static void main(String[] args) {

        //JSON字符串

        //String json1 = "[{\"size\": 6,\"data\": \"hello linux\",\"data1\":{\"aa\":1,\"id\": {\"userid\": 3333,\"name\": \"hello world\"}}}},{\"data\": \"world\",\"size\": 7}]";

        //String json2 = "[{\"data\": \"world\",\"size\": 7}, {\"data1\":{\"aa\":1,\"id\": {\"userid\": 3333,\"name\": \"hello world\"}},\"data\": \"hello linux\",\"size\": 6}]";

        //String json1 = "[{\"name\": \"work\",\"passwd\": \"123456\",\"classname\": [ {\"name\": \"match\",\"score\":78},{\"name\": [ {\"name\": \"match\",\"score\":78} ]} ],\"teacher\":[ {\"name\": \"bob\",\"classname\": \"99\" }]}]";

        //String json2 = "[{\"name\": \"work\",\"passwd\": \"123456\",\"classname\": [ {\"score\":78,\"name\": \"match\"},{\"name\": [ {\"name\": \"match\",\"score\":78} ]} ],\"teacher\":[ {\"name\": \"bob\",\"classname\": \"99\" }]}]";

        //String json1="{\"size\": 6,\"data\": \"hello linux\"}";

        //String json2="{\"data\": \"hello linux\",\"size\": 6}";

        //String json1 = "{\"name\": \"testuser\",\"passwd\": \"123456\",\"classname\": [ {\"name\": \"match\",\"score\":78},{\"name\": [ {\"name\": \"match\",\"score\":78} ]} ],\"teacher\":[ {\"name\": \"bob\",\"classname\": \"99\" }]}";

        //String json2 = "{\"passwd\": \"123456\",\"name\": \"testuser\",\"classname\": [ {\"name\": \"match\",\"score\":78},{\"name\": [ {\"name\": \"match\",\"score\":78} ]} ],\"teacher\":[ {\"name\": \"bob\",\"classname\": \"99\" }]}";

        boolean result = compareJSON(json1, json2);

        System.out.println(result);

    }

*/

}

//再然后新建一个BeanShell PostProcessor

import com.alibaba.fastjson.*;

import java.util.*;

import JsonDiff.*;

String response_data =prev.getResponseDataAsString(); //获取web响应内容

JSONObject obj=JSON.parseObject(response_data);

String app_str = obj.get("Data").toString().toLowerCase();

log.info("response:"+app_str);

List results=vars.getObject("sqlresult"); //获取sql查询

String sql_str=JSONObject.toJSONString(results).toLowerCase(); //list转换为json数据

log.info("SQL查询:"+sql_str);

boolean result=JsonDiff.compareJSON(apps_str,sql_str)

if(result){

    log.info("数据一致");

    }else{  //用预期的JSON串和查询到的结果JSON串进行对比

    //如果不一样的情况下,说明数据库的断言失败,可能是程序的问题

    String result =prev.getResponseDataAsString();  //拿到实际结果的值,用于存放到返回数据中

    prev.setResponseCode("506");            //我们自定义了一个CODE码,告诉结果显示的CODE是这个

    prev.setSuccessful(false);  //设置结果为错误

    prev.setResponseMessage("接口断言通过,数据库校验未通过");  //设置一个提示信息,大概是说明原因导致的

    //写入结果返回的结果,还有数据库校验未通过,我们的预期数据库的值是,实际的值是,加上这个是为了方便定位问题

    prev.setResponseData(result+",\n数据库校验未通过,\n预期值:"+str+",\n实际值:"+apps_str);

    } 

https://blog.51cto.com/fengwan/2069393

相关文章

  • jdbc 比较api的方法

    //// //在测试计划中导入odbc6.jar到classpath里头 //打jar包,put in path ...

  • 第一章 简介

    1.1 JDBC API 简介 JDBC API 为 Java 语言提供了一种访问关系型数据库的方法。有了 JDB...

  • Mybatis源码分析——Select语句的执行过程分析(下)

    正文 我们上篇文章讲到了查询方法里面的doQuery方法,这里面就是调用JDBC的API了,其中的逻辑比较复杂,我...

  • JDBC和数据库连接池

    1.JDBC介绍1.1 1.1 JDBC介绍 2.JDBC之API2.1 2.1 JDBC之API 3.JDBC例...

  • 第二章 目标

    2.1 JDBC API 的历史 JDBC API 是一种成熟的技术,1997 年, 首次提出了 JDBC 规范,...

  • 6.JDBC学习笔记

    本文内容 1.什么是JDBC以及为什么要使用JDBC 2.JDBC核心API的讲解 3.使用JDBC核心API进行...

  • 基本

    概述 1.什么是JDBC以及为什么要使用JDBC 2.JDBC核心API的讲解 3.使用JDBC核心API进行CR...

  • ResultSet的记录数

    JDBC中的ResultSet API没有直接获取记录条数的方法,现介绍几个:方法一:利用ResultSet的ge...

  • springboot常用starter④-jdbc

    前言 Java JDBC API 来自官方介绍 Java 数据库连接 (JDBC) API 提供来自 Java 编...

  • Jdbc

    Jdbc核心 Jdbc介绍 Jdbc增删改查使用步骤 Jdbc中核心API SQL注入 PreparedState...

网友评论

    本文标题:jdbc 比较api的方法

    本文链接:https://www.haomeiwen.com/subject/jadfpqtx.html