JsonPath.read(jsondata,jsonpathdata).toString();在beanshell中总是找不到静态方法read.在idea中也是提示如下错误:java.lang.NoClassDefFoundError:net/minidev/json/writer/JsonReaderI 解决方案: 一开始毫无头绪,不理解这个报错的意思,于是询问了几个开发大佬,告诉我说是找不到依赖,又自己搜索了一下发现,这个要在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"; } }