jmete性能测试使用BeanShell断言

jmete性能测试使用BeanShell断言,第1张

jmete性能测试使用BeanShell断言
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脚本时,可以通过看日志看报错内容,如下图:

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5693482.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存