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的层级关系

 

 

 

 

posted @ 2021-04-15 00:04  只能奋力向前  阅读(1094)  评论(0)    收藏  举报