直奔主题----
需要解决的问题:
问题1. 测试目的、输出结果
问题2. 如何评估测试环境结果数据的生产参考价值
先来看第一个问题:
分析思路:根据测试对象定制测试设计
A: 在没有指标数据情况下:(例如,没明确要求系统必须在200万并发时响应时间不超过5秒等;研发者想知道自己的系统性能情况)
1. 被测对象是一个系统:
例如: 新开发了一套业务系统,现在想知道该系统的负载能力;
关键点: 吞吐量、并发量(为什么是这两个指标?这里早有专家做过深入的分析了,Throughput和Concurrency是性能测试的两大关键参量)
参考步骤: (1)测并发量的时候,不断增加并发数,收集性能数据 (2) 测Throughput的时候,在最小化用户数的前提下让Throughput最大化
结果数据: 系统最大负载、最佳负载及相应场景下性能相关数据。(CPU、Mem、Disk、TPS、最大并发、响应时长等)
2. 被测对象是系统中新增的一个模块/功能:
+情景A:
已知系统性能数据的情况下(即,根据 1 的测试,已知系统的承载力),可以直接用系统最大负载进行测试,观察新模块在最系统大负载下的性能。
结果数据:系统最大负载情况下新增模块的性能相关数据。
+情景B:
没有系统的先验性能数据情况下,单独对这一模块做性能测试。
这时我们的目的可能有两个:
-b1. 想知道该模块的最大负载数据
-b2. 想知道指定负载下的性能相关数据(例如: 1万并发请求情况下的性能指标数据)
-b3. 想知道新的模块在性能上是否合格
b1,b2 都好实践。b3 就是一个模糊的概念了。而且 b3 引入了一个更值得深入思考的问题:“怎样的性能结果数据算合格?”
解决办法参考:
1. 和经验/直觉数据做对比
例如: 一个百万用户的系统,在1万并发情况下,业务响应时长不高于 1 秒,CPU使用率不高于 40%;直观上来看,算合格了吧。
2. 和系统中其它模块的性能数据做对比(如果有的话)
3. 和自己做对比
例如: 分别测试模块在1K、2K、5K、10K负载下的性能数据,分析性能损耗趋势
B:有硬性指标要求的情况下:
这个就简单了,根据要求进行负载测试,不达标就继续优化。
再来看第二个问题:
分析思路:
1. 被测对象是一个系统:
测试环境的硬件配置不如生产环境好(生产有集群或负载均衡策略)。所以一般来说生产的性能数据都会比测试环境的结果数据好一些。
2. 被测对象是系统中新增的一个模块/功能:
这里需要注意了,单独测试一个模块时,系统中的其它业务模块可能是处于低负载或0负载状态,这与实际的生产运行情况是不一致的。
所以这时候得出的单一模块性能结果数据,并没能反应出系统在实际运行时的性能状态,甚至也没能反应出系统运行时该模块的性能状态。
(待续)