Jmeter后置处理器之BeanShell

文章来源:https://www.cnblogs.com/sunny-sl/p/11231830.html

内置变量

  • log
    写入信息到jmeber.log文件,使用方法:log.info(“This is log info!”);

  • ctx
    该变量引用了当前线程的上下文,使用方法可参考:org.apache.jmeter.threads.JMeterContext。

  • vars - (JMeterVariables)
    操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,常用方法:
    a) vars.get(String key):从jmeter中获得变量值
    b) vars.put(String key,String value):数据存到jmeter变量中

  • props - (JMeterProperties - class java.util.Properties)

  • 操作jmeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。对应于java.util.Properties。
    a) props.get(“START.HMS”);  注:START.HMS为属性名,在文件jmeter.properties中定义
    b) props.put(“PROP1”,“1234”);

  • prev - (SampleResult)
    获取前面的sample返回的信息,常用方法:
    a) getResponseDataAsString():获取响应信息
    b) getResponseCode() :获取响应code

  • 常用属性

1.log 打印日志,写入信息到jmeber.log文件。

2.SampleResult 获取SampleResult对象,能通过这个对象获取想要的信息。

3.Response 获取Response对象,能通过这个对象获取响应信息。

4.Failure 查看接口调使用能否成功,假如返回false是成功的,true是失败的。

5.FailureMessage 失败信息,没有设置的时候失败信息是空的,能set这个信息。

6.ResponseData 获取response body类型是byte[]。

7.ResponseCode 返回接口code成功是200。

8.ResponseMessage 获取msg成功是OK。

9.ResponseHeaders 获取接口服务端返回的头部信息。

10.RequestHeaders 获取用户端请求的头部信息。

11.SampleLabel 获取接口请求的名称。

12.SamplerData 获取请求的url和body。

13.ctx 代表上下文信息,能直接用。

14.vars即JMeterVariables,操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),常用方法:

a) vars.get(String key):从jmeter中获得变量值;

b) vars.put(String key,String value):数据存到jmeter变量中;

15.prev 获取前面的sample返回的信息,常用方法:

a) getResponseDataAsString():获取响应信息。

b) getResponseCode() :获取响应code。

在写代码的时候,可以直接用上面的变量和方法,参考如下例子。

应用

1,首先储存一个接口的响应结果,比如在http请求的后面添加beanshell后置处理器(BeanShell PostProcessor)来储存http请求的响应结果:

import org.json.*;

//获取上一个请求的返回值
String response = prev.getResponseDataAsString();
//将返回值转换为json
JSONObject responseJson = new JSONObject(response);
//获取responseMessage
String message = responseJson.getString("responseMessage");
log.info("message的值:" + message);

//使用vars.put()方法储存变量message
vars.put("message",message);
//获取titleLink
String titleLink = responseJson.getJSONObject("data").getString("titleLink");
log.info("titleLink的值:" + titleLink);
//使用vars.put()方法储存变量message
vars.put("titleLink",titleLink);

在后面的其他接口中如何需要使用变量message 和 titleLink,可以使用${message} 和 ${titleLink}来获取变量的值;

变量储存好后,在需要断言的接口后面添加BeanShell断言,使用Failrue来标识断言失败,FailureMessage标示断言失败的原因,如:

//使用vars.get()方法获取变量的值
String message= vars.get("message");
 
if(!message.equals("success")) {
    Failure = true; 
    FailureMessage = "规则解析失败";
}else{
    FailureMessage = "规则解析成功";
    }

方法二:
直接在需要断言的接口后面使用beanshell断言,使用Failrue来标识断言失败,FailureMessage标示断言失败的原因,如:

import org.json.*;

//获取上一个请求的返回值
String response = prev.getResponseDataAsString();
//将返回值转换为json
JSONObject responseJson = new JSONObject(response);
//获取responseMessage
String message = responseJson.getString("responseMessage");
log.info("message的值:" + message);

if(!message.equals("success")){
    Failure = true; 
    FailureMessage = "规则解析失败,message不等于success";
    return;
}

//获取titleLink
Object titleLink = responseJson.getJSONObject("data").get("titleLink");
log.info("titleLink的值:" + titleLink.toString());


if(titleLink.toString().equals("null") || "".equals(titleLink)){
    Failure = true; 
    FailureMessage = "规则解析失败,titleLink为空";
}else if(!titleLink.toString().startsWith("http") && !titleLink.toString().startsWith("https")){
    Failure = true;
    FailureMessage = "规则解析失败,titleLink不为空,但是不是以http或者https开头的";
}

你可能感兴趣的:(#,后置处理器)