jmeter中引用jar包jsonpath的坎坷之路:

需求:
想在jmeter脚本中引入jsonpath的jar包,通过jsonpath提取jmeter的响应结果并断言;
遇到的问题:
0
1、下载的json-path-2.4.0.jar放入jmeter的\lib\ext,执行
JsonPath.read(jsondata,jsonpathdata).toString();
在beanshell中总是找不到静态方法read.在idea中也是提示如下错误:java.lang.NoClassDefFoundError:net/minidev/json/writer/JsonReaderI
0
 
解决方案:
一开始毫无头绪,不理解这个报错的意思,于是询问了几个开发大佬,告诉我说是找不到依赖,又自己搜索了一下发现,这个要在maven项目的pom.xml中配置相关依赖才可以使用。就心里有个大概思路,在maven中新建项目然后重新打包jar.
<dependencies>
    <dependency>
        <groupId>com.jayway.jsonpath</groupId>
        <artifactId>json-path</artifactId>
        <version>2.4.0</version>
    </dependency>
</dependencies>
于是果断找开发大佬帮我装了个maven,新建maven项目后,再执行就没有问题了,代码如下。但又有一个新问题,jmeter没有啥maven,怎么把这个用到jmeter上了。于是又开始百度搜索,发现maven可以打jar包与runnable jar包。runnable jar包则会包含相关依赖,那这样的包jmeter肯定能用。于是参考如下文章:https://www.cnblogs.com/guohu/p/11346153.html
可以看到打jar包时会显示该jar包相应的依赖。再放入jmeter中就可以使用了。我在jar包中写了一个封装方法。其实也可以不写。

jmeter脚本如下:

import java.math.BigDecimal;
import com.*;
import java.util.Arrays;


try {

        

String jsondata = prev.getResponseDataAsString();  //获取json数据
log.info("=获取的json数据=="+jsondata+"======");
SlbJsonpath slbjp = new SlbJsonpath();

//log.info(slbjp.getS());

String getpath = vars.get("getResponseValue1"); //获取断言的jsonpath路径
log.info("=jsonpath路径=="+getpath+"======");

String json_response = slbjp.readjson(jsondata,getpath); //提取需要断言的数据


log.info("=======json_response============"+json_response+"=================");
String assert_value = vars.get("assert_value1");
log.info("============assertvalue1======="+assert_value+"============assertvalue1=======");
String json_response_result = null;

if (getpath.contains("totalPremiumMax")){
        log.info("开始执行断言最小最大保费");
//        String no = "{totalPremium=22.22,totalPremiumMax=33.33}";
        String oo = json_response.replace("{totalPremium=","").replace(" totalPremiumMax=","").replace("}","");
        log.info("处理后的最大最小保费"+oo);
        String[] aaa = oo.split(",");
        ArrayList list = new ArrayList();
        for (int i=0;i<aaa.length;i++){
               String aab = aaa[i];
               log.info("第i个保费"+aab);
//               String bd = new BigDecimal(aab).setScale(1,BigDecimal.ROUND_HALF_UP).toString();
               list.add(aab);
               log.info("res22==="+aab);
        }
        json_response_result = list.toString().replace(" ","");
        log.info("最终结果为==="+json_response_result);
}else if (getpath.contains("cusRiskAmnt")){
    log.info("开始执行断言保额");
    json_response_result = json_response.replace("[\"","").replace("\"]","");
    log.info("保额最终的结果为"+json_response_result);
}else{
    log.info("开始执行断言其他");
    json_response_result = json_response;
}


if(json_response_result.equals(assert_value)){
    log.info("成功拉");
    Failure=false;
    
}else{

    log.info("失败拉");
    Failure=true;
    FailureMessage=aa;
}
}catch (Exception e){
    log.info("失败拉");
    Failure=true;
    FailureMessage=aa;
        }

java jar包代码如下:

package com;

import com.jayway.jsonpath.JsonPath;

public class SlbJsonpath {
    public static void main(String[] args) {
        SlbJsonpath slbjp = new SlbJsonpath();
        String js = "{\"code\":\"200\"}";
        String s = "$.code";
        String jsondata = slbjp.readjson(js,s).toString();
//        jsonpath.read(js,s);
        System.out.println(jsondata);
    }
    public static String readjson(String jsondata,String jsonpathdata){
        String data = JsonPath.read(jsondata,jsonpathdata).toString();
        return data;
    }
    public static String getS(){
        return "aa";
    }
}
原文地址:https://www.cnblogs.com/lelexiong/p/15574116.html