文章目录
基础-页面
依赖库
🍇 位置:
apache-jmeter-5.6.2\lib
🍇 使用:
在BeanShell预处理程序中编写java代码,如果发现某些库不存在与jmeter中,可以将xxx.jar包下载放入apache-jmeter-5.6.2\lib位置即可。
线程组

Ramp-Up表示多少时间内启动线程,比如线程数100,Ramp-Up设置为10,表示10秒内启动100线程,不一定是每秒启动10个线程;
是在Ramp-up时间内,启动x个线程,但不能保证x个线程同时对服务器发起请求;
案例
使用BeanShell
参数配置:使用变量${xxx}

消息体参数:

http请中body data不能选中
jmeter默认 参数与消息体参数两者只能存在其一,前者有参数,后者就不能使用;
参数案例:

消息体案例:

使用HTTP信息头管理器
可以设置http信息头内容,比如Content-Type的值,来设定http请求的参数传递方式。

本机jmeter加密方式
sm3:
import cn.hutool.crypto.SmUtil;
String[] appIdList = new String[]{"1c7aad9cd3abc01268c4ecfdac248a3b912073d6"};
String[] reqIdList = new String[]{"1234567"};
String[] secretList = new String[]{"806ec0000170a169"};
String ct = String.valueOf(System.currentTimeMillis());
String appId = appIdlist[0];
String reqId = reqIdList[0];
String secret = secretList[0];
String sceneId = "0001";
String ss1 = String.join("&","appId=" + appId, "ct=" + ct, "reqId=" + reqId);
log.info(ss1);
String sign = SmUtil.sm3WithSalt(secretList[0].getBytes()).digestHex(ss1);
vars.put("reqId",repId);
vars.put("appId",appId);
vars.put("sceneId",sceneId);
vars.put("ct",ct);
vars.put("sign",sign);
//vars.get("reqId");
//vars.get("appId");
//vars.get("sceneId");
//vars.get("sign");
//vars.get("ct");
md5:
import org.apache.commons.codec.digest.DigestUtils;
String apiKey = "wuxi";
String transId = "20240412150606100335423";
String code = "28f09d127a745d97b82b8d9259ce3a79";
// String ip = "127.0.0.1"; // 异常ip
String ip = "127.2.2.12";
String apiSecret = "bv78g4f38ofb";
String checkParam = "apiKey"+ apiKey +"apiSecret" + apiSecret + "transId" + transId;
String token = DigestUtils.md5Hex(checkParam);
vars.put("apiKey",apiKey);
vars.put("transId",transId);
vars.put("code",code);
vars.put("ip",ip);
vars.put("token",token);
重定向
概念:
自动重定向(状态码一般是200、20X):当重定向时,自动跳转时,只针对GET和Head请求,自动重定向可以自动跳转到最终目标页面,但是jmeter不记录重定向过程内容【在查看结果树中只能看到重定向后的响应内容】
跟随重定向(状态码一般是302、30X):当重定向时,自动跳转时,自动重定向可以自动跳转到最终目标页面,但是jmeter记录重定向过程内容【在查看结果树中既能看到重定向后的响应内容,也能看到重定向前的响应内容】
请求参数构建错误
🍇 1.0 接口
@RequestMapping("/v1.0/xx")
public Result function(HttpServletResponse response, HttpServletRequest request, @RequestJson BaseParams baseParams){}
现象:
java代码:
采用post请求,参数中含有+;
使用new HttpPost,UrlEncodedFormEntity的utf-8编码entity对象;可以正常执行;
jmeter:
将其中的参数摘录出来,post请求,body携带参数,可以执行;
🍇 2.0 接口
@RequestMapping("/v2.0/xx")
public Result function(HttpServletResponse response, HttpServletRequest request, BaseParams baseParams) {}
现象:
java代码:
采用post请求,参数中含有+;
使用new HttpPost,UrlEncodedFormEntity的utf-8编码entity对象;可以正常执行;
jmeter:
将其中的参数摘录出来,并且将含有+的参数,将其转换为%2B,才能执行;
并且不能通过body携带参数,只能通过key-value键值对传递;
🍇 3.0 接口
@RequestMapping("/v3.0/xx")
@ResponseBody
public Result function(HttpServletResponse response, HttpServletRequest request, @Valid BaseParams baseParams) {}
现象:
java代码:
采用post请求,参数中含有+;
使用new HttpPost,UrlEncodedFormEntity的utf-8编码entity对象;可以正常执行;
jmeter:
将其中的参数摘录出来,并且将含有+的参数,将其转换为%2B,才能执行;
并且不能通过body携带参数,只能通过key-value键值对传递;
核心点:
参数绑定和编码不同;
参数便捷构建

该界面中,创建key-value数据,快捷方式是直接复制key=value的数据,然后选择下方的“从剪贴板添加”即可。
但是存在一个问题,它会消除value中的“=”。
案例:
剪贴板对象为:
1 apikey=xxx=xxx
2 a = xxx=
3 a = =xxx
真实效果如下:
1 value中=后的内容没有被输入
2 value中空格可以正常识别,但是=后会消失
3 value中=前的空格被输入,=后的文字没有被识别

nacos测试-服务发现
🍇 http请求构建

参数介绍:
namespaceId = 命名空间id
serviceName = 服务名
ip = 服务的ip地址
port = 服务端口号
weight = 该服务的权重
healthy = 服务的健康状态
enable = 是否是临时实例
groupName = 服务所述组名
🍇 HTTP消息头管理器

Authorization:认证信息,nacos的鉴权token
Content-Type:请求中数据的格式
🍇 计数器

多个服务发起注册,测试的时候,只针对端口port做处理,即针对port做递增处理;
假设4个请求,起始端口是8081,那么所有的请求就是8081 8082 8083 8084
🍇 BeanShell预处理程序

为实现将计数器里面的数值,读取到参数列表中;
其中vars.get("xx")参数名与计数器中的引用名称保持一致;
🍇 聚合报告

列表字段含义:
label = 请求的名称
样本 = 请求的个数
针对响应时间长短,设置了参数:
中位数 = 表示所有请求时长的中位数
90% = 表示90%的请求时长
95% = 表示95%的请求时长
99% = 表示99%的请求时长
最小值 = 表示请求的最短响应时间
最大值 = 表示请求的最长响应时间
异常 = 表示异常请求的占比
吞吐量 =

字段含义:
timeStamp = 每个请求的时间戳
elapsed = 耗时时间
label = 请求的标签
responseCode = 响应码
responseMessage= 响应信息
threadName = 线程名
dataType = 响应数据类型
success = 请求是否成功
failureMessage = 断言失败信息
bytes = 响应接收字节数
sentBytes = 请求发送字节数
grpThreads = 当前线程组的线程数
allThreads = 所有线程组的线程数
URL = 请求URL
Latency = 请求发送到接收到第一个响应的时间
IdleTime = 请求再队列中等待的时间
Connect = 建立TCP请求的时间
🍇 查看结果树

nacos测试-配置读取
🍇 线程组配置

🍇 HTTP请求

参数介绍
show:展示信息 =all
dataId:nacos中唯一标识配置信息的标识符
group:nacos中区分不同微服务或应用组件
tenant:命名空间
namespaceId:命名空间
content:={"server":{"port":"$ser_port"},"database":{"url":"$sql_url","username":"$sql_name"}}
port:使用port服务的端口号;url:服务使用的数据库地址;username:访问数据库的用户名
🍇 BeanShell预处理程序

🍇 查看结果树

🍇 聚合报告


字段含义:
timeStamp = 每个请求的时间戳
elapsed = 耗时时间
label = 请求的标签
responseCode = 响应码
responseMessage= 响应信息
threadName = 线程名
dataType = 响应数据类型
success = 请求是否成功
failureMessage = 断言失败信息
bytes = 响应接收字节数
sentBytes = 请求发送字节数
grpThreads = 当前线程组的线程数
allThreads = 所有线程组的线程数
URL = 请求URL
Latency = 请求发送到接收到第一个响应的时间
IdleTime = 请求再队列中等待的时间
Connect = 建立TCP请求的时间
重定向测试
🍇 任务描述
已知两个请求:请求1和请求2,请求1的返回结果是请求2的url。
🍇 具体实践
两个请求需要在同一个的线程组中,执行时启动线程组。

将两个线程共有的参数,写入用户参数中,路径为:线程组-右键-添加-前置处理器-用户参数

请求1——http信息

请求1——请求头信息

请求1——json jmesPath Extractor

请求2——http

post请求携带wav参数
ffprobe version 7.1.1-essentials_build-www.gyan.dev Copyright (c) 2007-2025 the FFmpeg developers
built with gcc 14.2.0 (Rev1, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-dxva2 --enable-d3d11va --enable-d3d12va --enable-ffnvcodec --enable-libvpl --enable-nvdec --enable-nvenc --enable-vaapi --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
libavutil 59. 39.100 / 59. 39.100
libavcodec 61. 19.101 / 61. 19.101
libavformat 61. 7.100 / 61. 7.100
libavdevice 61. 3.100 / 61. 3.100
libavfilter 10. 4.100 / 10. 4.100
libswscale 8. 3.100 / 8. 3.100
libswresample 5. 3.100 / 5. 3.100
libpostproc 58. 3.100 / 58. 3.100
Input #0, wav, from 'test-voice.wav':
// 文件格式wav
Duration: 00:00:01.37, bitrate: 705 kb/s
// duration 时长 1.37秒 bitrate 比特率
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 1 channels, s16, 705 kb/s
// 编码格式 pcm_s16le 采样率= 44100 Hz 声道数;1 采样精度 s16
ffprobe version 7.1.1-essentials_build-www.gyan.dev Copyright (c) 2007-2025 the FFmpeg developers
built with gcc 14.2.0 (Rev1, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-dxva2 --enable-d3d11va --enable-d3d12va --enable-ffnvcodec --enable-libvpl --enable-nvdec --enable-nvenc --enable-vaapi --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
libavutil 59. 39.100 / 59. 39.100
libavcodec 61. 19.101 / 61. 19.101
libavformat 61. 7.100 / 61. 7.100
libavdevice 61. 3.100 / 61. 3.100
libavfilter 10. 4.100 / 10. 4.100
libswscale 8. 3.100 / 8. 3.100
libswresample 5. 3.100 / 5. 3.100
libpostproc 58. 3.100 / 58. 3.100
Input #0, wav, from 'test.wav':
// 格式 wav
Duration: 00:00:04.38, bitrate: 256 kb/s
// 时长4.38秒 比特率256
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 16000 Hz, 1 channels, s16, 256 kb/s
// 编码格式pcm_s16le 采样率=16000 Hz 声道数 1 采样精度 s16
🍇 手机录音机录制
Input #0, wav, from 'xhj-template.wav':
Duration: 00:00:07.31, bitrate: 2304 kb/s
// 时长 比特率
Stream #0:0: Audio: pcm_s24le ([1][0][0][0] / 0x0001), 48000 Hz, stereo, s32 (24 bit), 2304 kb/s
// 编码格式pcm_s24le 采样率=48000 Hz 声道数=stereo 双声道立体音,采样精度 s32(24位)
🍇 固定wav数据构建
audacity软件下载。
真实下载还需要有MuseHub软件,具体链接是:https://www.audacityteam.org/download/?lan&lang=zh-CN
配置 编码格式pcm_s16le 采样率=16000 Hz 的音频;
具体操作见下图:

问题
修改字体大小
参考:
https://blog.csdn.net/qq_44084906/article/details/121717542 修改jmeter字体大小
jmeter启动
分析:
apache-jmeter-5.6.2中的apacheJmeter.jar和jmeter.bat有什么区别么 对于jmeter的启动而言
apache-jmeter.jar
是JMeter的核心组件,是一个Java归档文件(JAR文件),包含了JMeter的所有类和资源文件。
它本身不能直接运行,需要通过Java虚拟机(JVM)来执行。
可以通过命令行使用java命令来启动JMeter,指定apache-jmeter.jar作为主类路径。java -jar apache-jmeter.jar
是一个Windows批处理脚本文件,用于在Windows操作系统上启动JMeter。
负责设置JMeter运行所需的各种环境变量和参数,然后调用Java虚拟机(JVM)来启动JMeter。
简化了启动JMeter的过程,用户不需要手动设置复杂的命令行参数。
http请求基本信息填写
两种填写方式:

请求url拆开写,会自动拼接参数中的内容;
即协议、ip、port、路径都分开。

请求url全部写入路径中,包括请求参数;
如果只填写协议、ip、port,将参数写入参数的位置,那么请求url将不会识别参数。
4169

被折叠的 条评论
为什么被折叠?



