写点什么

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

  • 2024-04-01
    北京
  • 本文字数:1544 字

    阅读完需:约 5 分钟

前言

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

什么是 Beanshell 前置处理器?

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

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

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


  • 打开 JMeter,并打开您的测试计划。

  • 在添加 Beanshell 前置处理器的 HTTP 请求之前,右键单击目标 HTTP 请求,选择“添加” -> “前置处理器” -> “Beanshell 前置处理器”。


Beanshell 的内置变量操作

  1. vars 变量:用来操作 Jmeter 的变量值得,常用的方法有:


  • vars.get("key"):从 Jmeter 变量中获取指定键的值

  • vars.put("key","value"):向 Jmeter 变量设置变量键值对


示例如下:



代码如下:


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():获取当前线程组编号


示例如下:



代码如下:


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():打印错误日志


实例如下:



代码如下:


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 的属性


示例如下:



代码如下:


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"));
复制代码


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


总结

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

用户头像

社区:ceshiren.com 微信:ceshiren2021 2019-10-23 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料,实时更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬。

评论

发布
暂无评论
JMeter前置处理器-Beanshell前置处理器详解_霍格沃兹测试开发学社_InfoQ写作社区