初衷
网上有很多JMeter的教程都很优秀,但是我想按照我对JMeter的理解出一篇教程,以便于我以后作为开发人员可以自己对自己写的代码进行性能测试。
1、首先JMeter它的主要作用是性能测试
(1)负载测试:同时发生的用户操作和会话管理
(2) 压力测试: 旨在找出系统的极限和恢复能力
(3)并发测试:系统在正常至最高预期负载下的表现
还有其他但是我用不到就不做讲解了
2、对于接口并发的疑问
我在使用JMeter进行并发测试的时候遇到了不同样式的测试方法,我列举一下方式:
(1)使用线程组
(2)使用定时器
(3)使用控制器
等等,但是真正的并发是不存在的(完美的并发在实际测试中表现不出来),我在刚开始的并发测试中使用的是线程组,后来才了解到更真实的并发可以使用同步定时器来操作。
一、软件介绍
**Apache JMeter™**应用程序是开源软件,一个 100% 纯 Java 应用程序,旨在加载测试功能行为和测量性能 。它最初是为测试 Web 应用程序而设计的,但后来扩展到其他测试功能。
二、软件下载安装
下载地址:Apache JMeter - Apache JMeter™
![](https://file.jishuzhan.net/article/1776418995210031105/b3db01e6720db3167e9dd76ef53f5313.webp)
三、打开软件
1、解压文件打开bin目录
![](https://file.jishuzhan.net/article/1776418995210031105/61143200cf07b5619cf36e1554683563.webp)
2、打开 jmeter.bat文件
![](https://file.jishuzhan.net/article/1776418995210031105/bcbaedd1ea7cdef7affcf594fe3fc6dc.webp)
3、切换语言
![](https://file.jishuzhan.net/article/1776418995210031105/b12bc980c48455f9420fb295d1cba884.webp)
永久性切换语言需要打开bin目录中的 jmeter.properties 文件加上
language=zh_CN
![](https://file.jishuzhan.net/article/1776418995210031105/57659e2670c12a6ce9d239c88d82ec84.webp)
四、解决软件界面错乱问题
在JMeter中找到bin目录,在bin中创建 setenv.txt文件里面写入以下代码
set JVM_ARGS=-Dsun.java2d.d3d=false
保存,修改setenv.txt 文件名为setenv.bat,即可解决使用时 JMeter 软件因为分辨路问题造成的界面错乱问题
五、开始性能测试
一、模拟测试接口的并发数(线程组)
(1)新建一个线程组
![](https://file.jishuzhan.net/article/1776418995210031105/be534d87949952ec9ea0f461fd9a9408.webp)
![](https://file.jishuzhan.net/article/1776418995210031105/7856cd7cdd6a9368ead5bd44809caa33.webp)
1、线程数指的是要模拟的多少用户请求 比如你要模拟 200个人请求一个登录接口就设置为200
2、Ramp-Up时间(秒)的意思是 在多少秒之内执行完毕 上面设置的线程 比如:登录接口的线程你设置为200,Ramp-Up时间(秒) 设置为 1秒,那么登录接口就会在1秒之内执行完 200个线程
3、循环次数指的是以上设置循环请求几次
(2)添加请求
![](https://file.jishuzhan.net/article/1776418995210031105/3d9ab259af4c7e09ed4d3daa0ed9d77a.webp)
![](https://file.jishuzhan.net/article/1776418995210031105/84bc75e7b445095178a7c7f1adb398f1.webp)
1、添加你要请求的API接口按照以上格式编写,你的API 路径地址要卸载路径的输入框中
(3)添加请求头
![](https://file.jishuzhan.net/article/1776418995210031105/8d2c175a677ab41e44769d4f65b8e29d.webp)
![](https://file.jishuzhan.net/article/1776418995210031105/5e8757d5f3ca2208849ee0a414ea5b08.webp)
![](https://file.jishuzhan.net/article/1776418995210031105/20d44a91e6d85ebe0b82f118568af9db.webp)
1、注意:测试的接口如果是类似于登录接口的,请求头中不包含数据,如果是其他需要登录完毕之后才能请求的接口需要再请求头中加上cookie、token等请求头数据
(4)添加结果树
![](https://file.jishuzhan.net/article/1776418995210031105/c34c5ebf5ea015f333662fed50674f42.webp)
1、添加结果树的目的是为了观察一会儿进行模拟请求时接口返回的结果
(5)接口并发测试
![](https://file.jishuzhan.net/article/1776418995210031105/a36d7eb5c9baed906423f639db1b20a3.webp)
![](https://file.jishuzhan.net/article/1776418995210031105/92a873a4ea42188dacdc2b198425d105.webp)
可以看到以上请求成功了
(6)添加聚合汇报
![](https://file.jishuzhan.net/article/1776418995210031105/9b80899a4fce94315d51259058d5e32a.webp)
![](https://file.jishuzhan.net/article/1776418995210031105/80708c41731eddfec4dfaa171f039ba2.webp)
聚合汇报的作用主要是显示:性能指标概览、性能瓶颈及问题诊断
![](https://file.jishuzhan.net/article/1776418995210031105/ac5d338fe6282dc88dc8db03ec4503d9.webp)
我们设置为200并发来测试一下这个接口
![](https://file.jishuzhan.net/article/1776418995210031105/6cb0903f4e61bc84655ce0bf78e33e0c.webp)
200并发下的接口相应情况如下:
![](https://file.jishuzhan.net/article/1776418995210031105/6bf8f38ee3f011b908c498f60f962bc6.webp)
(7)使用响应断言器
![](https://file.jishuzhan.net/article/1776418995210031105/1922ac77e3f72a36896c830f9eb95e79.webp)
响应断言里面的设置很多,大家可以根据实际的需求去进行网上搜索这里只做简单的使用
![](https://file.jishuzhan.net/article/1776418995210031105/22370b0c32c73de5fa63c5a5cb79bf11.webp)
我设置返回的文本里面如果包含320则表示请求通过
![](https://file.jishuzhan.net/article/1776418995210031105/3044fc094e24512722c09a47cc1aa38f.webp)
我们改成200再试下
![](https://file.jishuzhan.net/article/1776418995210031105/0917c8a82396385545cce4974ee13b55.webp)
他就成功了
![](https://file.jishuzhan.net/article/1776418995210031105/f8a05a52119c86f8fc86ec88ec6583e4.webp)
但是响应的文本中没有320这个值 只有200所有请求失败了
二、模拟测试接口的并发数(同步定时器)
(1)新建一个线程组
![](https://file.jishuzhan.net/article/1776418995210031105/e45a454eff709155b7fe42260f5cf68c.webp)
(2)添加请求
上面有操作步骤
(3)添加同步定时器
![](https://file.jishuzhan.net/article/1776418995210031105/b24bd5a01748683fa226918078c0d0de.webp)
1、此处做出解释模拟用户组的数量指的是5个用户为一组,例如你的线程组设为了10,然后这里设置了5,那么一会儿请求的时候就是两组并发,每组并发为5
![](https://file.jishuzhan.net/article/1776418995210031105/57d9b2fe503df6ca1fdd2ea5a458378d.webp)
(4)添加结果树
上面有操作步骤
(5)添加聚合汇报
上面有操作步骤
(6)添加表格查看器
![](https://file.jishuzhan.net/article/1776418995210031105/4dee085ef0e830383234e904b0cc7189.webp)
(7)接口并发测试
![](https://file.jishuzhan.net/article/1776418995210031105/8be195d9ec1ff7c6ebf5a89073ede7d1.webp)
![](https://file.jishuzhan.net/article/1776418995210031105/72326f7bb8bc1f429174aedbf803e3c9.webp)
我将线程组和同步定时器都设置为100试下
这个是结果:
![](https://file.jishuzhan.net/article/1776418995210031105/cfc1d958dc90177acb8a641a771a2b97.webp)
对比一下:线程组+同步定时器 VS 线程组
1、线程组+同步定时器
![](https://file.jishuzhan.net/article/1776418995210031105/cfc1d958dc90177acb8a641a771a2b97.webp)
2、线程组
![](https://file.jishuzhan.net/article/1776418995210031105/f858d5a23231f360a74afbcb6b12180e.webp)
PS:个人感觉差不太多