JMeter前置处理器-Beanshell前置处理器详解

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: JMeter的Beanshell前置处理器允许用Java-like语法执行测试前的自定义逻辑,如参数化和数据处理。要添加它,右键点击HTTP请求,选择“添加”->“前置处理器”->“Beanshell前置处理器”。内置变量如`vars`, `ctx`, `log`和`props`提供与JMeter变量、上下文、日志和属性的交互。例如,`vars.get("key")`用于获取变量,`log.info()`用于记录日志。使用这些工具,测试者能增强性能测试的复杂性和准确性。

image.png

前言

在JMeter中,前置处理器用于在发送HTTP请求之前执行特定的操作。Beanshell前置处理器是一种非常强大的前置处理器,它允许您使用Java语言编写脚本来实现各种复杂的逻辑。本文将介绍如何使用Beanshell前置处理器来执行自定义操作以增强性能测试。

什么是Beanshell前置处理器?

Beanshell前置处理器是JMeter提供的一种前置处理器,它使用Beanshell脚本语言编写。Beanshell是一种类似于Java的脚本语言,它允许您使用Java语法编写代码,并且可以与Java类和库进行交互。这使得Beanshell前置处理器非常灵活,可以执行各种自定义逻辑,如参数化、数据处理、计算等。

如何在JMeter中添加Beanshell前置处理器?

要在JMeter中添加Beanshell前置处理器,我们可以按照以下步骤操作:

  • 打开JMeter,并打开您的测试计划。
  • 在添加Beanshell前置处理器的HTTP请求之前,右键单击目标HTTP请求,选择“添加” -> “前置处理器” -> “Beanshell 前置处理器”。

image.png

Beanshell的内置变量操作

  1. vars变量:用来操作Jmeter的变量值得,常用的方法有:
  • vars.get("key"):从Jmeter变量中获取指定键的值
  • vars.put("key","value"):向Jmeter变量设置变量键值对

示例如下:

image.png

代码如下:

string name = vars.get("name") //此处获取的jmeter变量值转换成Java变量
log.info("获取到的变量值为:="+name);//打印一下获取的变量值

vars.put("phone","13201100123"); //向Jmeter变量中设置一个phone变量
log.info("设置phone的变量值为:="+vars.get("phone")); //打印一下设置的phone值
  1. ctx变量:用来获取当前线程的上下文信息,常用的方法有:
  • ctx.getVariables().get("key"):等价于vars.get("key"),从Jmeter变量中获取指定键的值
  • ctx.getProperties().getProperty("key"):获取Jmeter的属性,这里可以获取Jmeter.properties配置文件下的属性
  • ctx.getThreadNum():获取当前线程组编号

示例如下:

image.png

代码如下:

log.info("=通过ctx形式获取一下Jmeter存储的变量:="+ctx.getVariables().get("name"));
log.info("=通过ctx形式获取一下Jmeter属性:="+ctx.getProperties().getProperty("sampleresult.default.encoding")); //此处验证我们配置的编码属性
log.info("=====通过ctx形式获取一下当前线程编号:="+ctx.getThreadNum());
  1. log变量:用来记录日志,会写进jmeter.log文件中,常用的方法有:
  • log.info():打印普通日志
  • log.warn():打印警告日志
  • log.error():打印错误日志

实例如下:

image.png

代码如下:

log.info("这是一条普通的日志");
log.warn("这是一条警告信息");
log.error("发生报错,请检查一下问题");
  1. props变量:用来操作jmeter的属性的,常用的方法有:
  • props.get("propName"):获取Jmeter的指定属性信息
  • props.put("propName","propValue"):给Jmeter设置属性
  • props.containsKey("key"):判断Jmeter是否存在指定key的属性
  • props.contains("values"):判断Jmeter是否存在指定value的属性

示例如下:

image.png

代码如下:

log.info("通过props变量获取下Jmeter的编码属性:"+props.get("sampleresult.default.encoding"));
log.info("通过props变量判断下Jmeter的编码属性是否存在:"+props.containsKey("sampleresult.default.encoding"));

实际使用

了解了各种变量之后,我们可以在执行测试时,实际使用Beanshell前置处理器,比如我们要在执行测试时,添加上时间变量,我们可以如下设置:

vars.put("time", "${__time(,)}");
log.info("时间参数:"+vars.get("time"));

运行脚本,查看结果树,如下:

image.png

总结

在本文中,我们介绍了如何使用Beanshell前置处理器来执行自定义操作以增强JMeter性能测试。通过编写Beanshell脚本,可以实现各种复杂的逻辑,从简单的参数化到数据处理和计算。Beanshell前置处理器为性能测试提供了更大的灵活性和可扩展性,使我们能够更好地模拟真实的使用场景,并发现潜在的性能问题。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6月前
|
测试技术
JMeter前置处理器-用户参数详解
JMeter是一款开源性能测试工具,其前置处理器功能强大,能模拟真实用户行为。本文聚焦于用户参数这一重要前置处理器,阐述了用户参数的作用域规则:全局(测试计划)、线程组或请求级别。通过实例展示了如何定义单个或多个用户值,并说明了“每次迭代更新一次”选项的影响。用户参数与用户定义变量的主要区别在于,前者可为参数分配多个值,且在变量名冲突时优先级更高。理解这些概念有助于优化JMeter的性能测试效率。
|
6月前
|
Java
Jmeter 的 Beanshell基本用法
Jmeter 的 Beanshell基本用法
|
JSON 数据安全/隐私保护 数据格式
|
JSON 搜索推荐 Java
Jmeter常用断言之BeanShell断言详解
BeanShell断言可以使用beanshell脚本来执行断言检查,可以用于更复杂的个性化需求,使用更灵活,功能更强大,但是要能够熟练使用beanshell脚本。在这里主要通过 Failure 和 FailureMessage来设置断言结果。 Failure = false;-----表示断言成功 FailureMessage = “......";---自定义的成功信息 Failure = true;----表示断言失败 FailureMessage="=".....";---自定义的失败信息
407 0
Jmeter常用断言之BeanShell断言详解
|
存储 JSON 测试技术
JMeter 后置处理器之JSON提取器
JMeter 后置处理器之JSON提取器
423 0
|
存储 Apache 索引
JMeter 后置处理器之正则表达式提取器详解
JMeter 后置处理器之正则表达式提取器详解
135 0
|
1月前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
【10月更文挑战第1天】Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
130 3
|
2月前
|
测试技术 数据库 UED
Python 性能测试进阶之路:JMeter 与 Locust 的强强联合,解锁性能极限
【9月更文挑战第9天】在数字化时代,确保软件系统在高并发场景下的稳定性至关重要。Python 为此提供了丰富的性能测试工具,如 JMeter 和 Locust。JMeter 可模拟复杂请求场景,而 Locust 则能更灵活地模拟真实用户行为。结合两者优势,可全面评估系统性能并优化瓶颈。例如,在电商网站促销期间,通过 JMeter 模拟大量登录请求并用 Locust 模拟用户浏览和购物行为,可有效识别并解决性能问题,从而提升系统稳定性和用户体验。这种组合为性能测试开辟了新道路,助力应对复杂挑战。
107 2