通过压测可以定位系统的性能瓶颈,以便针对性地进行优化。
前端的静态资源一般都放在cdn上,速度快、无需压测,压测一般是指后端接口的压测。一般只压测请求频率高的接口,压测请求频率低的接口没有意义。
压测结果一般关注
jmeter是一个开源免费、功能强大的压测工具,纯java编写,支持不同的请求协议(http、https),支持分布式压测。
win下载zip,linux下载tgz,里面的文件都是一样的,只是压缩格式不同。
解压,主要使用bin目录下的文件,win执行 jmeter.bat 启动,linux执行 jmeter.sh 启动。
修改GUI语言
创建压测任务
1、对测试计划单击右键,添加线程组
2、对线程组单击右键,分别添加
一个http请求对应一个接口,一个线程组可添加多个请求,这些请求通过名称进行区分。
点击工具栏的运行是压测所有线程组,可以对某个线程组右键运行,只压测该线程组。如果不想压测某些线程组或某些请求,可以右键禁用。
可以把压测任务保存为.jmx文件,传给其他人使用,在jmeter中打开.jmx文件即可。
聚合报告的指标
压测到throughtput上升缓慢,这时服务器cpu的使用率也差不多100%了,就行了。
断言一般使用响应断言即可。
有多个http请求时,可以使用自定义变量,统一设置这些http请求的protocol、服务器的ip|域名、port、path中的公共路径,方便修改。
使用步骤
场景:自定义一批要传给后端接口的参数,或者传给后端接口的参数是从数据库中导出的.csv文件。
对线程组单击右键,添加配置元件(config element)的csv数据集配置
1、点击测试计划,在最底部点击浏览,添加对应的数据库驱动的jar包。
2、新建线程组,分别添加
jmeter需要使用大量的线程模拟用户请求,很吃性能。GUI模式是在带图形界面的操作系统上,使用jmeter的GUI界面进行压测,不管是操作系统的GUI,还是jmeter本身的GUI,都占了机器不少性能,况且我们自己的开发机也运行着很多程序,jmeter不能完全发挥测试性能,压测结果有误差。
一般是把jmeter部署在单独的服务器上,在命令行进行压测,不使用监听器等耗性能的设置,以便发挥jmeter的测试性能;需要先设置好应用的堆内存 -Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m,jmeter的堆内存可以在bin/jmeter中设置,不过jmeter的堆内存一般不用手动设置。
1、下载tgz,tar -xzvf解压,cd到bin目录
2、在jmeter的GUI上创建好测试任务,没问题后,将要使用的线程组另存为.jmx脚本,传到linux上。
3、在linux上jmeter的bin目录下执行
jmeter -n -t /test/user_api.jmx -l /result/user_api.jtl -e -o /result/user_api
说明
1、下载生成的.jtl文件、html文档
2、分析.jtl文件(可选):在jmeter的GUI界面对线程组单击右键,添加监听器的聚合报告,在浏览中导入生成的.jtl文件,即可查看压测请求的总体情况。
3、双击index.html在浏览器中生成的html报告,查看压测结果分析。这里面已经包含了第二步中的聚合报告内容,所以第二步可以省略。
分布式压测:使用多个jmeter节点同时进行压测,测试结果更加准确。
一个jmeter节点作为master,其余jmeter节点作为slave,master启动分布式压测,各个slave节点同时进行压测,完成后将压测数据返回给master进行汇总。master可以同时作为slave参与应用压测。
1、准备工作
2、修改master的配置文件 jmeter.properties
#slave节点的ip,写内网ip。如果master也要压测应用,可以把master的ip写上。
remote_hosts=192.168.1.3,192.168.1.14
#如果RMI不使用ssl,可以改为true 禁用ssl
server.rmi.ssl.disable=true
3、分别启动slave
#执行bin目录下的jmeter-server
./jmeter-server
4、master启动压测
#-r表示使用分布式压测
jmeter -n -t /test/user_api.jmx -r -l /result/user_api.jtl -e -o /result/user_api
参考官方文档