BeanShell脚本是符合java语法规范的语言,支持java用法,在写BeanShell脚本时,与写java脚本一样,需要引用各种jar包。 有一些jar包,安装jmeter时会自带,在jmeter安装目录下的lib文件夹中,可以在测试计划中导入,但一些没有的jar包,需要自己在网上下载,然后放在lib中,导入测试计划中。 本文由于测试需要,用到了jsonPath,对返回参数的提取,起初使用jsonpath的提取器提取的,如下图,先在查看结果数中调试JSONPath的路径,在查看结果数中选择JSON Path Tester。
然后接口请求中新增后置处理区——json提取器,然后填写变量,以及jsonPath的提取路径,如下图
接着添加后置处理器——BeanShell断言,书写BeanShell脚本,但在脚本中引用变量${para}不起作用,于是放弃使用json提取器设置变量的形式,直接在BeanShell脚本中提取。
想要在脚本中使用jsonPath提取返回参数,需要导入jsonPath的jar包,如图:
但在脚本运行中,出现了报错:报错内容为:
用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
上面报错大概的意思就是找不到com.jayway.jsonpath.JsonPath类里的静态方法read。
于是想到了一种方法:对read方法再封装一次,使用封装后的函数。
编写代码,代码思路,类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; } }
将代码导出为jar包(导出方法自行百度)。这里直接提供我导出的jar包jmeterUtil.jar
链接:https://pan.baidu.com/s/1SObPqEdXN6u8CsrhecyvSg
提取码:0000
jar包放在了jemter/lib/etc中,然后在测试计划中导入
下图是完成的BeanShell脚本截图
代码粘贴在这里:
import jmeterUtil.* log.info("得到结果数据"); String response = prev.getResponseDataAsString(); if(response == "[]" ){ Failure=true; FailureMessage = "没有领取到任务"; }else { JsonUtil t = new JsonUtil(); String paras = t.ParaseJson(response, "$.[0].para"); log.info("response为 " + response); log.info("para为 " + paras); log.info("领取到任务,对para参数进行判断,为空报错,不为空不报错"); if(paras == "[]"){ log.info("response为" + response); Failure=true; FailureMessage = "para为空"; }else{ log.info("para不为空"); } }
在调试BeanShell脚本时,可以通过看日志看报错内容,如下图:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)