在日常开发中,当完成一个接口开发时,需要对接口进行准确性测试,比如PostMan
、Swagger
等,但在接口上线运行前对其进行性能测试是很有必要的,就是所谓的接口压力测试。
压力测试就是考察当前软硬件环境下系统所能承受的最大负荷,并借助结果找出系统瓶颈所在。使用压力测试可以找到更难发现的问题,比如:内存泄漏
,并发和同步
。
有效的压力测试系统将应用一下这些关键条件:重复
、并发
、量级
、随机变化
。
压力测试指标:
Response Time : RT
)HPS(Hits Per Second)
:每秒点击次数,单位是次/秒
TPS(Transaction Per Second)
:系统每秒处理交易数,单位是笔/秒QPS(Query Per Second)
:系统每秒处理查询次数,单位是次/秒Max Response Time
):指用户发出请求或者指令到系统做出反应(响应)的最大时间Mininum Response Time
):指用户发出请求或者指令到系统做出反应(响应)的最少时间90%
响应时间(90% Response Time
):是指所有用户的响应时间进行排序,第90%的响应时间对于互联网业务,某些业务有且仅有一个请求连接,那么TPS=QPS=HPS
,一般情况下,用TPS
来衡量整个业务流程,用QPS
来衡量接口查询次数,用HPS
来表示对服务器单击请求。无论TPS
、QPS
、HPS
,此指标是衡量系统处理能力非常重要的指标,越大越好。
一般情况下:
金融行业:1000TPS~50000TPS,不包括互联网化的活动
保险行业:100TPS~1000000TPS,不包括互联网化的活动
制造业:10TPS~5000TPS
互联网电子商务:10000TPS~10000000TPS
互联网中型网站:1000TPS~50000TPS
互联网小型网站:500TPS~10000TPS
性能测试主要关注如下三个指标:
吞吐量
:每秒钟系统能够处理的请求数、任务数,该值越大越好响应时间
:服务处理一个请求或一个任务的耗时错误率
:一批请求中结果出错的请求所占比例官网: https://jmeter.apache.org/
需要注意的是:JMeter5.3版本要求Java8以上版本
将下载的压缩包解压后,进入到bin
目录中,双击执行 jmeter.bat
,会进入到下面这个页面。
选项 > 选择语言 > 中文
添加线程组,创建模拟多少个并发用户
创建完线程组后,再添加http请求,表示要对哪个接口进行测试
为需要压测的http请求添加监听器,用户生成测试结果
这个问题是Windows
本身提供的端口访问机制引发的,Windows
提供给TCP/IP
链接的端口为1024-5000
,并且要四分钟来循环回收它们,这样会导致我们在较短时间内跑大量的请求时将端口占满了。
解决方法:
cmd中,用regedit
命令打开注册表,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Tcpip\Parameters
下
parameters
,添加两个新的DWORD
,名字为MaxUserPort
和TCPTimedWaitDelay
MaxUserPort
,输入数值数据为65534
(十进制),如果是分布式运行的话,控制机器和负载机器都需要这样操作TCPTimedWaitDelay
30(十进制),表示把端口回收时间从4分钟,改为30秒修改配置完毕之后,记得重启机器才会生效