需求:
想在jmeter腳本中引入jsonpath的jar包,通過jsonpath提取jmeter的響應結果並斷言;
遇到的問題:

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

解決方案:
一開始毫無頭緒,不理解這個報錯的意思,於是詢問了幾個開發大佬,告訴我說是找不到依賴,又自己搜索了一下發現,這個要在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"; } }