Jmeter是我们常用的一款压测工具,近期做了一次压测实践,在此记录一下。
产品需求是测试环境单个服务器节点TPS达到5000,压测目标是两个http接口,前一个接口的返回值中的token作为后一个接口的参数传入。
有两种方法可以创建jmeter测试计划。一种是直接添加线程组-事务控制器(可能有多个接口组成一个完成的事务)-HTPP请求,然后手动添加请求参数。如下:
第二种是在工作台中添加一个非测试原件-HTTP代理服务器,然后在浏览器中安装一个代理插件并配置本地地址127.0.0.1,端口8080并使用这个配置。如下:
然后在jmeter中将代理启动,在浏览器中执行需要录制的动作后会发现jmeter中已经开始录制,如下:
当录制到你需要的请求之后,记得关闭http代理,否则他会一直录制所有浏览器上的请求。接下来可以把不需要的请求都删除,只留目标请求:
接下来可以对参数进行调整,根据压测需求调整,比如此处我需要将get请求的返回值中token取出座位check的参数传入。此处我们可以添加一个后置处理器-正则表达式进行配置,具体的配置方式可以百度。
####2.压测参数配置
参数 ramp-up period 用于告知JMeter 要在多长时间内建立全部的线程。默认值是0。假如未指定ramp-up period ,也就是说ramp-up period 为零, JMeter 将立即建立所有线程。假设ramp-up period 设置成T 秒, 全部线程数设置成N个, JMeter 将每隔T/N秒建立一个线程。根本测试目标业务分析线上环境并发是逐渐上升还是一下子爆发,有助于我们配置这些参数。此处ramp-up period 设置过大过小都是不合适的,最合适的方式是先运行一次脚本。具体可参考http://blog.csdn.net/hsd412237463/article/details/49929173
配置完后查看对应的jmx文件,可以看到设置的值都有对应的配置,可以进行修改。
./jmeter -n -t captcha_v2_click.jmx -l captcha_v2_click_thread50.jtl
-n表示non-GUI,-t指定TestPlan文件 这种方式是单台服务器发起请求,由于服务器资源有瓶颈,发现在200线程左右就达到瓶颈了,如下图,200线程能达到的tps和300线程的基本没有区别,原因是压测服务器网卡达到瓶颈,且压测服务器的cpu也达到瓶颈:
测试发现从50线程往上增,到150线程的时候已经达到瓶颈。
remote_hosts=slaveA ip:端口,slaveB ip:端口 ,slaveB ip:端口
./jmeter -r -n -t captcha_v2_click.jmx -l captcha_v2_click_thread50.jtl
( -r表示远程启动(remote, jmeter master会自动向jmeter远程服务器上分发测试计划。) 这种方式生成的jtl文件是表格数据,看不出统计信息,可以导入到jmeter GUI中添加聚合报告看结果,还可以用如下命令转换为html格式的统计报告,可读性更好。./jmeter -g captcha_v2_click_thread50.jtl -e -o /home/nisp/jmeter/apache-jmeter-3.3/resultReport2click
生成的测试报告中打开index.html如下:
本文来自网易实践者社区,经作者何美玲授权发布。