Jmeter 性能测试利器-1(入门指南)

摘要:本文简单介绍Jmeter性能测试工具的使用,包括组件的使用和常见的业务场景的接口测试,后端接口使用的springboot做服务端。

安装

我下载的是https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.3.zip

打开界面使用

先解压,然后切换到bin目录双击jmeter.bat

设置中文语言

永久设置方案,配置jmeter.properties,在39行左右

ini 复制代码
#Preferred GUI language. Comment out to use the JVM default locale's language.
#language=en
language=zh_CN

创建一个测试计划

创建一个计划并保存

第一个测试案例

创建一个线程组

线程组就理解为用户,多少个用户同时访问,线程组下面设置的变量,只要没有设置为全局的,都是当前线程共享的,不会跨线程。

添加取样器HTTP请求

就是配置你调用的接口,如果有请求头一类的的,你再添加【配置元件/HTTP请求头管理器】

添加JSON提取器

因为我们要获取数据给下一个接口,提取了下面的data属性

css 复制代码
{
    "code": 200,
    "data": 1755763130398,
    "message": "success"
}

配置下一个HTTP请求

可以使用上面提取的参数

添加监听器

  • 查看结果树 添加到取样器下面的
  • 汇总报告 可以添加到取样器下也可以添加到线程组下面查询总体情况

常用处理器使用说明

BeanShell

它功能非常强大,通过脚本转换出来新的值,传递给全局或者当前线程

  • vars:当前线程变量
  • 通过 vars对象的方法访问:
    • vars.get("key"):获取字符串值(若键不存在返回 null)。
    • vars.put("key", "value"):设置字符串值。
    • vars.getObject("key"):获取任意类型的对象(需手动转换)。
  • props:全局共享
    • props.get("key"):获取字符串值(若键不存在返回 null)。
    • props.setProperty("key", "value"):设置字符串值(等价于 props.put("key", "value"))。
    • JMeter 函数:${__P(key)}(等价于 props.get("key"))、${__property(key, defaultValue)}(若键不存在返回默认值)。
场景 推荐使用 vars 还是 props?​ 原因
线程内临时数据传递(如同一个请求的多个后置处理器) vars 线程局部,无需全局共享,避免污染全局空间。
跨线程组传递动态数据(如登录 Token) props 全局共享,其他线程组可直接读取。
分布式测试中统一配置(如环境标识) props 所有节点共享同一配置,无需手动同步。
存储复杂对象(如自定义 Java 对象) vars 支持任意类型,props 仅支持字符串。
测试生命周期内的全局状态(如测试开始时间) props 随 JMeter 实例存在,覆盖整个测试周期。

现场变量转换为全局变量

csharp 复制代码
props.setProperty("total_requests", vars.get("goodsId"));

编写 MD5 加密逻辑,将原始密码替换为加密后的值

ini 复制代码
mport java.security.MessageDigest;

// 原始密码(可从变量获取,如 ${raw_pwd})
String rawPwd = vars.get("raw_pwd");

// MD5 加密方法
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] digest = md.digest(rawPwd.getBytes());
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
    sb.append(String.format("%02x", b & 0xFF));
}
String encryptedPwd = sb.toString();

// 替换请求参数中的密码(假设请求体中有 password 字段)
// 方法 1:修改变量(后续请求体用 ${encrypted_pwd} 调用)
vars.put("encrypted_pwd", encryptedPwd);
// 方法 2:直接修改请求体(需结合请求体的变量名,如请求体为 JSON)
// prev.setBodyData("{"username":"test","password":"" + encryptedPwd + ""}");
相关推荐
神奇的程序员3 小时前
从已损坏的备份中拯救数据
运维·后端·前端工程化
oden4 小时前
AI服务商切换太麻烦?一个AI Gateway搞定监控、缓存和故障转移(成本降40%)
后端·openai·api
李慕婉学姐5 小时前
【开题答辩过程】以《基于Android的出租车运行监测系统设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·后端·vue
m0_740043735 小时前
SpringBoot05-配置文件-热加载/日志框架slf4j/接口文档工具Swagger/Knife4j
java·spring boot·后端·log4j
招风的黑耳6 小时前
我用SpringBoot撸了一个智慧水务监控平台
java·spring boot·后端
Miss_Chenzr6 小时前
Springboot优卖电商系统s7zmj(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
期待のcode6 小时前
Springboot核心构建插件
java·spring boot·后端
2501_921649496 小时前
如何获取美股实时行情:Python 量化交易指南
开发语言·后端·python·websocket·金融
serendipity_hky7 小时前
【SpringCloud | 第5篇】Seata分布式事务
分布式·后端·spring·spring cloud·seata·openfeign
五阿哥永琪7 小时前
Spring Boot 中自定义线程池的正确使用姿势:定义、注入与最佳实践
spring boot·后端·python