性能常识 一次性能测试的总结

会飞的猪 · 2018年06月25日 · 最后由 会飞的猪 回复于 2019年08月27日 · 4402 次阅读

性能测试主要有以下五个步骤。
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、测试过程中发现的问题等几个方面。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 16 条回复 时间 点赞

做性能测试,分析部分感觉还是挺重要的,比如为何 tps 上不去

jmeter 如何提高单机并发?

可以调整 jmeter 所在 java 虚拟机的堆内存 或者 采用命令行模式进行压测。

会飞的猪 回复

感觉还不太够,你们单机一般能支撑多少并发?集群的话是多少 master 多少 agent?

我也在用 jmeter 我设置 300 个线程我电脑就撑不住了;已经把内存设置的挺高了,本机是 8G,在 jmeter 设置的最大是 2G,请教下还有可能是什么原因那。

zhanglimin 回复

撑不住看具体是什么问题吧,内存用完了或者网络占满了。。

zhanglimin 回复

可以打开 jvisualvm 看一下本机 jmeter 堆内存的情况啊 看看是不是内存的问题

好的 谢谢指导 那是不是一直开着本机的资源管理器?

zhanglimin 回复

内存的话楼上楼主回复你了,其他资源用资源管理器看 ok 的

会飞的猪 回复

好的 谢谢楼主

请教一个问题,生产环境都是集群部署的,测试环境是很多服务部署在一台机上的,怎样消除硬件环境不一致带来的影响😀

leunggz 回复

这个问题不好回答啊

原来大家都是差不多,插句话,关于需求调研,和产品那边沟通大概就是 把期望转成需求,把需求转成指标,依据经验对指标的量化做出阈值界定,最好别让太多人掺和太多性能指标和阈值相关的事情。

BNN 回复

性能测试过程中,有太多变量,导致了性能测试的结论会有很多误差。。。。。

实际测试过程中发现 System.out.println();打印操作也是一个比较耗时操作,那到底要不要去掉这条呢?

Benjamin 回复

是的😀

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册