性能测试主要有以下五个步骤。
1、需求调研
2、数据准备阶段
3、实施阶段
4、阶段性反馈测试结果阶段
5、性能测试报告
一、其中需求调研阶段最为重要,主要有几个步骤:
1、明确测试目标与价值
2、收集对象素材
3、了解对象技术架构与技术实现
4、梳理调用链、数据流、流量分配
5、线上现状性能分析(可选)
6、分析性能指标要求:并发数、tps、响应时间
7、确定技术方案
1、明确测试目标和价值 :我收到的需求是找到某接口在满足 100ms 的响应时间的基础上,最大的 tps.
2、收集对象素材 :我收集了 需求调研文档、接口文档、以及和接口相关的文档。
3、了解对象技术架构与技术实现:了解了该程序的主要调用链、同时收集出开发认为最耗性能的一条调用链。保证压测数据可以覆盖主要链路。
4、梳理调用链、数据流、流量分配
5、线上现状性能分析:该接口为新接口,暂未上线。所以就分析了,将来上线后在机器层面和数据库层面,和当前机器有哪些不同。
6、分析性能指标要求:并发数、tps、响应时间
7、确定技术方案 :主要是使用什么进行压测,测试数据怎么造。
二、数据准备阶段
由于跟开发进行沟通,他们逻辑里有个递归查询的逻辑,所以需要造递归查询的压测。所以我就用 jmeter 造了 100 万条含有递归查询的数据。其中里面有需要调用的 java 代码里的函数,所以 jmeter 的 beanshell 里,就写了 java 代码的引用。如下所示:
source("D:\java\Base64.java");
source("D:\java\AES.java");
System.out.println(vars.get("fpidvalue"));
String fpidvalue=vars.get("fpidvalue");
String enString = AES.Encrypt(fpidvalue);
vars.put("enString",enString);
三、性能测试实施阶段
通过压测,发现系统硬件、数据库均无压力。发现增大并发,TPS 达到 3000 后就不再上升了。
梳理调用链,发现里面有几个池子。
java 线程池、数据库 session 连接数、netty 线程池。
分别调整 java 线程池、数据库 session 连接数、netty 线程池 的值,观察 TPS 的变化。找到了系统的最大 TPS。
四、阶段性反馈测试结果阶段
由于本次测试耗时较短,所以没有阶段性反馈测试结果。
五、性能测试报告
最后写性能测试报告,测试报告分为几个部分。 1、测试结论(测试是否通过)2、测试过程数据、3、测试过程中发现的问题等几个方面。