美文网首页
jmeter下解决:beanshell 使用jsonpath解析

jmeter下解决:beanshell 使用jsonpath解析

作者: 西西的博客 | 来源:发表于2019-07-12 18:14 被阅读0次
    beanshell

    问题

    在jmeter中使用beanshell脚本时,使用json-path-xxxxx.jar解析json数据时会报错:Error in method invocation: Static method read( java.lang.String, java.lang.String ) not found in class'com.jayway.jsonpath.JsonPath,以下讲一下解决这个问题的方法

    问题重现

    1、在测试计划中导入pathpath的jar包(我使用的是jmeter中lib目录下的json-path-2.4.0.jar)

    导入json-path-2.4.0.jar包

    2、对接口(要求接口的返回值是json),接口的返回值为

    {
        "msg": "Success",
        "code": "0000",
        "data": {
            "versionView": {
                "updateNotice": "很遗憾此版本已停用,请更新!",
                "downloadUrl": "xxxxxxxxxxxxxxxxxxxxx",
                "sign": "",
                "updateTime": 1558584325000,
                "clientVersion": "4.1.5",
                "versionCode": 415,
                "platform": "iphone",
                "clientType": "ios",
                "createTime": 1553753740000,
                "rate": null,
                "name": "testxxxxxxx",
                "needForceUpdate": true,
                "id": 3538,
                "status": "PUBLISHED"
            }
        },
        "requestId": "2937a3ab656c426b9b4e4b29dfeaa07a"
    }
    

    添加BeanShell断言,脚本获取需要获取字段needForceUpdate,断言值是否为false。脚本如下

    
    import com.jayway.jsonpath.JsonPath;
    
    String s = prev.getResponseDataAsString();
    String res = JsonPath.read(s,"$..needForceUpdate").toString();
    
    if (res!="false"){
        Failure = true; 
        FailureMessage = "返回结果为不需要强制更新";
    }
    
    

    运行结果报错,报错内容如下:

    2019-07-12 16:58:37,511 ERROR o.a.j.u.BeanShellInterpreter: Error invoking bsh method: eval Sourced file: inline evaluation of: `` import com.jayway.jsonpath.JsonPath;  String s = prev.getResponseDataAsString() . . . '' : Typed variable declaration : Error in method invocation: Static method read( java.lang.String, java.lang.String ) not found in class'com.jayway.jsonpath.JsonPath'
    2019-07-12 16:58:37,511 WARN o.a.j.a.BeanShellAssertion: org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval   Sourced file: inline evaluation of: `` import com.jayway.jsonpath.JsonPath;  String s = prev.getResponseDataAsString() . . . '' : Typed variable declaration : Error in method invocation: Static method read( java.lang.String, java.lang.String ) not found in class'com.jayway.jsonpath.JsonPath'
    
    
    运行结果报错

    解决方法

    以上报错处的代码在idea上运行是没有问题的,也不知道问题出在了哪些。

    上面报错大概的意思就是找不到com.jayway.jsonpath.JsonPath类里的静态方法read

    于是想到了一种方法:对read方法再封装一次,使用封装后的函数

    1、编写代码,代码思路,类JsonUtil中的方法ParaseJson封装read方法,第一个参数是json字符串,第二个参数是jsonpath。代码如下:

    import com.jayway.jsonpath.JsonPath;
    
    public class JsonUtil {
        public  String ParaseJson(String str,String paras){
            String res = JsonPath.read(str,paras).toString();
            return  res;
    
        }
    }
    

    2、将代码导出为jar包(导出方法自行百度)。这里直接提供我导出的jar包jmeterUtil.jar,提取码:o0fr

    3、将jar包放入路径\apache-jmeter-5.0\lib\ext,导入jmeter。

    4、编写代码如下:

    import jmeterUtil.*;
    
    String s = prev.getResponseDataAsString();
    
    JsonUtil t = new JsonUtil();
    String data = t.ParaseJson(s,"$..needForceUpdate");
    
    if (res!="true"){
        Failure = true; 
        FailureMessage = "返回结果为不需要强制更新";
    }
    
    

    5、查看结果,发现没有报错,并且成功输出断言。成功!!!!

    运行成功,输出断言

    写在最后

    以上不是最好的解决方法,但毕竟也算的上是一种方法 = = ,...........

    相关文章

      网友评论

          本文标题:jmeter下解决:beanshell 使用jsonpath解析

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