首页 > 技术文章 > Jmeter-Beanshell断言

zibinchen 2020-12-13 13:17 原文

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

 

推荐阅读