Jmeter使用教程
一、接口测试
发布时间 | 版本 |
---|---|
2024-01-07 | 5.6.3 |
2023-07-11 | 5.6.2 |
2023-07-10 | 5.6.1 |
2023-06-23 | 5.6 |
2022-06-14 | 5.5 |
2021-12-24 | 5.4.3 |
2021-12-16 | 5.4.2 |
2021-01-22 | 5.4.1 |
找几台测试机子名字
断言与检查点一样
1.测试计划整体执行顺序
测试计划 → 线程组 → 配置元件 → 前置处理器 → 定时器 → 采样器 → 后置处理器 → 断言 → 监听器
2.请求数据格式
post请求要填写
2.post请求传参位置
在Jmeter中post请求如果参数格式是表单与get请求传参的位置相同
如果是参数格式是json格式填写在消息实体中
如果请求入参是Query,直接拼接在路径后
3.全局变量
全局变量在Jmeter中称为用户参数
调用方式为${变量名}
4.Cookie管理器
自动保存cookie时,将每次反复清除cookies勾选,可保持cookie最新,自动保存cookie时,在cookie管理器中是看不到的。
手动加入cookie
5.对文件进行参数化
内置函数使用说明:https://jmeter.apache.org/usermanual/functions.html#__BeanShell
- 生成函数后,复制生成的函数,直接在调用的位置复制函数即可使用
- 文件路径的相对路径为脚本的存储位置
6.CSV数据文件设置
7.正则表达式提取器
- 公式格式:左边界(匹配符号)右边界:可以提取出想要获取的数据内容
- .:是通配符,可以代表任意字符(除换行回车)
- +:代表前面的字符出现1次或者多次
- *: 代表前面的字符出现0次或者多次
- .*匹配规则:找到左边界值后,往右查找有边界,找到最后面的右边界,中间的所有数据都被记录下来
- ?: 代表非贪婪匹配,找到左边界后,往右查找匹配右边界,只要有匹配的右边界就停止继续查找;再次查找
111:表示提取第一个捕获到的内容(第一个括号捕获到的内容)
8.Json提取器
9.HTTP请求默认值
将一些重复的内容填写在里面,后面的请求就不需要再填写
10.跨线程组关联
- 保存JMeter属性:setProperty——放入BeanShell取样器中执行
- 读取JMeter属性:Property——放入到第二个线程组的http请求中
setProperty
是一个用于设置属性值的方法,将局部变量,赋值给一个属性值。
Property
是一个用于调用(获取)属性值的函数
通过 setProperty
动态设置的属性值会存活在整个测试计划的运行期间。
11.MIME类型
- 测试上传文件接口
MIME类型(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展类型)是互联网上用来标识文件格式的一种标准。它最初是为了在电子邮件中传输不同类型的内容(如文本、图片、音频等)而设计的,后来也被广泛应用于Web开发、文件传输等领域。
MIME类型的构成
MIME类型由两部分组成:类型(type)和子类型(subtype),中间用斜杠“/”分隔。例如:
text/html
:类型是text
,子类型是html
,表示HTML文本文件。text/plain
:纯文本文件。image/jpeg
:类型是image
,子类型是jpeg
,表示JPEG格式的图片。application/postscript
:它主要用于描述页面的布局、图形、文字等内容,广泛应用于打印、排版和图形设计领域。PostScript 文件是一种文本文件,包含了一系列的 PostScript 命令,用于指示打印机或绘图设备如何生成页面内容。
12.抓包
- 在测试计划中添加HTTP测试脚本记录器、查看结果树,创建线程组,选择目标控制器
- 手动开代理设置代理指向Jmeter(这时可以刷新一下页面,应该是打不开网页的,因为Jmeter代理还没有开启)
- 在Jmeter的测试脚本记录器中,点击启动
- 操作网页,就会将抓取的内容放在线程组中
二、连接数据库
Illegal:非法的,declared:宣布,宣告
测试计划中配置JDBC的jar包
线程组–>配置元件–>JDBC Connection Configuration
pool:池子
不同操作对应的类型
1.对数据库查询内容参数化
- 使用ForEach遍历,“ForEach” 在中文中的意思是 “遍历”
- 使用计数器;计数器更灵活
计数器注意事项:变量中套变量需要使用V函数
三、MD5加密
添加–>前置处理器–>BeanShell PreProcessor
编写BeanShell脚本
/*Bx-Auth-TimeStamp:当前系统时间,格式:yyyyMMddHHmmss;Bx-Auth-Key:子账户操作就是子账户Key 创建子账户就是总账户AccountSecret;Bx-Auth-SignType:采用 MD5 大写 32 位加密,a.创建子账号内容为:AccountKey=xxxx&Authkey=AccountSecret&timeStamp=yyyyMMddHHmmss;b.其他的,比如创建用户时,内容为:AccountKey=xxxx&Authkey=AppKey&timeStamp=yyyyMMddHHmmss;*/
//java语法
//变量仅在这个文件内有效// 导入MD5加密需要用到的jar包。
import org.apache.commons.codec.digest.DigestUtils;//声明拼接加密字符串需要的变量
String AccountKey="zhangsan";
String Authkey="bb7a5b21923146fda22a958486709649";
String timeStamp="${__time(yyyyMMddHHmmss,)}";//拼接加密字符串
String str1="AccountKey="+AccountKey+"&Authkey="+Authkey+"&timeStamp="+timeStamp;//对str1进行md5加密
String str2=DigestUtils.md5Hex(str1);
//将str2转换为大写
String str3=str2.toUpperCase();//提取18位
String str4 = str3.substring(7, 25);//日志打印
log.info("字符串: " + str3);//将str3输出为可供外部组件调用的变量
vars.put("str5",str4);
vars.put("timeStamp",timeStamp);
vars.put("Authkey",Authkey);
四、jmeter录制脚本
HTTP(S)测试脚本记录器
五、逻辑控制器
ForEach控制器,通常与用户定义的变量一同使用
IF 控制器
仅一次控制器
交替控制器
- 忽略子控制器块
- Interleave across threads:跨线程组交替:每个线程第一个请求是上次线程的第二次请求
随机控制器
随机顺序控制器
循环控制器
while控制器
- LAST :当 While 控制器下 最后一个 样例执行失败后 跳出循环
遇到socket可以让开发协助
六、定时器
https://testerhome.com/topics/38450
1.固定定时器
固定定时器可设置一个固定的时间值,需要注意的是固定定时器的作用域。
作用域:看固定定时器的爹是谁,它爹的作用域就是它的作用域。
设定固定定时器后,其作用于它有效的区域中的每一个请求,每一个请求都会有固定的停顿时间。
一、图中延时 2000 毫秒=2 秒,作用于整个线程组,请求 1 和请求 2 都延迟 2 秒
2.同步定时器
在 jmeter 中的集合点,其实就是同步定时器,在里面可以设置要达到的用户数量以及超时时间。
同步定时器的作用域和固定定时器相同。
同步定时器属性:
1,模拟用户组的数量:图中设置数量为 10,意思是需要在脚本的执行过程中,到达请求 2 的线程必须有 10 个,才能允许 10 个线程同时发起请求。如果线程数不足 10,请求不发起,已到达请求 2 的线程等待,等到达请求 2 的线程数足够 10 时,10 个线程同时发起请求 2。
2,超时时间:图中设置 5000 毫秒=5 秒,意思是,如果线程到达请求 2,线程数不足 10,开始等待,等待时间超过 5 秒,即使到达请求 2 的线程数依然不足 10,已到达的线程依然发起请求 2。
图中同步定时器,设置在事务控制器下,事务控制器下的请求 2 和请求 3,都会在到达请求的线程数足 10 时,才发起请求。

3.常数吞吐量定时器
七、线程组
1.setup线程组
前置线程组:可以用于预置测试数据,如登录、获取 token 等
2.线程组
3.teardown线程组
后置线程组:可以用于退出登录、删除测试数据、释放资源
==注:==如果这三个线程组同时存在,执行顺序是setup线程组-线程组-teardown线程组;一般setup线程组和teardown线程组不用。
4.jpgc插件带来的线程组
学习链接:https://blog.csdn.net/xy_best_/article/details/106242332
1.阶梯式加压线程组(stepping thread group)
2.终极线程组(ultimate thread group)
- 相当于n个标准线程组的叠加,一般适用于错峰场景
八、压测
1.添加监听器
1)聚合报告参数详解
- Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
- #Samples:请求数——表示这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
- Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,以Transaction 为单位显示平均响应时间
- Median:中位数,也就是 50% 用户的响应时间
- 90% Line:90% 用户的响应时间
- Min:最小响应时间
- Max:最大响应时间
- Error%:错误率——错误请求数/请求总数
- Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
- Received KB/sec(每秒接收的KB):每秒钟从服务器接收到的数据量。这个指标显示了网络流量的输入。
- Sent KB/sec(每秒发送的KB):每秒钟发送到服务器的数据量。这个指标显示了网络流量的输出。
测试结果在聚合报告中对应的参数:
响应时间:90% 百分位 单位为毫秒;1秒以内为优秀,业内规则258;但是也要结合公司配置的,可以先办项目上线,再慢慢收紧
- 2秒内为优秀,2-5秒为良好,5-8秒-较差
tps:吞吐量
吞吐率:接收+发送(KB/sec)
2)活跃的线程曲线
3)响应时间曲线
4)tps曲线
2.线程组设置
使用Jmeter进行分布式压测
3.开始压测
观察性能指标,曲线,聚合报告
九、分布式压测及生成性能测试报告
1.环境准备
- JDK/JMeter 版本:所有节点完全一致(建议 JMeter 5.6.3 + JDK 8)
- 主控机和从控机连接同一个网络(主控机和从控机相互可以ping通)
- 关闭防火墙、杀毒软件、安全管家等
- 禁用多余的网络适配器(只留一个)
2.修改主控机与负载机配置
1)在负载机的电脑上面,只需要启动jmeter-server.bat的文件就可以了(需要配置jdk及jmeter的环境变量)
2)修改jmeter的bin目录下的jmeter.properties文件
# 将server.rmi.ssl.disable值修改为true,关闭ssl功能
3)在主控机上面配置负载机的ip地址,配置方法是修改jmeter.properties文件中的remote_hosts信息,(此处端口号可以不填写,默认端口号就是1099)
remote_hosts=127.0.0.1,192.168.1.5,192.168.1.13
# 192.168.1.5,192.168.1.13这两个都是远程的负载机
# 127.0.0.1是主控机
4)启动jmeter-server.bat文件
3.进行分布式测试
1)使用GUI界面
要保证主控机和负载机都能成功发送请求
第 1 步:主控机选择要执行的脚本
第 2 步:运行–>远程启动所有/远程启动
2)使用命令
第 1 步:进入 JMeter bin 目录,在路径中输入cmd,回车
第 2 步:执行分布式压测并生成性能测试报告
jmeter -n -t D:\test\test.jmx -r -l D:\test\result.jtl -e -o D:\test\report
十、命令行使用jmeter
第 1 步:进入 JMeter bin 目录,在路径中输入cmd,回车
第 2 步:在打开的cmd窗口中执行如下命令:
jmeter -n -t 要执行的jmeter脚本的全路径 -l 1.jtl文件 -e -o 测试报告生成的文件夹位置例如:jmeter -n -t C:\Users\Windows\Desktop\jmeter脚本\bugfree_login.jmx -l D:\result.jtl -e -o D:\report参数详解:
-n 以非GUI模式运行jmeter
-t 要执行的jmeter脚本的文件名
-l .jtl文件的位置(这个文件必须是不存在的)
-e 在脚本运行结束以后生成html格式报告
-o 性能测试报告将要存放的文件夹位置(这个文件夹必须是已经存在的空文件夹)
-r 表示的是远程启动所有机器
十一、生成性能测试报告
用现有的.jtl文件生成html版性能测试报告:
1.使用命令
jmeter -g .jtl文件的全路径 -o 存放测试报告的文件夹位置
2.使用GUI界面
调整jmeter生成性能报告TPS曲线的采集频率
修改user.properties文件的
jmeter.reportgenerator.overall_granularity=1000