docker初始搭建
写在前面:水平有限,错误和不足辛苦指出~~
性能测试不同于功能测试,性能测试设计范围更宽范,包括:网络,被测代码,基础组件(数据库等)等,因此,在进行性能测试之前需要有一个完整的测试方案,指导测试的执行。
1、方案内容
许多专业性能测试书籍和优秀博客都提到过性能方案或性能测试流程,比较有名的是《Web应用程序性能测试指南》的7个执行步骤,在我自己工作比较习惯的方案如下:
- 需求分析
- 核心指标
- 测试环境搭建
- 测试用例设计
- 测试场景
- 测试数据构造
- 测试工具选择
- 测试执行
- 性能报告、分析和调优
下面介绍每个环节的主要内容
2、需求分析
一般来说性能测试需求不同,需要执行的性能测试类型也不同(浅谈性能测试——性能测试类型)。例如:日常常规项目可能通过可靠性测试来确定本次迭代升级在预期的压力下的运行状态是否正常;容量规划可能通过配置测试来确定软硬的最佳最合。总体来说,性能测试的目标是确定系统的执行效率、稳定性、兼容行、可靠性、可扩展性容量等。
性能测试需求的来源,可以是需求文档、技术设计文档和合作团队的沟通交流中形成。
3、核心指标
性能测试需求明确后,相应的就可以确定使用那种测试方法和相应的核心指标,一般来说核心指标包括如下(具体可参考:待补充):
- 客服端或发压端
- 并发数
- qps/tps
- 响应时长/最大响应时长等
- 系统端或服务端
- cpu使用率
- 内存使用率
- 网络带宽
- 硬件指标(mysql,es等)
4、测试环境搭建
线下测试环境最好是可以和线上环境一样,那样性能测试结果最准确,但一般很难做到线下测试环境和线上完全一样,比较好的方案是测试环境是对线上环境集群的仿真模拟,但在规模小于线上环境,比如线上100个实例,线下2个实例进行模拟,但机器的cpu,内存等性能和线上是保持一致的。
一般来说测试环境的搭建主要包括如下方面:
- 硬件环境:包括连接mysql,redis,es等,一般要求配置和部署的机器性能和线上一致
- 软件环境:包括被测系统,已经和被测系统交互的系统(注:这要评估被测系统性能是否会成为瓶颈,或者被测系统能否抗住压力测试等)
- 网络环境:包括网络带宽等
5、测试用例设计
测试用例需要注意测试场景覆盖全,数据全并选择使用一个熟悉的发压工具,包括如下几个方面:
5.1 测试场景
不同项目需要覆盖的性能测试场景也不一样,但万变不离其宗,测试场景的抽取主要从产品需求和系统架构两个方面进行,可以从如下几分方面考虑:
- 产品需求
- 模拟产品真实用户,构造接口调用链
- 评估线上真实流量,在进行多接口同时压测时,构造压测比例
- 线上真实数据评估,会不会存在某种数据量特别大,对线上照成压力,例如:数据库的某张表数据量特别大
- 系统架构
- 硬件瓶颈,主要包括CPU、内存、磁盘I/O 方面的问题、中间件瓶颈(数据库、redis、ES等)
- 软件瓶颈,主要包括代码业务逻辑、算法、SQL语句等
- 网络瓶颈,主要指动态负载均衡器、交换机等设备是否存在瓶颈,但这方面的瓶颈我自己遇到的也少,没有经验参考
综合分析以上因素可以得到具体的性能测试场景:
例子一:压测XXX系统,并发XX,时长 10小时,验证是否存在内存泄漏,并查看CPU使用率等其他指标是否正常
例子二:压测XXX系统,并发XX,时长1小时,请求参数XXX,验证查询大数据量下接口返回时长,并查看其他指标是否正常
5.2 测试数据
性能测试中的测试数据主要包括两部分的数据:
- 性能测试中的请求数据,包括数据量的大小,并发数的大小等,但同时异常请求,极端请求和真实线上请求这些请求也应该在构造请求数据是被考虑进去
- 系统中的应用数据(例如:数据库中数据,redis中数据),包括测试系统数据和线上系统数据量级一致,数据内容是否覆盖系统全部功能,极端场景数据等
5.3 测试工具
目前市面上可选择的工具较多,例如:JMeter、LoadRunner等,并大厂一般都会自己搭建压测平台来进行压力测试。一般来说这些发压工具可以满足日常的压力测试的需求,对压测工具的介绍,本系列的后序章节会有补充。
6、测试执行
测试执行按照已经制定的测试用例来做,一般无其他技巧。但根据个人经验来看,性能测试可以早点进行,或者排期时间排长一些,一般性能问题的排查和调优比较费劲和耗时,并且性能测试可能需要循环好几轮才能到达预期目标。
7、性能报告、分析和调优
性能测试的最终目标是使性能达到理想的状态,所以性能测试往往是:测试 --》报告 --》分析 --》调优 的循环。
测试报告的内容需要注意的点是,需要把测试环境、测试数据、测试核心指标等清晰的呈现出来。性能测试新手容易犯的错误是,单纯的记录性能测试中的各项数据,没有给出性能测试的结论。结合系统架构从测试数据中得出结论,这也体现了性能测试同学的思考和对系统的掌握程度。
常说性能测试不只是性能测试人员的事儿,一般需要开发人员、DBA、运维人员的配合。性能分析和调优会涉及系统的软硬件和网络等部分,这也是性能测试中的难点,一般和开发、DBA等一起排查一起调优。优秀的性能测试人员,不仅能找出性能瓶颈,还能给出解决方案,这部分我也在学习中,希望后续能补充上来。