前两天讲了:
“性能测试,你知道什么是99线吗?”
“性能测试调研:测试的目的是什么?”
“ 性能测试准备些什么?”
今天看看第四篇“性能测试准备”都有哪些内容:
1. 测试场景设置
2. 测试场景执行及监控
3. 测试结果收集及分析
4. 问题分析定位
5. 调优及回归测试
6. 测试报告编写
7. 测试资料归档总结
1. 测试场景设置
根据测试方案中的测试场景进行设置,场景设置主要有如下内容:
场景运行方式:按时间运行、按迭代次数运行,按时间运行优先级高于按迭代次数;
其他关键设置项:并发用户数、pacing、log(一般设置为关闭)、ThinkTime(一般设置为关闭)、Multithreading(分process和thread方式,一般选择thread,部分脚本不支持thread时选择process)。
与压力强度相关的设置主要为并发用户数和pacing(控制迭代间隔时间)。
常用测试场景:
基准测试:验证业务功能是否有明显的问题,如运行不通、报错、响应时间很长等问题;场景设置为1个并发用户,pacing为1秒,迭代100次;压力很小,测试结果的响应时间可以作为基准参考。
负载测试:验证单个业务功能在一定压力下的性能情况,是否有明显的性能问题、是否能够进行并发处理等;场景设置为10、50……等不同的并发用户数,pacing根据具体情况及测试目的设置,一般运行10分钟-20分钟。
混合场景测试:验证系统整体性能情况,是否存在性能问题及各业务功能之间的影响关系等;场景设置根据测试范围的业务功能及其业务占比进行设置,运行时间一般设置为10分钟-20分钟,并发用户数、pacing等要根据业务占比进行设置,一般根据目标TPS进行并发用户数、pacing等的计算,设置不同目标TPS的场景,直到达到系统瓶颈或某业务功能性能达不到业务占比,一般要测试出系统最大处理能力。
稳定性测试:验证系统长时间运行的稳定性,包括TPS、响应时间及系统资源使用情况等;场景设置按照混合场景进行,压力一般选取系统最大处理能力的80%或根据具体情况设置,运行时间根据系统类型设置为24小时或48小时等。
混合场景设置1000TPS:
2. 测试场景执行及监控
场景运行前先设置结果文件名称及目录,场景执行完成后会自动保存结果文件,方便结果统计分析。
测试场景执行时要根据测试结果判断是否达到预期或出现性能瓶颈,如下图是其中一种出现性能拐点的情况:
测试场景运行期间需根据系统情况进行各种监控:
性能指标监控:在场景执行时打开Controller的Running Vusers、Trans Response Time、Trans/Sec(Passed)、Total Trans/Sec(Passed)等窗口,可以实时查看是否存在问题。
压力机资源监控:在压力较大时,压力机的资源压力也会增加,需观察压力CPU、内存、磁盘、网络等使用情况,如压力机压力较大则需增加压力机。
服务器资源监控:包括测试环境的应用服务器、中间件服务器、数据库服务器等,都需观察压力使用情况,可以根据系统具体情况重点监控测试范围及压力负载较大的服务器;
监控方法:使用top、dstat、netstat、free等命令监控,或使用nmon工具进行监控,并保存监控结果,便于分析。
中间件监控:RocketMQ监控,使用命令查看MQ的接收和消费情况,必要时可以用脚本将监控结果保存以便于分析。
数据库监控:使用Navicat工具可以查看数据库的连接数、sql语句及状态等信息,可以将执行时间较长的sql拷贝,分析其语法进行优化等。
JVM监控:使用jvisualvm、jconsole等工具可以监控JVM的堆栈及线程等信息,可以分析Java应用内存使用情况及是否可能存在内存泄露等。
日志监控:可以在场景运行前清空业务日志,在场景运行时实时查看日志中是否有错误信息等,在场景运行完成后可以查看日志中的报错信息、比较耗时的处理流程等。
3. 测试结果收集及分析
测试场景运行完成后对测试结果进行收集,包括LR结果及各种监控结果。LR结果使用LR Analysis进行打开,nmon监控文件.nomn文件使用nmon analyser.xls工具分析后生成.xls文件。
Analysis结果
Analysis结果_Summary:
Analysis结果_Average Transaction Response Time:
Transactions per Second:
Total Transactions per Second:
性能测试结果分析,主要记录响应时间(average、min、max、90%等)、TPS、事务数(成功数、失败数)等,需查看响应时间、TPS趋势图是否运行平稳,记录错误数及错误信息。
系统资源使用情况分析,主要记录CPU使用率(User、Sys、Wait、Total等)、内存使用率、Disk Busy%、Net Read、Net Writer等,查看监控文件图表的各项指标是否运行平稳。
其他监控结果分析:RocketMQ监控分析,统计接收和消费数据量等,判断是否有数据丢失及堵塞情况;
数据库监控分析:查看连接数等是否设置合理,是否有慢查询、锁等待等;
JVM监控分析:查看JVM内存垃圾回收是否正常,是否内存资源不足,是否有内存泄露等;
日志监控分析:日志中是否有报错信息,是否有比较耗时的流程节点等。
4. 问题分析定位
在场景运行期间及测试结果查看后可能会发现各种问题,包括环境问题、功能问题、性能问题等,需要进行分析定位。
可能出现的问题及分析定位:
TPS很低、响应时间很高、性能指标不平稳,查看压力机、服务器资源使用率,查看日志是哪个流程节点耗时较多,查看数据库是否有慢查询等。
错误率较高、程序报错,查看LR报错信息,查看日志报错信息。
服务器资源使用率较高、服务器资源使用不稳定、服务器宕机,查看具体消耗的资源,查看消耗资源的服务及进程。
应用服务停止,查看日志,查看资源消耗。
RocketMQ堵塞,查看资源消耗,查看日志,查看配置参数等。
数据库SQL慢查询,查看分析SQL语句的语法及表结构、索引等,查看数据库服务器资源。
5. 调优及回归测试
针对性能测试发现的问题及性能瓶颈进行调优,根据具体系统及测试情况,可能的调优点有:
优化程序,修改程序bug,优化业务处理逻辑,优化算法等;
优化数据库表结构及SQL语句,优化表结构(不使用大表、使用合理的字段类型及长度、合理的主键和索引),优化表的索引避免全表扫描和全表记录锁等;
优化参数配置,应用程序参数优化,JVM参数优化,数据库连接数优化等;
优化服务器硬件配置,对消耗资源较高的服务器进行硬件升级,如数据库服务器使用SSD分布式存储等;
优化数据库架构,做读写分离,对大表进行表分区等;
优化系统架构,根据系统具体情况做区部或全部的架构调整,如做集群、增加缓存机制、优化业务耦合度等。
调优后进行回归测试,进行分析对比,确认调优结果是否达到预期。
6. 测试报告编写
测试执行及调优完成后进行测试报告编写,主要包括测试过程、测试结果、问题及调优情况等内容。
测试报告主要包括:
测试背景、测试目的、测试内容、测试环境(硬件环境、软件环境、逻辑架构等)、测试方法(测试场景、测试执行、测试监控等)、测试结果(性能指标、测试结果等)、测试结果分析、测试问题说明、测试结论和建议等。
测试结果主要包括性能测试结果和服务器资源使用情况等。
测试结果分析对性能指标结果和服务器资源使用情况进行较详细的分析。
测试结论主要对测试结果和测试指标进行对比,得出是否符合指标的结论。
7. 测试资料归档总结
测试完成后对测试脚本、测试场景、测试方案、测试报告等资料进行归档,对测试过程中的问题进行总结,便于以后测试时资源重复利用和学习提升。