性能测试:利用工具模拟大量用户操作,验证承受的负载情况
目的:找到潜在的性能问题或瓶颈,分析并解决;找出性能变化趋势,为后续扩展系统提供参考
一般是在被测系统已完成功能测试,系统已趋于稳定的情况下,才会进行性能测试
了解系统业务,系统操作,明确测试对象
需求分析,确定性能测试指标
性能测试指标可分为业务性能指标和硬件性能指标
业务性能指标一般有吞吐量(PV)、吞吐率(TPS)、响应时间(RT)、事务成功率 、稳定波动正常范围。
响应时间2-5-8原则
当用户在2s内得到响应,会感觉系统响应很快
当用户在2-5秒内得到响应,会觉得响应速度还可以
当用户在5-8秒内得到响应,会觉得很慢,但是还能接受
当超过8秒还没得到响应,会觉得系统已经失去响应
硬件性能指标可以分为CPU使用率、内存使用率、Disk Time(磁盘时间)、网络带宽(过大会导致网络阻塞,网络延时变长,响应时间变差)
分析系统协议:一般性能测试脚本可以通过录制或手动开发,而录制对协议的依赖性比较强。一般会先分析系统协议(向开发团队咨询或抓包分析),再评估用什么工具完成。HTTP可以用Jmeter或LoadRunner,java接口可以用Jmeter的javaRequest元件与JUnit元件测试
从哪里获取性能测试指标?----一般需求文档中会有部分章节用来描述系统非功能性需求,但多数对性能需求的描述都比较笼统抽象,在需求不明确的情况下,通过需要性能测试工程师主动向需求方去征询。对于升级、优化的老系统,可考虑是否有历史测试方案可供参考。或者是直接分析原型系统的业务数据,统计业务量、业务分布等信息
工作评估
工作量分解,评估工作量,规划测试的参与人员(开发、运维、测试和配置等),同时也做好 风险控制
设计模型
确定测试范围以及性能指标后,把业务模型映射为测试模型
业务模型:确定好业务流程,系统在某个时间内运行的业务种类以及业务占比,即哪个业务在什么时间在运行,业务量是多少
测试模型:从业务模型中可以得到需要测试的业务。对业务进行拆分,明确业务的操作流程有哪些,比如“购买商品”的业务,具体的操作流程可能是“登录->搜索商品->提交订单->支付订单->退出”。接着明确业务占比,重要程度,目的在于:
1)明确重点测试对象,安排测试优先级
2)建模,混合场景中,虚拟用户资源分配,针对不同业务功能施加不同的负载
3)再次明确每个业务的数据、分布量等,评估之前需求分析时定的指标是否合理
性能测试场景:参照用户使用习惯设计负载场景,比如哪些业务的测试脚本一起运行,哪些业务有先后顺序,运行多少并发用户等。所以组织测试场景时尽量要与实际业务情况一致。
编写测试计划
在文档中明确列出测试范围、人力投入、持续时间、工作内容、风险评估、风险应对策略等
开发脚本
通过录制或手动开发的方式,添加固定定时器ThinkTime,增加同步定时器模拟集合点,增加if条件控制器判断逻辑等,添加后置处理器获得参数等。
事务定义
合理的定义事务,能够方便分析耗时(特别是混合业务功能场景测试),进而方便分析瓶颈。比如,购买商品,我们可以把下订单定义为一个事务,把支付也定义为一个事务。
搭建测试环境
测试环境包括服务器和负载机
确定好以下问题:
1)请求顺序、请求之间相互调用关系。
2)数据流向,数据是怎么走的,经过哪些组件、服务器等。
3)预测可能存在性能瓶颈的环节(组件、服务器等)。
4)明确应用类型IO型,还是CPU消耗性、内存消耗型->弄清楚重点监控对象。
5)关注应用是否采用多进程、多线程架构->多线程容易造成线程死锁、数据库死锁,数据不一致等。
6)了解测试环境和生产环境部署的差异,按照什么样的比例部署
测试数据准备
测试执行
基准测试
采用单业务、单用户的方式执行脚本。用于验证测试环境、测试脚本,以及为之后的性能测试提供性能基准
配置测试
一般为混合场景测试(多个业务一起执行),用于帮助分析系统软、硬件是否符合性能指标,然后优化配置使各项资源达到最优分配原则。
负载测试
目的是分析出性能变化趋势,找出性能拐点,分析性能问题和风险;为系统优化,性能条攸作出数据支撑。负载测试也分为单场景和混合场景,单场景利于分析性能问题,因为排除了其他业务干扰。混合场景更贴近用户实际使用场景。一般是先做单场景再做多场景
稳定性测试
在正常性能阈值的情况下,尽量加大负载,长时间运行,确定系统的软硬件环境是否稳定运行
测试过程监控
包括查看log,监控服务器资源,数据库和中间件等
缺陷管理
对测试过程中发现的缺陷进行管理
性能分析和调优
根据性能测试指标,分析系统存在的性能瓶颈,并给出优化建议
系统性能指标
是指用户在客户端发起一个请求到收到响应,整个过程说耗费的时间。
系统处理能力
TPS(Transaction per second):系统每秒处理请求数
QPS(Query per second):系统每秒处理查询次数
HPS(Hits per second):每秒点击次数
一般用TPS衡量整个业务流程,QPS衡量接口查询次数,HPS衡量对服务器单击请求次数
并发用户(Virtual User,简称VU)
指在同一时刻内,登录系统并进行操作的用户数量
指在系统负载情况下,失败交易的概率
资源指标
CPU使用率、利用率等
内存利用率等
磁盘吞吐量
网络吞吐量
网络吞吐量是指在无网络故障的情况下单位时间内通过的网络的数据数量。单位为Byte/s。网络吞吐量指标用于衡量系统对于网络设备或链路传输能力的需求。当网络吞吐量指标接近网络设备或链路最大传输能力时,则需要考虑升级网络设备。
主要包括信号量、进程、句柄等,一般不要超过设置的参考值即可
中间件指标
GC
GC频率:java虚拟机部分垃圾回收频率
Full GC频率: java虚拟机完全回收频率
堆使用率
ThreadPool
Active Thread Count:活动的线程数
Pending User Request: 处于排队的用户请求
JDBC
数据库指标
执行sql耗时
吞吐量
TPS
QPS
命中率
锁
锁等待次数
锁等待时间
前端指标
页面展示
首次展示时间
Onload事件时间
完全载入的时间
页面数量
页面大小
请求数量
网络
DNS时间
连接时间
服务器处理时间
传输时间
等待时间:等待某个资源释放的时间
稳定性指标
TPS曲线
资源指标变动
最短的稳定时间
可扩展性指标
可扩展性指的是系统在以集群方式进行部署时,增加的硬件资源和增加的性能指标之间的关系
可靠性指标
双击热备
集群
备份与恢复
主要都是会包括脚本生成器(也就是用户行为模拟器)->压力生成器->压力控制器->结果分析器