jmeter前后置Beanshell

jmeter前后置beanshell常用内置函数

  1. BeanShell PreProcessor 前置处理器特有函数:(在发送请求之前运行)
    ①. 获取本次请求的入参body中的内容
    导包
import org.apache.jmeter.config.Arguments;    //jmeter4.0及以上自带,需导包一次
Arguments argss = sampler.getArguments();
String argss_str = argss.getArgument(0).getValue();

②. 获取本次请求的api路径

String path = sampler.getPath();
  1. BeanShell PostProcessor 后置处理器特有函数:(在返回响应之后运行)
    ①. 获取本次请求的响应内容
String responseCode = prev.getResponseCode();
String responseData = prev.getResponseDataAsString();
String responseMessage = prev.getResponseMessage();

②.指定本次响应的内容

prev.setResponseCode("200");
prev.setResponseData("你好","UTF-8");
prev.setResponseMessage("随便写");
  1. json字符串类型转为json对象类型
    ①. 阿里的 fastjson-1.2.70 jar包
    导包
import com.alibaba.fastjson.*;   //下载 fastjson-1.2.70 jar包,放到lib目录后重启jmeter可用
JSONObject JsonObj= JSON.parseObject(JsonStr)

②. org.json_1.0.0.v 版本jar包
导包

import org.json.*;
JSONObject JsonObj= new JSONObject(JsonStr);
  1. 获取json对象中的对象,数组,字段
    eg:
JsonObj:{
	keyinfo:{
		"documentno": "PYJK20200106123456789"
	},
	dealinfo:[{
		"businesscode": "N99"
	},
	{
		"businesscode": "N98"
	}]
}

以阿里巴巴包为例

JSONObject keyinfo = JsonObj.getJSONObject("keyinfo");    //获取json对象中的对象
String  documentno = JsonObj.getJSONObject("keyinfo").getString("documentno");   //获取json对象中的字段值
JSONArray dealinfo = JsonObj.getJSONArray("dealinfo");    //获取json对象中的数组
JSONObject keyinfo = JsonObj.getJSONArray("dealinfo").getJSONObject(0);    //获取json数组中的对象,索引表示第几个对象
String businesscode = JsonObj.getJSONArray("dealinfo").getJSONObject(0).getString("businesscode");  //获取数组中对象的字段值
  1. 设置变量,只能是字符串类型的值(变量存储在jmeter内存中)
    ①. 设置局部变量(作用于单个线程组)
vars.put("a", "123");  //设置变量a 为123
vars.put("documentno", documentno);  //将变量documentno 设置为局部变量
vars.put("keyinfo", keyinfo.toString());   //将对象keyinfo转为字符串设置为局部变量

②获取局部变量 (在同一个线程组中可获取到)

String a = vars.get("a");    //a="123"
String documentno = vars.get("documentno");   //documentno="PYJK20200106123456789"
JSONObject keyinfo = JSON.parseObject(vars.get("keyinfo"));    //将获取的keyinfo字符串转为对象

③. 设置全局变量(作用于测试计划下的所有线程组)

props.put();      //用法与局部变量函数vars.put() 一致

③. 获取全局变量(测试计划下的所有线程组均可获取到)

String a = props.get("a");      //用法与局部变量函数vars.get() 一致
  1. 组建变量大对象VO
    ①. 新建对象
JSONObject keyinfo = new JSONObject();

②. 向对象中增加key-value

keyinfo.put("documentno", "PYJK20200106123456789");

③. 新建数组

JSONArray  dealinfo = new JSONArray();

④. 向数组中增加对象,字段 ( 有先后顺序,索引 0,1,2。。)

dealinfo.add(dealinfo);
dealinfo.add(dealinfo);
dealinfo.add("aa");       //增加字段

⑤. 向对象中增加对象,数组

JSONObject VO = new JSONObject();
VO.put("keyinfo", keyinfo);
VO.put("dealinfo", dealinfo);
  1. 以ASSIC码排序的JSONObject(),向JSONObject()对象中put的key-value,自动以ASSIC码排序,不以代码先后顺序排序。若想以固定顺序排列,可在新建对象时,使用new JSONObject(new LinkedHashMap()),具体原因这里不做阐述,如有想了解的朋友可以搜索map和LinkedHashMap之间的区别。

  2. 比较两个对象是否相等
    以阿里巴巴jar包为例

import com.alibaba.fastjson.*;

public isObjValEqual(a_obj, b_obj){
    Object a_key = a_obj.keySet();    //获取a对象中的所有键key,组成数组集合
    Object b_key = b_obj.keySet();   //获取b对象中的所有键key,组成数组集合
    Object key_list = maxArray(a_key, b_key);   //获取长度大的数组集合
    for(Object key : key_list){            //遍历每一个键key
        String a_value = a_obj.get(key);    //获取key对应的值
        String b_value = b_obj.get(key);
        if(!a_value.equals(b_value)){
             log.info("两个对象中的"+key+"对应的值不一致")return false;
        }
    }
    return true;
}
  1. hash256,md5算法函数
import org.apache.commons.codec.digest.DigestUtils;   //下载org.apache.commons.codec_1.3.0.v 版本包
String md5 = DigestUtils.md5Hex(str).toLowerCase();           //Upper大写,Lower小写
String hash256= DigestUtils.sha256Hex(str).toLowerCase(); 

10.Jmeter主要组件及执行顺序
在同一作用域名范围内,测试计划中的元件按照以下顺序执行:

①配置元件(configelements)
  ②前置处理程序(Per-processors)
  ③定时器(timers)
  ④取样器(Sampler)
  ⑤后置处理程序(Post-processors)(除非Sampler得到的返回结果是空)
  ⑥断言(Assertions)(除非Sampler得到的返回结果是空)
  ⑦监听器(Listeners)(除非Sampler得到的返回结果是空)

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值