Java后端研发神兵利器之JMeter接口并发测试
1.1 写在前面的话
相信很多人都知道,并发是后端开发中比较棘手的问题之一,如果只是靠Swagger, PostMan 等简单的API 测试工具是无法测试出并发问题的。
为此我们需要学习使用一款并发压力测试神器——JMeter
1.2 什么是JMeter?
JMeter 是Apache 旗下一款开源的100%使用Java编写的性能压力测试工具。
1.3 JMeter 可以做什么?
JMeter 可谓是测试人员最爱的神兵利器之一。
JMeter 由于完全使用Java编写,因此支持跨平台,不仅可以用于Windows ,更可用于Mac OSX ,Linux 等多个平台。
而且,JMeter 还可以帮助测试人员生成各种格式的测试报告,支持测试的协议和组件也很广泛:
- Web - HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, …)
- SOAP / REST Webservices
- FTP
- Database via JDBC
- LDAP
- Message-oriented middleware (MOM) via JMS
- Mail - SMTP(S), POP3(S) and IMAP(S)
- Native commands or shell scripts
- TCP
- Java Objects
并且,完整的多线程框架允许通过多个线程进行并发采样,并通过单独的线程组同时对不同的函数进行采样。
而这一点正是我们这篇博文学习使用的重点——使用JMeter 对接口进行压力并发测试。
1.3 如何使用JMeter?
接下来我们讲解如何使用JMeter.
1.3.1 下载JMeter
点击官网Download Releases,我们可以看到这样的界面:
接下来点击上图中的*.tgz 压缩包,当然如果你的电脑不是Mac OSX 而是windows 的话则应该下载*.zip 压缩包。
1.3.2 配置环境变量
下载完成后我们解压到电脑里任意你喜欢的路径,然后设置环境。
如果是Mac OSX 则需要执行如下命令,将解压后的JMeter添加到环境变量:
# Config JMeter
export JMETER_HOME=/Users/zhaoqingfeng/documents/app/jmeter/apache-jmeter-5.3
export PATH=$PATH:$JMETER_HOME/bin
配置文件立即生效,如果是新的Mac OSX 系统需要执行如下命令:
source /etc/zshrc
如果是老系统,那么执行如下命令
source /etc/profile
值得注意的是,Mac OSX 新版本升级后环境变量不再在
/etc/profile
中,而是默认使用/etc/zshrc
.
关于这个问题的更多讨论见:Mac OSX 每次打开shell执行maven命令都需要source /etc/profile
怎么办?
1.3.3 修改默认的字符编码
由于JMeter 默认使用的是ISO-8859-1 并不支持中文汉字,因此在开始之前我们最好修改下这个默认配置。
打开/Users/zhaoqingfeng/Documents/app/jmeter/apache-jmeter-5.3/bin/jmeter.properteis 配置文件,修改如下:
# The encoding to be used if none is provided (default ISO-8859-1)
sampleresult.default.encoding=UTF-8
如果不改这个配置,请求的结果如果包含汉字就会乱码。
其实还有一个比较简单的方法:图形用户界面即可修改。。。
1.3.4 运行JMeter
要想运行JMeter 可以通过执行jmeter.bat (Windows系统)或者jmeter (Mac OSX或其他Linux系统)来启动。
该文件位于bin目录下,比如我的在如下路径下:
/Users/zhaoqingfeng/Documents/app/jmeter/apache-jmeter-5.4.3/bin/jmeter.bat
/Users/zhaoqingfeng/Documents/app/jmeter/apache-jmeter-5.4.3/bin/jmeter
- 如果是windows 电脑我们可以通过jmeter.bat 来启动我们的JMeter.
- 如果是Mac OSX 或Linux 我们可以通过jmeter.sh 来启动我们的JMeter
sh jmeter
除了jemeter.bat 和jmeter 这俩脚本之外,还有很多其他脚本。
- jmeter.bat 运行 JMeter(默认在 GUI 模式下)
- jmeterw.cmd 在没有 Windows shell 控制台的情况下运行 JMeter(默认在 GUI 模式下)
- jmeter-n.cmd 在此放置一个 JMX 文件以运行 CLI 模式测试
- jmeter-nr.cmd 在此放置一个 JMX 文件以远程运行 CLI 模式测试
- jmeter-t.cmd 在此放置一个 JMX 文件以在 GUI 模式下加载它
- jmeter-server.bat 以服务器模式启动 JMeter
- mirror-server.cmd 在 CLI 模式下运行 JMeter 镜像服务器
- shutdown.cmd 运行 Shutdown 客户端以优雅地停止 CLI 模式实例
- stoptest.cmd 运行 Shutdown 客户端突然停止 CLI 模式实例 JMeter 默认带有GUI 图形用户界面,如果想启动JMeter, 我们需要执行bin 目录下的jmeter 可执行文件。
执行效果如下
1.3.5 配置JMeter
接下来我们开始配置JMeter
- 填写测试名称Name 用于区分测试用例,
这里的Name建议英文名称,comments 备注这里可以写中文解释。
假如我们想模拟500个用户线程,来访问一个投票接口的话,那么我们需要这么做:
- 选中刚才创建的模块名称,右键,Add-----> Threads(Users)-------> Thread Group
- 接下来我们填写线程组配置,我们这里配置500个线程,这将会模拟500个用户同时请求一个投票接口
- 选中线程组层级,右键,Add ---- > Sampler ------>Http Request.
因为我们要模拟用户请求投票接口因此这里是Http Request ,这应该也会是我们最常用的一种。
创建完成后我们可以看到如下图所示
最主要的是配置域名,端口,请求方法GET/POST , 请求路径以及请求参数
值得注意的是,如果你第一次玩这个,可能不晓得如何添加参数。
请注意看最下方有一个添加按钮可以添加参数
- 配置完请求参数后我们需要配置下请求结果监听。
1.3.6 执行请求
点击如下按钮执行请求
1.3.7 查看请求结果
执行等待一小会便可以在view Results Tree 视图中看到如下请求JSON 结果内容:
如果想看每个请求的具体请求时间可以修改展示结果类型为 Text
如果你仔细看你会发现,这500个请求,请求时间精确到秒级别都是一摸一样的。
当然他还有更多高级用法,这里只介绍下最常用的用法。
如果想了解更多,请参考JMeter官方文档
本篇完~