vlambda博客
学习文章列表

性能测试工作不可忽视的一些问题?

 做功能测试的时候经常会有这样的疑问,性能测试怎么测呢?



接下来阐述一下性能测试的流程:



01

明确测试目标


    了解你想要测试的系统想要达到一个什么样的指标或者要求。比如常见的:qps 500、平均响应时间2s以内、或者根据现有产品日活计算得出qps、或者根据业务增量计算得出qps、事务错误率、被测系统cpu、内存、磁盘io、数据库dao维持在百分之多少等等


02


充分理解被测系统


1、理解被测系统代码实现逻辑;

2、理解被测系统运行环境的配置;

3、理解被测系统缓存、中间件调用机制;

4、理解被测系统逻辑分支关系;

5、了解被测系统压力过大时,降级处理能力;

6、了解被测系统压力过大时,自我恢复能力;

这里有一个最重要的核心原则,即:一切配置与生产环境保持一致或等比配置。


03


制定测试策略


1、核心原则

    80%策略针对现有业务的预期增长计算,20%策略针对突发业务增量或意外请求增量。

2、策略设计

    根据压测和稳定性有所不同,常用策略是根据pv、uv的统计结果进行换算出预期结果。

3、策略调整

    根据被测系统代码被执行的随机性和用户实际出发代码命中率,按比例进行策略调整。


04


准备测试脚本


1、测试工具选择

    某些场景下,一些测试工具会拖慢整个事务的相应时间,从而导致qps上不去,比如locust的复杂业务,相同场景下会比jmeter慢很多,再有因为python语言的特性,运行速度相对java写的jmeter要慢,不过可以经过c重写或者用golang request client替换,以提高并发能力

3、脚本优化:要根据使用工具特点和模拟事务场景,以及缓存策略、代码算法、代码调用依赖、接口降级等多方面因素考虑。


05


准备测试数据


1、测试数据

    数据对策略和脚本的影响非常大,是不可忽略的一项工作,压测过程中不能以全部随机数据为第一原则;

  • 全部随机数据:好处是准备数据简单,但实际的代码命中率非常低,导致实际测试平均qps偏高;

  • 命中原则随机数据:分析代码逻辑分支、算法、用户命中几率,用真实数据或等比准备数据,这样好处是几乎可以达到生产环境一致的测试效果;

2、测试数据和生产数据的一致性问题

  • 数据量:数据量的差异会导致数据库dao响应时间存在差异,间接影响qps指标,保持好测试和生产的数据一致性所得出的测试结果才是正确的。

  • 数据缓存:全新数据和新刷入缓存的数据,所测出的结果完全不同,如果没有好的理解被测系统的数据缓存机制,新数据会进redis,再进数据库,而老数据完全读取redis,所得结果也天差地别,没有完全对也没有完全错,而是完全根据实际业务场景和用户行为分析得出最佳结果。

    


06


脚本执行

1、执行环境

  • 压力机:cpu、内存、网络带宽占比等因素,影响压力机生成压力,如果并发数过高,单台难以到达预期,考虑多机联合。

  • 负载机:考虑静态和压测状态下增长变化。

  • 数据库dao:dao响应会拖慢代码响应速度,导致qps低。

  • redis:制定合适的针对策略,验证不同场景。

2、观察响应趋势

    响应时间和qps:如果不是开始或结束阶段,有明显上升或下降趋势,就要当心了,可能是各种原因造成的,一定要认真排查。


07


收集测试结果

1、日志:如果过程有错误产生,错误在可接受范围内,一定做好日志的分析;

2、压测过程中的压力机和负载机状态:静态和压测状态下的对比;

3、grafana或阿里云,搜集相关接口状态统计;

4、jmeter、lr、locust等报告输出;


08


环境恢复

1、压测造成的数据影响及时恢复,主要是写库会插入很多垃圾数据;

2、压力机或负载机的临时扩容,恢复到初始状态;





往期推荐 

🔗