1、Jmeter本地装置
1.1、下载装置
软件下载地址: https://mirrors.tuna.tsinghua.edu.cn/apache/jmeter/binaries/
选择一个压缩包下载即可
然后解压缩后进入bin目录直接履行指令jmeter即可发动
1.2 修正言语
默许是英文的,修正中文,点击选项-》选择言语-》简体中文
1.3 必备插件装置
jmeter内置的常用的插件不是很多,假如要额定装置其他插件需求先下载一个插件装置东西的jar包然后放到jmeter的目录下才干运用插件装置东西的功能。
2) 下载jar包之后放到 jmeter的 /lib/ext
目录下,重启Jmeter即可。
3 打开插件管理。 选项-》 插件管理器
- 点击可用插件tab,然后勾选装置即可
推荐勾选: 带jpgc相关的插件,能够做梯度增压
1.4 修正Jmeter的堆内存
由于压测是经过Jmeter这个Java程序去跑的,所以压测的功能和能敞开的线程数量都与这个程序自身运行的环境以及装备有关。 一般Jmeter部署在服务器那儿功能会更强。
修正jmeter的 /bin/jmeter
文件 (mac环境),假如是window修正 jmeter.bat
。 修正下图的这一行便是调整堆内存信息
${HEAP:=”-Xms1g -Xmx8g -XX:MaxMetaspaceSize=656m”}
验证是否修正成功,重启运用jconsole东西衔接Jmeter进程检查jvm信息即可看到是否修正成功。 或许运用jps指令检查进程号然后再jmap指令检查堆内存分配状况。
2、 Jmeter操作说明
2.1、测验方案
默许打开的界面如下, 一份测验方案便是一份jmx文件,点击保存就会弹出保存地址。 测验方案便是包含此次做压测的一切信息。 支撑导入导出。
2.2 测验方案界面介绍
异常信息
- 右上角那个小三角能够看到jemter的履行信息,假如你的压测履行不了能够去里边看看一般是报错了
用户自定义变量
- 能够在这儿装备压测的全局变量,这样咱们在运用的时分就不用传详细的值,传变量的值即可。 这样今后要修正的话只需求修正这儿的变量值就能够了就不用到处都修正了。
- 比方咱们压测的接口的域名肯定是都相同所以一般会提取出来做全局变量。比方下面装备全局变量域名host, 然后运用的时分就直接配
${host}
即可。
2.3、装备元件
默许支撑的装备元件列表,首要效果便是装备咱们压测接口的一些参数装备
2.3.1、Http恳求默许值
操作
: 右键点击测验方案-》 增加-》 装备元件-》 Http恳求默许值组件
效果
:
- 一般压测的接口的很多恳求参数可能是一致的。 所以这儿能够设置压测接口时的默许恳求参数。 这样就不用每次配压测接口都去装备,默许会带上这儿装备的恳求参数。
比方下图装备默许的http协议,以及默许的域名。 这儿的域名装备就运用咱们前面装备的全局变量 ${host}
了
2.3.2、HTTP信息头管理器
操作
: 右键点击测验方案-》 增加-》 装备元件-》 HTTP信息头管理器
效果
:
- 与
Http恳求默许值
装备元件相似,都是装备压测接口的恳求默许值。 不过这个元件就像其名字相同装备的是默许的Http恳求头信息,这样压测接口就不用再装备Http恳求头信息默许会带上 - 比方咱们能够装备常用的默许的恳求头
Content-Type
和Cookie
。 尤其是Cookie
恳求头 这样即使是登录接口也能进行调通。
2.3.3、CSV Data Set Config
操作
: 右键点击测验方案-》 增加-》 装备元件-》 CSV Data Set Config
效果
:
- 一般用于模仿生成不同的恳求参数。 由于一般咱们对一个接口进行压测实在的场景是恳求参数是不同的
详细装备如下:
- 首要是先装备一个csv文件的地址,然后指定列头变量字段名。 之后再装备压测接口的时分就能够把运用这些变量字段名。运用格局为:
{变量名称}
。 比方下面装备运用格局便是{userName}
. - 这样在恳求压测接口的时分就会来随机读取这个csv文件的这个变量对应的列的某一个的值, 一般咱们便是经过这个组件去模仿不同的恳求参数。
2.4、线程组
线程组便是用来模仿并发的数量以及并发的行为。 比方你是要发动10个并发仍是100个并发去压测接口便是经过这个组件。而且发动压测程序其实便是经过发动咱们的线程组的履行压测。
自带带的线程组如下,其间带gc的使咱们增加插件后才有的。 不同的线程组的差异便是设置的并发行为不同
。
-
比方有些线程组是一股脑配10个并发然后一向履行10分钟。
-
有些线程组是装备先发动1个并发,每过5秒后再发动10个并发,当到达100个并发后就履行10分钟。
2.4.1、一般线程组
操作
: 右键点击测验方案-》 增加-》 线程-》 线程组
效果
:
- 下图便是咱们装备一个线程组, 装备了20个并发,然后在5秒内发动完20个并发,当履行10000服侍就停止压测。
详细该装备的并发行为能够用下图来形象的表明。 能够看到一开端是0个并发,然后随着时刻增加不短增加并发,最终在第5秒到达最大并发20,然后就一向20个并发一向履行。
2.4.2、梯度线程组(Stepping Thread Group)
操作
: 右键点击测验方案-》 增加-》 线程-》 jp@gc – Stepping Thread Group
效果
:
- 与一般线程组的并发行为不同的是,这个线程组能够做到相似于先发动5个并发,然后隔10秒后再发动10个并发,当到达100个并发,继续履行30s,然后再每隔5秒下降20个并发这种更为详细的并发行为。 而一般线程组每次只能坚持固定的并发数去跑, 咱们只能不断修正这个固定的并发数去压测以求找到接口最大的吞吐量。 下图就形象的表明了这种驼峰式的并发行为
详细装备对应的语义和并发行为如下图所示:
-
this goup will start语义
: 表明最多发动多大线程。对应图中的峰顶的值 -
first wait for语义:
从运行之后多长时刻开端发动线程;若设置为60秒, 对应图中最初的底部横线。 -
then start语义:
表明榜首非必须发动几个线程。 对应图中榜首个上升线。 -
next add语义 + threads every 语义:
表明每隔多少秒发动多少个线程。对应图中的上升梯度线。 -
using ramp-up 语义:
其间与一般线程组相同表明发动线程的时刻。 对应图中的上升梯度线的斜度,越大越斜表明用的时刻越久。 -
then hold load for语义:
表明到达最大线程后坚持最大线程继续履行多久。 对应图中的峰顶的横线。 -
finally sotp + threads every语义:
到达峰顶后,表明每隔多少秒释放多个线程。 对应图中的下降梯度线。
2.5、取样器
假如说线程组便是咱们Java的线程池,那么取样器就相当于咱们线程池要履行的Runnable任务。比方咱们要压测哪个接口就能够装备成取样器。
自带取样器如下
- 操作: 右键线程组-》 增加-》取样器
- 一般咱们用的比较多便是Http恳求取样器,用来压测接口。
2.5.1、Http恳求取样器
操作
: 右键线程组-》 增加-》取样器-》 Http恳求
效果
: 首要便是用来装备Http接口的信息,包括恳求域名,端口,接口途径、接口参数等等。 有了它就能够发起恳求。
3、 实战事例
此处压测的接口代码逻辑: 模仿履行时刻是500ms
@GetMapping
public String getA1(){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
return "33";
}
3.1、 压测接口Hello World
1、在测验方案下面增加线程组,设置100个并发,继续履行600秒。
2、增加压测的接口 增加http取样器,而且装备接口信息
3、增加接口履行结果监听器
操作
: 右键线程组-》增加-》监听器-》检查结果树。
这样咱们接口是否调通以及返回结果都能够看到
4、增加压测接口汇总报告
操作
: 右键线程组-》增加-》监听器-》汇总报告。
这样看到这个线程组压测的计算报告,包括吞吐量TPS、呼应时刻、是否异常,网络恳求量,履行次数。
5、增加吞吐量TPS实时计算图(可疏忽)
操作
: 右键线程组-》增加-》监听器-》jp@gc – Transactions per Second。
这样就能够监测吞吐量的实时改变状况。
5、增加呼应时刻实时计算图(可疏忽)
操作
: 右键线程组-》增加-》监听器-》jp@gc – Response Times Over Time
这样就能够监测接口呼应时刻的实时改变状况。
5、增加激活线程实时计算图(可疏忽)
操作
: 右键线程组-》增加-》监听器-》jp@gc – Active Threads Over Time
这样就能够监测线程组的并发行为,由于线程组的组件有很多,假如不是非常了解可能都不知道自己装备的线程组正在模仿什么样的并发行为。
7、发动线程组履行压测
操作
: 右键线程组-》发动
原理
: 线程组会去并发履行线程组下面装备的一切取样器(这儿只增加了一个还可增加多个)
最后咱们看下各部分压测结果:
1、首先是接口履行状况:
- 都是绿色表明接口调通,而且右侧可看到接口呼应结果。
2、看一下压测汇总报告计算
能够看到样本数便是一共恳求的数量, 平均值便是平均呼应时刻(单位是毫秒)结果跟咱们接口代码逻辑仍是一致的,最小值和最大值也是接口呼应时刻。 异常率便是接口调不通(吞不下)的概率。 吞吐量便是每秒能处理168个恳求。
3、看一下吞吐量改变状况 随着并发数增加,最终一向维持在180到200的吞吐量之间
3、看下呼应时刻的改变 基本维持在500ms左右
3.2、 模仿不同的恳求参数
1、新建一个CSV文件,里边放咱们不同的恳求参数,比方内容为
userId,userName
1, zhangShan
2, liSi
3, xaioming
2、新增CSV 数据文件设置组件 将咱们刚才新增的csv文件途径配到这儿,然后装备变量名,而且设置疏忽首行(由于咱们的csv文件内容首行不是恳求参数)
3、在Http取样器里边直接运用变量即可。
恳求参数要运用变量当地就用{}
包起来就行。
原理便是恳求的时分会去随机读取该文件的的这个字段的值然后到达模仿不同恳求参数的效果
3.3、 怎么恳求要登录验证的接口
这个看你们的登录验证逻辑,假如咱们的登录信息是放在cookies里边,那么咱们就能够增加HTTP信息头管理器,然后在里边装备cookie恳求头信息。只要把咱们的登录cookies放进去就能够履行成功。
缺陷便是cookie失效后每非必须重新装备,详细还有其他更自动化的解决方法
3.4、 接口怎么上传文件
接口装备那选择文件上传, 装备装备详细的装备途径即可。会去读取上传。 然后参数名称写死file就行。 然后MIME根据详细来。 一般是application/octet-stream 或许 multipart/form-data即可。 假如要模仿上传不同的文件,同上面模仿不同恳求参数相同,这儿用变量填充代表文件途径即可。