Jmeter Beanshell 简单使用
引用https://www.sohu.com/a/340476400_371153
Jmeter 除了提供丰富的组件以外,还提供脚本支持,可通过编写脚本来丰富Jmeter,实现普通组件无法完成的功能。Beanshell是一种轻量级的Java脚本语言,完全符合Java规范,并且内置了一些独有的变量和方法,详细语法可参见Beanshell官网( http://www.beanshell.org/) 。
Jmeter支持多种脚本语言,包括Beanshell,Java和Groovy ,其中对Beanshell的支持最为全面,提供了多种Beanshell的组件:
1.Beanshell Sampler:Beanshell请求,完成Beanshell请求组件中定义的脚本功能
2.Beanshell Postprocessor: Beanshell后置处理器,可通过编程方式获取对应请求的响应结果
3. Beanshell 断言:可通过编程方式实现复杂的断言逻辑
4.Beanshell Preprocessor:Beanshell前置处理器,可通过编程方式在发起请求以前做预处理,比如编码或者加密
5.Beanshell Timer:Beanshell计时器,编程实现条件定时功能
6. Beanshell Listner:Beanshell监听器,监听Beanshell运行结果
Beanshell内置变量介绍
Beanshell有一些默认的内置变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下:
- log:写入信息到控制台中,帮助调试脚本
- vars: 操作jmeter变量,生成/更新/获取当前脚本的jmeter变量
- props: 操作jmeter属性,生成/更新/获取当前脚本的jmeter属性,使用方法和vars一样
- ctx:获取当前线程上下文,可获取当前线程的请求信息和相应信息(eg:可以获取Http请求和响应的所有数据)
- prev:获取当前请求的结果
Beanshell Sampler 示例
- vars/props/log
通过Beanshell Sampler,测试人员可以编写一些特定逻辑生成的数据,并且通过vars.get、vars.put 或者props.get、props.put 把相应的变量传递到Jmeter脚本当中。
比如有些程序对身份证有校验,就可以在Beanshell脚本中编写身份证生成的逻辑,通过代码生成满足位数以及省市区编码校验的身份证号,然后把生成的身份证号作为变量保存到vars或者props当中,供后续接口调用。
vars.get(String,String) 可以获取Jmeter中已经生成的变量
vars.put(String,String) 可以创建和更新Jmeter变量
props.get(String,String) 可以获取Jmeter中已经生成的属性
props.put(String,String) 可以创建和更新Jmeter属性
vars和props的区别是前者是变量,只能在同一线程组内传递,后者是属性,可以在整个测试计划中跨线程组传递。
og.info(String) 可以将信息输出到控制台,方便代码调试

Beanshell Postprocessor 示例
- ctx/prev
ctx内置变量可以获取上下文,通常和Beanshell PostProcessor结合起来使用,用于解析请求的结果,具体代码如下所示。在Jmeter的Beanshell脚本编辑器里可以直接引用Jmeter的Jar包,Jmeter Jar包的Api参见官网(http://jmeter.apache.org/api/overview-summary.html)

prev等同于ctx.getPreviousResult,通过prev可以直接获取到响应结果

通过上述示例,大家对Beanshell编程有了初步的了解,Jmeter Beanshell组件有很多,其中最常用的是BeanShell Preprossor,BeanShell Postprocessor和Beanshell断言,这些Beanshell组件的界面部分大同小异,区别是用在请求的不同阶段