Jmeter-Beanshell断言
Beanshell
Beanshell 是一种轻量级的 Java 脚本,纯 Java 编写的,能够动态的执行标准 java 语法及一些扩展脚本语法,类似于 javaScript 和 perl。
内置变量
Beanshell Sampler 中除了可以使用标准 java 语法之外,还有一些定义好的变量,可以直接使用。
log:用来记录日志文件,写入到jmeber.log文件,使用方法:log.info(“This is log info!”);
SampleResult:获取SampleResult对象,可以通过这个对象获取想要的信息
ResponseCode:返回接口code 成功是200
ResponseMessage:获取msg 成功是OK
vars - (JMeterVariables):用于存取 jmeter 局部变量,很常用,一定要掌握;通常用于存取字符串内容,也可以存取对象;
a) vars.get(String key): 从jmeter中获得变量值
b) vars.put(String key,String value):数据存到jmeter变量中
c) vars.remove("keyname"): 从 jmeter 变量中删除 keyname。
props:用于存取 jmeter 全局的静态变量,其中的 key 和 value 均是字符串形式;
ymd = props.get("START.YMD");
获取属性 START.YMD 的值(脚本启动日期)。
props.put("PROP1","1234");
把 1234 存入全局属性 PROP1 中。
ctx(JmeterContext):通过它来访问context
a) ctx.getCurrentSampler(); 获取当前 sampler 请求
b) ctx.getPreviousSampler(); 获取前一个 sampler 请求
c) ctx.getThreadNum(); 获取当前线程的序号,从 0 开始计数
d) ctx.getThread(); 获取当前线程
e) ctx.getThreadGroup(); 获取当前线程组
f) ctx.getProperties(); 获取所有属性
g) ctx.getVariables(); 获取当前线程的所有变量
实例:https://www.cnblogs.com/zibinchen/p/12879710.html
Beanshell断言
BeanShell断言可以使用beanshell脚本来执行断言检查,可以用于更复杂的个性化需求,使用更灵活,功能更强大,但是要能够熟练使用beanshell脚本。
在这里除了可以使用beanshell的内置变量外,主要通过 Failure 和 FailureMessage来设置断言结果。
例:获取地区信息接口 /pdc-api-gateway/smamo-home-charging-ticket/v1/config/district?keywords=100000&subdistrict=1
String responseData = prev.getResponseDataAsString(); //获取请求的返回结果 String code = prev.getResponseCode(); //获取请求的返回code码 String requestData = prev.getSamplerData(); //获取发出的请求数据 if( !code.equals("200") ){ //如果请求的相应状态码不是200 FailureMessage = "响应状态码不是:200,而是:" + code + ",请求失败!"; //自定义的失败信息 log.info(FailureMessage); //在日志里打印失败的信息 log.info("Request: " + requestData); //在日志里面打印失败的请求体 Failure = true; //表示断言失败 } else if(!responseData.contains("\"code\":0")){ FailureMessage = "响应body中code不是:0,响应body为:" + responseData; log.info(FailureMessage); log.info("Request: " + requestData); Failure = true; } else if(!responseData.contains("\"msg\":\"ok")){ FailureMessage = "响应body中msg不是:ok,响应body为:" + responseData; log.info(FailureMessage); log.info("Request: " + requestData); Failure = true; }