参考:https://www.phpmianshi.com/?id=230
下载安装
下载JDK : https://download.oracle.com/otn-pub/java/jdk/15.0.2+7/0d1cfde4252546c6931946de8db48ee2/jdk-15.0.2_windows-x64_bin.exe?AuthParam=1611197417_61c2592982272667dcf142a95ef6d58a
或者 Sun公司的官网[https://www.oracle.com/] 下载
安装JDK,,一路next即可
设置环境变量
JAVA_HOME
C:\Program Files\Java\jdk-15.0.2
CLASSPATH
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
PATH新增2个
%JAVA_HOME%\bin
%JAVA_HOME%\jre\bin
打开cmd,执行 java测试是否安装成功
下载jmeter : https://mirror.bit.edu.cn/apache//jmeter/binaries/apache-jmeter-5.4.zip
安装,一路next即可
实战演练
打开jmeter.bat , 我们来写一个简单的单一http接口压测脚本,并将传参参数化
1、打开jmeter并创建一个线程组 Add => Threads(Users) => Thread Group
2、给线程组添加http请求 Add => Sampler => HTTP Request
3、红色图片处两个参数我们进行了参数化,那么我们需要创建CSV数据文件设置来实现参数化 Add => Config Element => CSV Data Set Config
Variable Names (comma-delimited) : http请求页面大括号中的内容
Recycle on EOF : 表示 txt文件中的数据取完了,会继续循环再取
jmeter.txt中内容如下:
0;1611200140
1;1611200141
2;1611200142
4、现在我们可以执行http请求了,但是执行后,需要查看传参和返回的情况,所以我们需要添加结果树 Add => Listener => View Results Tree
设置线程组中线程和循环次数都为1,执行一次查看结果
5、如果只执行几次请求的话我们可以自己来看是否请求成功,但如果压测时有几万甚至几十万个请求,我们是没办法人工检查结果的,此时我们就用到了断言,我们给这个线程组加相应断言
Add => Assertions => Response Assertion
我们看到当请求成功时,返回的数据会有 "status":"success" 这样的一个消息,所以我们把这部分加到响应断言里面
这样,当我们执行压测时,返回数据中没有 "status":"success" 这部分的请求,结果树中就会是红色的×
6、现在可以发请求也可以检查结果了,我们还缺少什么呢?缺少统计,压测过程中的相应时间,吞吐,错误率,这些都是没办法用肉眼看到的,所以我们添加聚合报告来进行统计
Add => Listener => Aggregate Report
我们执行一次10并发两次循环的压测,看聚合报告的结果
我们看到99%的请求都在116ms内返回,请求平均耗时54ms,吞吐量31.9/s
吞吐量是什么意思呢,就是每秒完成的事务数,是从发出请求到接收到服务器返回的完整事务,我们这次的结果就是每秒完成31.9个事务。
总结
实际压测过程中还需要监控下cpu、数据库、带宽的使用情况,一般会有监控平台,在监控平台看就可以了。
压测注意事项:
1. 先阅读:https://wiki.swoole.com/wiki/page/62.html
2. 注意各个中间件,默认的Session中间件基于文件,io性能非常差。
3. 压空接口,目的在于对比框架的消耗,对比fpm,快慢都是相对的。
4. 如果代码中有类似sleep的同步阻塞操作,那qps自然不会高。
5. 压测时最好在内网测试,避免网络带宽因素影响结果。
全套软件 (JDK jmeter和测试用例下载)
链接:https://pan.baidu.com/s/1PkQPZl9SDCu4E84DhdQfZA
提取码:ye19