文章目录
基础-页面
线程组
Ramp-Up表示多少时间内启动线程,比如线程数100,Ramp-Up设置为10,表示10秒内启动100线程,不一定是每秒启动10个线程;
是在Ramp-up时间内,启动x个线程,但不能保证x个线程同时对服务器发起请求;
HTTP请求
案例
使用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请求的时间
问题
修改字体大小
参考:
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的过程,用户不需要手动设置复杂的命令行参数。