性能测试工具 Jmeter 之 Bean shell 使用

wink_yang · 2019年05月08日 · 最后由 Kenneth 回复于 2019年05月09日 · 4120 次阅读

一、操作变量:通过使用 Bean shell 内置对象 vars 可以对变量进行存取操作

    a) vars.get("name"):从 jmeter 中获得变量值
    b) vars.put("key","value"):数据存到 jmeter 变量中

二、操作属性:通过使用 Bean shell 内置对象 props 可对属性进行存取操作

    a) props.get("START.HMS");  注:START.HMS 为属性名,在文件 jmeter.properties 中定义
    b) props.put("PROP1","1234");

三、自定义函数:

  在 BeanShell 中,我们可以使用 java 语言自定义函数来处理特定的逻辑,结合 BeanShell 的内置对象进行变量的存取,方便我们进行测试提高脚本的灵活性。

示例:
1、在 Test Plan 中添加一个变量:hello = kitty

2、在 Test Plan 下单击右键添加线程组,默认设置就 ok


3、Debug sampler-1 和 Debug sampler-2 什么都不处理,用来查询对比 beahshell 处理前后的结果

4、在线程组下单击右键添加 BeanShell Sampler,BeanShell Sampler 中的脚本如下:

5、查看结果树 - 运行结果:
 Debug sampler-1 中显示:hello=world
 BeanShell sampler 中 返回结果为:success
 Debug sampler-1 中显示:hello=kitty,jmeter=111111,test=ddd


四、引用外部 java 文件:

1、 Bean Shell 使用代码如下:
在 bean shel 中通过 source("代码路径") 方法引入 java,然后调用方法和 java 一样,new 一个 class,再调用里面的 add 方法。

五、引用外部 class 文件:

1、Bean Shell 使用代码如下:
  用 addClassPath("D:\") 方法引入 class 文件,在用 import 导入包及类,然后就可以像 java 一样调用了


六、引用外部 Jar 包:

 在这里想补充一点的是 jmeter 中引入 jar 的两个方法:
  1、上一篇中已使用过的:把 jar 包放到 jmeter 目录\apache-jmeter-2.13\lib\ext 下
  2、在 Test Plan 的右侧面板最下方直接添加需要引用的 jar 包,如下图:

调用 java 写的 jar 包,打包并导入 jmeter 中:

  1. 创建一个 Java 工程

  2. 将 apache-jmeter-2.12\lib\ext 下的 ApacheJMeter_java.jar,ApacheJMeter_core.jar 及 apache-jmeter-2.12\lib 下的 avalon-framework-4.1.4.jar,jorphan.jar, logkit-2.0.jar 加入到 Java 此工程的 Build Path.

  3. 创建一个测试类(支持 Junit 约定和扩展)

  4. 右击项目选址 export 》选择 jar file,如下打包成一个 jar 包

  5. 把这个 JAR 拷贝至 $JMETER__HOME/lib/ext 目录下,重新启动 JMeter。

七、其它用法:

1、在 Test Plan 中定义如下三个变量:

2、Bean Shell 可脚本如下:
  a、bean shell 可以接受传入参数,如下图:${u1} ${u2} ${u3}
  b、参数可以通过 bsh.args[] 按顺序提取
  c、bean shell 提供了一个内置变量 Parameters,来保存参数的集合

3、运行结果:

下图中 1 输入的这两句设置:
ResponseCode = 500;
ResponseMessage = "This is a test";
下图中 2 输入的这两句设置:
log.info(Parameters);
log.info(Label);

八.Bean Shell 内置变量大全

首先大家需要掌握 bean shell 本身自带的一些内置变量和一些方法。JMeter 在其 BeanShell 中内置了变量,用户是通过这些变量与 JMeter 进行交互。
1.log 打印日志,写入信息到 jmeber.log 文件。

2.SampleResult 获取 SampleResult 对象,能通过这个对象获取想要的信息。

3.Response 获取 Response 对象,能通过这个对象获取响应信息。

4.Failure 查看接口调使用能否成功,假如返回 false 是成功的,true 是失败的。

5.FailureMessage 失败信息,没有设置的时候失败信息是空的,能 set 这个信息。

6.ResponseData 获取 response body 类型是 byte[]。

7.ResponseCode 返回接口 code 成功是 200。

8.ResponseMessage 获取 msg 成功是 OK。

9.ResponseHeaders 获取接口服务端返回的头部信息。

10.RequestHeaders 获取用户端请求的头部信息。

11.SampleLabel 获取接口请求的名称。

12.SamplerData 获取请求的 url 和 body。

13.ctx 代表上下文信息,能直接用。

14.vars 即 JMeterVariables,操作 jmeter 变量,这个变量实际引用了 JMeter 线程中的局部变量容器(本质上是 Map),常用方法:

a) vars.get(String key):从 jmeter 中获得变量值;

b) vars.put(String key,String value):数据存到 jmeter 变量中;

15.prev 获取前面的 sample 返回的信息,常用方法:

a) getResponseDataAsString():获取响应信息。

b) getResponseCode() :获取响应 code。

参考文档链接:https://blog.csdn.net/quiet_girl/article/details/50577324
https://www.cnblogs.com/puresoul/p/4949889.html
https://testerhome.com/topics/16245
https://blog.csdn.net/Golden_soft/article/details/80952243

共收到 1 条回复 时间 点赞

可以尝试使用下 groovy

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册