相信很多人都知道,并发是后端开发中比较棘手的问题之一,如果只是靠Swagger, PostMan 等简单的API 测试工具是无法测试出并发问题的。
为此我们需要学习使用一款并发压力测试神器——JMeter
JMeter 是Apache 旗下一款开源的100%使用Java编写的性能压力测试工具。
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 对接口进行压力并发测试。
接下来我们讲解如何使用JMeter.
点击官网Download Releases,我们可以看到这样的界面:
接下来点击上图中的*.tgz 压缩包,当然如果你的电脑不是Mac OSX 而是windows 的话则应该下载*.zip 压缩包。
下载完成后我们解压到电脑里任意你喜欢的路径,然后设置环境。
如果是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
怎么办?
由于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
如果不改这个配置,请求的结果如果包含汉字就会乱码。
JMeter 默认带有GUI 图形用户界面,如果想启动JMeter, 我们需要执行bin 目录下的jmeter 可执行文件。
如果是windows 电脑我们可以通过jmeter.bat 来启动我们的JMeter.
如果是Mac OSX 或Linux 我们可以通过jmeter.sh 来启动我们的JMeter
执行效果如下
接下来我们开始配置JMeter
这里的Name建议英文名称,comments 备注这里可以写中文解释。
假如我们想模拟500个用户线程,来访问一个投票接口的话,那么我们需要这么做:
创建完成后我们可以看到如下图所示
最主要的是配置域名,端口,请求方法GET/POST , 请求路径以及请求参数
值得注意的是,如果你第一次玩这个,可能不晓得如何添加参数。
执行等待一小会便可以在view Results Tree 视图中看到如下请求JSON 结果内容:
如果想看每个请求的具体请求时间可以修改展示结果类型为 Text
如果你仔细看你会发现,这500个请求,请求时间精确到秒级别都是一摸一样的。
当然他还有更多高级用法,这里只介绍下最常用的用法。
如果想了解更多,请参考JMeter官方文档
本篇完~