初识压力测试

情况描述

接到客户要求,需要配合做一个压力测试项目,但是这对于新手安服仔来说真是抠脑壳,太抠脑壳了。。。

工具描述

jmeter

Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具,用于对软件做压力测试。
JMeter 最初被设计用于 Web 应用测试,但后来扩展到了其他测试领域,可用于测试静态和动态资源,如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库和 FTP 服务器等等。JMeter 可对服务器、网络或对象模拟巨大的负载,在不同压力类别下测试它们的强度和分析整体性能。另外,JMeter 能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证程序是否返回了期望结果。为了最大限度的灵活性,JMeter 允许使用正则表达式创建断言。

相信有过压力测试经验的师傅都不会陌生,这里就浅谈一下jmeter的一些使用经历吧。

jmeter安装

安装很简单,直接去官网搜索下载压缩包,解压可用,这里有个坑点,vps上面是没有自带zip压缩包解压工具的,所以在vps上压测需要下载tgz压缩包,至于为什么要在vps上面压测,这又是另外一个坑了,后面会讲到。

GET HTTP请求

使用jmeter构造GET方式的HTTP请求没有什么坑点在,身为安服仔的我也是能够轻松掌握。打开软件是一个有图形化操作界面的用户友好型工具

jmeter开始界面
开始右键测试计划,选择添加->线程组(用户)->线程组


继续添加取样器里面的http请求,添加监听器,选择想要的报告,我这边一般选择的是下图中的几个

在http请求里面添加ip或者域名,添加接口

到这儿get请求基本就算是完成了,下面直接点击上方三角开始测试:

可用根据查看结果树里面的返回数据来判断是非请求成功

查看其它报告可知请求正常

至此,jmeter的GET请求方式的基本使用完成。

POST HTTP请求

post请求在http请求时选择POST请求,并且注意添加配置单元里的http信息头管理器

在post请求里的数据格式不匹配会导致请求错误,并返回415

这个时候我们在http信息头管理器里面添加content-type,这个值根据抓包中的数据匹配即可。例如:


但是这样过后,返回数据包却变成了400 Bad request,这个问题困扰了我很久,经过与前辈的沟通交流中我发现,还是构造参数的问题,在post参数中会存在格式问题,抓包抓到的参数数据是没有双引号的,直接填入到json数据中会导致服务器媒体流不匹配问题从而返回400 Bad request

开始测试

ok,这个时候准备工作基本完成了,开始压力测试,根据客户给的测试接口设置好相关参数过后,不出意外的出意外了,开始时较低的线程还好,到了5000过后线程还是卡死了,查看电脑cpu、内存登都处于正常值,考虑应该是家用光猫带宽跟不上,于是前面提到过的vps压测就得准备准备了

vps jmerter安装使用

下载tgz压缩包直接解压,在保证vps上有java环境的情况下,将windows里图形化界面创建好的任务保存为jmx文件

将jmx文件上传到vps上,运行该文件,命令为:

1
sh ../bin/jmeter.sh -n -t test.jmx -l result.jtl

该命令的大概意思是不以图形化界面启动jmeter,并将运行结果保存在result.jtl中,至此,线程带宽问题得以解决,但是,新的问题出现了,测试到10000的并发居然还没有到达接口的拐点(这是不能的,客户的东西没这么好(小声bb)),而这个时候我的vps的cpu利用率高达98%了,最后实在太晚了,而vps也跑不动了,关机!下班!

问题复盘

·参数问题–添加http信息头管理器解决
·线程带宽问题–vps解决
·最后的跑不出性能拐点是因为被waf自动拦截了(可通过ip加白解决,还有可能是vps带宽、cpu的资源不够)


初识压力测试
http://aurora.vin/2023/03/04/初识压力测试之踩坑日记/
作者
Aurora li
发布于
2023年3月4日
许可协议