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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM