beanshell
一:获取请求/响应信息--prev
1、打印信息到日志
日志级别:info、error、debug,debug级别不会打印
log.info("======info log");
log.error("======error log");
2、打印响应状态码 code
log.info("code: " + prev.getResponseCode());
3、获取响应内容
log.info(prev.getResponseDataAsString()); //返回字符串
log.info(""+prev.getResponseData()); //返回字节数组
log.info("")只能输入字符串,否则会报错
4、获取当前时间
log.info("' + prev.getStartTime()); //返回的是一个时间戳
5、获取请求内容
log.info(prev.getSamplerData());
6、获取请求头信息
log.info(prev.getRequestHeaders());
7、设置响应状态码
prev.setResponseCode("404");
8、获取响应信息
log.info(prev.getResponseMessage());
9、获取响应头信息
log.info(prev.getResponseHeaders());
10、获取响应类型
log.info(prev.getContentType());
二:定义变量与调用变量--vars
即JMeterVariables,操作jmeter中的变量(设置的用户变量等),可以通过put和get方法来定义和获取JMeter中的变量
以下实例:String类型
获取:vars.get(String key) 定义:vars.put(String key,String value)

别的地方引用定义的变量

以下实例:非String类型,需要用putObject()和getObject()

使用put方法定义的变量只能在当前线程组下有效,不能跨线程组获取;如果要跨线程组获取变量,要使用 props设置属性
增加一个调试取样器,把Jmeter属性字段改为 True



移除属性,props.remove("属性名");
方法1:从线程组2获取到线程组1的属性,然后再用 vars把获取到的属性赋值给一个变量,此时就可以跨线程组引用变量了


方法二:用函数助手里的 property 函数通过属性名直接获取


三:自定义函数
无返回值:
添加一个beanshell取样器,定义一个没有返回值的方法,然后用vars把结果赋值给一个变量,然后引用这个变量


有返回值:


四、beanshell在Jmeter中的应用
beanshell中自定义
1、加密密码

2、base54加密图片,把jar包放到jmeter的lib目录下的ext文件夹中,然后重启jmeter


然后把图片加密后的生成的字符换解码查看图片

3、引用外部java文件
如果只有单个类/文件,在beanshell中读取jar文件即可;如果有多个类/文件,用maven打成jar包后放到jmeter的ex目录中,然后在beanshell总导入
- java文件的代码,简单的加法运算

beanshell里导入,创建对象调用方法,然后引用变量

- 外部java文件实现md5加密,需要用到commons-codec.jar这个包,jmeter自带有,idea中需要添加maven来导入commons-codec.jar包
访问https://mvnrepository.com/,搜索commons-codec,选择和jjmeter中一样的版本,复制 坐标到 maven的pom文件中的
<dependencies>标签里面,点击右下角的 import Changes导入


把ieda的java文件打成jar包 ,然后把这个jar放到jmeter的lib目录下的ext文件中,在beanshell中使用
MD5加密代码实现

beanshell导入模块,调用方法

4、后置处理器(关联转参数化)
这里用mock取样器作为请求,后置处理器要放大请求的下面
先用正则获取到值,然后用beanshell后置处理器把获取到的值写入到本地文件中



用beanshell后置处理器写入文件中


5、断言
方法1:使用响应断言,简单场景下使用
方法2:使用beanshell断言json字符串,复杂场景下使用
把fastjson.jar放到jmeter的ext目录下,beanshell中导入


实际返回值
实际返回值和期望值不一样

使用beanshell断言返回值非字符串的

练习题:
需求:返回的是一个json,修改某个字段的值后,返回一个子map,作为下一个接口的入参
这里用mock取样器举例,下图是json的层级关系




浙公网安备 33010602011771号