【干货】JMeter BeanShell 应用

简介:

不废话直接上场景


场景1:业务单据参数化时要生成一组(多个时间,比如订单日期,发货日期等)未来的时间,运用JMeter提供的时间函数并不能较好的完成


场景2:测试Java接口,确又不想继承AbstractJavaSamplerClient 来完成,此时可以用BeanShell Sampler来完成


场景3:线程共享变量,我们希望线程之间共享一个变量,可以利用BeanShell来完成


其它功能自己类推......


场景1:生成订单日期与发货日期,然后放入变量

wKioL1Ycc9qi9yoFAAJwNRi9f7k478.jpg


代码方便复制粘贴

[java] view plaincopyprint?

  1. import java.text.SimpleDateFormat;

  2. import java.util.Calendar;

  3. import java.util.Date;


  4. Date date = new Date();

  5. SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");

  6. String nowDate = sf.format(date);

  7. Calendar cal = Calendar.getInstance();

  8. cal.setTime(sf.parse(nowDate));

  9. cal.add(Calendar.DAY_OF_YEAR, +3);

  10. String chanceDate = sf.format(cal.getTime());

  11. cal.add(Calendar.DAY_OF_YEAR, +7);

  12. String planFinishDate = sf.format(cal.getTime());

  13. vars.put("orderDate",chanceDate);

  14. vars.put("delivery",planFinishDate);


这里的 orderDate delivery 在Vars中,在JMeter中是以Map的形式存放的,我们只需要${变量名}来引用,变量能够保证数据一致性(简单说就是线程互不干扰)。走起,调用试试:


1.Java请求调用

wKioL1Ycc-nBAnCJAAFJ0ph6MoM896.jpg


2.结果树中察看

wKioL1Ycc_WDG-3AAAEWxPKOMNY243.jpg


如果这两个时间(orderDate,delivery)在测试过程中只需要生成一次,可以把BeanShell Sampler 放在仅一次控制器下,这样性能更加。


场景2:

下面BeanUtil是一个接口程序,已经打包BeanShell.jar,现在测试其中的getUserName与getAddress方法


640?wx_fmt=png&wxfrom=5&wx_lazy=1

直接用BeanShell Sampler到调用接口方法:

wKiom1Ycc-OBywplAAHHbN4BQvk821.jpg


上图中,我们简单的调用了getUserName()与getAddress()方法

log.error是在控制台输出结果(仅仅调试的时候用,正式测试时去除掉)。


vars.put()是把取得的结果放到变量,供下一个Sampler调用()。

当然有个最得要的部分别忘记了,接口包BeanShell.jar要放到%JMETER_HOME%\lib目录(建议),当然你也可以在测试计划中加入(不建议)


如下图:


wKioL1YcdA_wCRPyAAGCSdlK-aM484.jpg

如果 BeanShell.jar(你的包名可以任意取名)依赖别的包,那么它所依赖的包也要一道放到%JMETER_HOME%\lib目录。


场景3

线程共享变量


 JMeter中线程间共享变量可以通过定义属性值来完成,JMeter启动时会读取一些属性文件,比如jmeter.properties、user.properties,这些属性


值是可以增加的,也可以修改的,通过BeanShell可以对其进行更改。

 以BeanShell Sampler为例,在其中通过props.put()来增加属性,props.get()来获取属性。


 在其它Sampler中,比如Java Sampler中通过 ${__property(【属性名称】,,)}来获取。

  wKiom1YcdAGBvoWRAAK0X_3rOiE907.jpg

   

各类视频汇总地址:http://xqtesting.blog.51cto.com/4626073/1669386










本文转自 小强测试帮 51CTO博客,原文链接:http://blog.51cto.com/xqtesting/1702447,如需转载请自行联系原作者
目录
相关文章
jmeter:利用beanshell进行多重断言
在接口测试中,我们对返回结果的正确性判断一般是基于响应报文的返回内容进行断言。但有些时候,按照正常的业务逻辑来说,一个请求返回的内容是多种不同的。
jmeter:利用beanshell进行多重断言
|
14小时前
|
Java 测试技术 数据处理
JMeter前置处理器-Beanshell前置处理器详解
JMeter的Beanshell前置处理器允许用Java-like语法执行测试前的自定义逻辑,如参数化和数据处理。要添加它,右键点击HTTP请求,选择“添加”->“前置处理器”->“Beanshell前置处理器”。内置变量如`vars`, `ctx`, `log`和`props`提供与JMeter变量、上下文、日志和属性的交互。例如,`vars.get("key")`用于获取变量,`log.info()`用于记录日志。使用这些工具,测试者能增强性能测试的复杂性和准确性。
26 3
|
14小时前
|
Java
Jmeter 的 Beanshell基本用法
Jmeter 的 Beanshell基本用法
|
8月前
|
Java 测试技术 Apache
JMeter与Python的多重交响:从入门到高级应用(上)
在性能测试领域,Apache JMeter已经成为测试专业人士的首选工具,用于模拟用户行为、测量响应时间、评估系统性能。但在某些情境下,为了满足特定需求,我们需要更多的灵活性,比如引入Python来进行特定操作或处理复杂逻辑。**”** Jython -----
JMeter与Python的多重交响:从入门到高级应用(上)
|
8月前
|
Java 测试技术 Apache
JMeter与Python的多重交响:从入门到高级应用(下)
在性能测试领域,Apache JMeter已经成为测试专业人士的首选工具,用于模拟用户行为、测量响应时间、评估系统性能。但在某些情境下,为了满足特定需求,我们需要更多的灵活性,比如引入Python来进行特定操作或处理复杂逻辑。。
JMeter与Python的多重交响:从入门到高级应用(下)
|
测试技术
JMeter While循环控制器应用之遍历获取文件参数
JMeter While循环控制器应用之遍历获取文件参数
109 0
|
JSON 搜索推荐 Java
Jmeter常用断言之BeanShell断言详解
BeanShell断言可以使用beanshell脚本来执行断言检查,可以用于更复杂的个性化需求,使用更灵活,功能更强大,但是要能够熟练使用beanshell脚本。在这里主要通过 Failure 和 FailureMessage来设置断言结果。 Failure = false;-----表示断言成功 FailureMessage = “......";---自定义的成功信息 Failure = true;----表示断言失败 FailureMessage="=".....";---自定义的失败信息
302 0
Jmeter常用断言之BeanShell断言详解
EMQ
|
Java 测试技术 Linux
JMeter 扩展开发:BeanShell 数据模拟实现及性能探讨
本文是开源测试工具JMeter扩展性开发教程第三期,讲解如何采用JMeter内置功能BeanShell实现动态生成测试数据,并探讨其与Java扩展JMeter的实现方式对比。
EMQ
145 0
JMeter 扩展开发:BeanShell 数据模拟实现及性能探讨
|
API Apache
Jmeter系列(68)- BeanShell 内置变量 prev
Jmeter系列(68)- BeanShell 内置变量 prev
198 0
|
安全 Java
Jmeter系列(67)- BeanShell 内置变量 props
Jmeter系列(67)- BeanShell 内置变量 props
175 0
Jmeter系列(67)- BeanShell 内置变量 props