JMeter BeanShell 脚本详解及应用技巧

本文将详细介绍 JMeter BeanShell 脚本语言的基础知识和高级应用技巧,以及在性能测试中的实际应用场景。

用 Apifox,节省研发团队的每一分钟

JMeter BeanShell 脚本详解及应用技巧

免费使用 Apifox

相关推荐

最新文章

API

一体化协作平台

API 设计

API 文档

API 调试

自动化测试

API Mock

API Hub

立即体验 Apifox
目录

BeanShell 是一种完全符合 Java 语法规范的脚本语言。它允许用户在 JMeter 中编写自定义脚本。下面是一段用 BeanShell 生成随机数,并设置到 JMeter 变量上的代码:

import java.util.Random;

Random rand = new Random();
int num = rand.nextInt(100);
vars.put("randomNumber", String.valueOf(num));

JMeter 的很多地方都可以使用 BeanShell 脚本,如:采样器(BeanShell Sampler),前置处理器(BeanShell PreProcessor),后置处理器(BeanShell PostProcessor),断言(BeanShell Assertion),定时器(BeanShell Timer),监听器(BeanShell Listener)。使用 BeanShell 脚本可以很容易地扩展 JMeter 的功能,例如:

  • 在测试计划中使用复杂的逻辑控制。
  • 动态地生成HTTP请求参数。
  • 在测试过程中处理响应数据。
  • 自定义结果分析器。

BeanShell 的常用内置对象

log

记录日志。Jmeter 用 log4j 记录日志,打印的日志会记录到bin/jmeter.log文件。输出信息和错误的API 分别是 log.info``()log.error()

vars

操作 JMeter 变量。JMeter 变量可以在 HTTP 请求等地方被用到。

需要注意的是: Jmeter 变量是在线程启动时,拷贝到线程的,类似线程的局部变量。所以一个线程更新了变量,不会影响到另一个线程。

获取变量:

vars.get("name")

设置变量。如果变量不存在会创建:

vars.put("key", "value")

props

操作 JMeter 的配置文件:jmeter.properties。

获取配置的值:

props.get("key")

设置配置的值:

props.put("key", value)

data

当前请求的响应数据,可以用String str = new String(data, "utf-8")转成字符串再打印出来。类型是byte[],即字节数组。

示例

以下示例展示了 BeanShell 的一些常见功能和应用场景。

计算两个变量的和

int num1 = Integer.parseInt(vars.get("num1"));
int num2 = Integer.parseInt(vars.get("num2"));
int sum = num1 + num2;
vars.put("sum", String.valueOf(sum));

构造 HTTP 请求参数

String param1 = URLEncoder.encode(vars.get("param1"), "UTF-8");
String param2 = URLEncoder.encode(vars.get("param2"), "UTF-8");
String params = "param1=" + param1 + "&param2=" + param2;
vars.put("params", params);

获取 HTTP 响应头中的某个值

import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

String url = vars.get("url");
DefaultHttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(url);
HttpResponse response = client.execute(request);
Header header = response.getFirstHeader("Content-Type");
String contentType = header.getValue();
vars.put("contentType", contentType);

执行 HTTP 请求并解析响应数据

import org.apache.commons.io.IOUtils;
import java.net.URL;
import java.nio.charset.StandardCharsets;

String url = vars.get("url");
String response = IOUtils.toString(new URL(url), StandardCharsets.UTF_8);
// 这边可以放解析响应的逻辑
vars.put("response", response);

发送电子邮件

import javax.mail.*;
import javax.mail.internet.*;
import java.util.Properties;

String host = vars.get("host");
String port = vars.get("port");
String username = vars.get("username");
String password = vars.get("password");
String from = vars.get("from");
String to = vars.get("to");
String subject = vars.get("subject");
String body = vars.get("body");

Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", port);
props.put("mail.smtp.auth", "true");
Session session = Session.getInstance(props, new javax.mail.Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(username, password);
    }
});
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
message.setSubject(subject);
message.setText(body);
Transport.send(message);

BeanShell 的优点

JMeter BeanShell具有以下优点:

  1. 扩展性:BeanShell 脚本可以轻松地扩展 JMeter 的功能,以满足更高级的测试需求。
  2. 灵活性:BeanShell 脚本可以与 JMeter 中的其他组件集成,可以应用于各种测试场景。
  3. 易用性:BeanShell 脚本可以使用 Java 语法编写,因此对于 Java 开发人员来说,学习成本较低。
  4. 可读性:BeanShell 脚本具有较高的可读性,可以方便地进行调试和修改。

BeanShell 的缺点

JMeter BeanShell的缺点包括:

  1. 性能:BeanShell脚本的性能不如 Java 代码,可能会对测试结果产生一定的影响。
  2. 学习成本:对于非Java 开发人员来说,学习 BeanShell 脚本可能需要一定的时间和精力。
  3. 维护成本:BeanShell 脚本的维护成本较高,需要及时更新和修复。

总结

JMeter BeanShell 的使用需要一定的编程知识,但它可以极大地提高 JMeter 的灵活性和可扩展性。如果您需要更高级的测试功能,可以尝试使用 JMeter BeanShell。

试试比 JMeter 更好用的 API 工具:Apifox

JMeter 可以用来做性能测试,但在日常工作中,我们还有更多的内容要做: API 设计,API 调试,API Mock 等。我们可能会使用多个工具,但在多个工具之间频繁切换(API 设计工具 Swagger、API 测试工具 JMeter)经常会导致数据不一致和团队协作低效率。

Apifox 是一款更加智能化的 API 设计/开发/测试工具,相较于 JMeter 软件,Apifox 有以下优势:

Apifox 

易于使用

Apifox 提供简单易用的界面和交互方式,用户不需要编写脚本或进行复杂的配置即可完成 API 测试。此外,Apifox 还提供了免费的模板和示例,帮助用户更快地创建 API 请求。

自动化测试

Apifox 提供了自动化测试的功能,用户可以通过自动化测试来减少测试时间和人力成本。用户只需要设置测试计划,Apifox 就可以自动运行测试,并生成测试结果和报告。此外,Apifox 还支持测试套件,可以一次性运行多个测试用例,提高测试效率。

多环境支持

Apifox 支持多个测试环境,用户可以通过切换环境来测试不同的 API。用户只需要设置环境变量,Apifox 就可以自动切换 API 请求的 URL 和参数。此外,Apifox 还支持环境导入和导出,方便用户在不同的设备或团队之间共享测试环境。

协作和分享

Apifox 提供了协作和分享的功能,用户可以与团队成员或其他人分享测试结果和测试数据。用户还可以将测试结果和报告导出为 HTML 格式。此外,Apifox 还支持团队协作和权限管理,可以让团队成员共享 API 设计和测试资源。

总之,相较于 JMeter,Apifox 更加易于使用和智能化,可以帮助用户更高效地进行 API 测试和管理。无论是个人开发者还是企业团队,都可以通过 Apifox 提高 API 测试的效率和质量。因此,越来越多人开始选择使用 Apifox 替代 JMeter。