jmeter

JMeter中使用BeanShell断言详解

2020-02-25  本文已影响0人  韩志超

BeanShell简介

BeanShell是使用Java语法的一套脚本语言,在JMeter的多种组件中都有BeanShell的身影,如:

通过BeanShell可以对请求数据、响应数据或环境变量进行更加灵活的处理和判断。

Beanshell有一些默认的内置变量和方法,用户可以通过这些变量与JMeter进行交互,比如:

ctx详细API可参考:JMeter上下文

BeanShell断言

BeanShell断言中可以通过ResponseCode、ResponseHeaders及pre.getResponseDataAsString()来分别获得String格式的响应状态码、响应头、响应体数据,结合if判断通过变量Failure=false或Failure=true来设置断言是否通过,当设置Failure=true时,还可以设置FailureMessage来设置失败原因。

image

状态码断言

//状态码断言
log.info("状态码:" + ResponseCode);
if(ResponseCode.equals("200")){ 
    Failure=false;
}
else{
    Failure=true;
    FailureMessage="响应状态码非200";  //指定失败原因
}

注:字符串只能使用双引号,字符串相等要使用"".equals("")

响应体包含特定字符

//获取响应数据
String response = prev.getResponseDataAsString();
log.info("响应体:" + response);
//响应数据包含
if(response.contains("登录成功")){
    Failure=false;
}
else{
    Failure=true;
    FailureMessage="响应数据不包含登录成功";
}

JSON响应体字段提取及断言

将String类型的响应体转为JSON对象并操作需要额外的jar包,可以使用org.json或gson,下载地址如下:

以json.jar为例,下载后将其放入JMeter/lib目录下,重启JMeter,添加BeanShell断言,如下:

//JSON响应断言
import org.json.*;   //导入org.json包

String response = prev.getResponseDataAsString();  //获取响应数据
JSONObject responseJson = new JSONObject(response);  //转为JSON对象

String message = responseJson.getString("message"); 
log.info("响应message字段:" + message);

if(message.equals("成功")){
    Failure=false;
}
else{
    Failure=true;
    FailureMessage="响应message字段非成功";
}

JSONObject对象除了getString()方法外,还支持

响应头解析

响应头原本为String类型,可以通过分割遍历组装成Map类型来提取响应头中的项

import java.util.HashMap;
import java.util.Map;

//将字符串用换行符 截取为adc数组
String [] headersList = ResponseHeaders.split("\n");

Map headersMap = new HashMap();   //创建HashMap来从新组装headers

for(int i=1;i<headersList.length;i++){
    String [] itemList=headersList[i].split(": ");   // 将每一条Headerr项按冒号分割
    headersMap.put((itemList[0]), itemList[1]);   // 分键值放入HashMap
}

String contentType = headersMap.get("Content-Type");   // 提取相应项
log.info("响应Content-Type:" + contentType)
上一篇下一篇

猜你喜欢

热点阅读