性能测试流程
性能需求调研
当接到一个性能测试项目时,首先要对被测试系统进行全方位的性能需求调研工作,了解被测系统的架构和组成部分,以及被测系统的性能要求和性能指标,分析业务模型,以便后续制定合理的性能测试策略和设计合理的性能测试场景。
性能测试需求分析
主要目的:找出可能造成系统瓶颈的因素,为后面的测试场景设计提供依据。
影响系统性能的原因有很多:
环境配置性能需求:应用配置需求,系统配置需求
服务器性能指标要求:预期在上线系统中服务器资源使用情况、吞吐量、软件运行情况等。
系统设计需求:系统架构、技术实现、接口关系及技术实现、测试数据等
工作负载需求:用户使用情况需求,细化到系统的功能模块、功能点层面
客户端性能指标要求:请求响应时间分布、请求的准确率等
一般业务需求分析调研由测试技术人员牵头,实际业务人员、开发设计人员、运维人员配合完成。对于应用系统的性能测试,测试模型的建立至关重要,性能测试业务模型建立要以实际生产环境系统的业务操作模式为标准依据,只有模型符合实际的生产业务操作,性能测试的结果才能真实有效地反映将来上线的生产系统的实际性能情况。
测试场景的设计对性能测试结果有决定性的影响,场景的设计需要和业务应用的分析结合起来,最好和业务人员配合一起做性能用例设计和分析。
性能指标调研
B/S结构应用系统一般会关注Web服务器的相关性能指标:
Successful Hits: 成功的点击次数
Failed Hits: 失败的点击次数
Hits Per Second: 每秒点击次数
Successful Hits Per Second: 每秒成功的点击次数
Failed Hits Per Second: 每秒失败的点击次数
Attempted Connections: 尝试连接次数
C/S结构程序由于一般软件系统的后台通常为数据库,所以更为注重数据库的性能指标:
User Connections: 用户连接数,即数据库的连接数量
Number of Deadlocks: 数据库死锁
Buffer Cache Hit: 数据库Cache的命中情况
性能测试策划阶段
制定规范的性能测试流程的目的是为了保证测试效率和质量,使测试工作按照预期的进度和测试策略有条不紊地进行。
性能测试工作流程要根据软件测试流程的理论和实际工作相结合,可分为:测试方案制定、测试计划编写、测试环境准备、测试脚本开发及测试执行、测试报告和分析、回归测试等阶段。
在性能测试初始阶段,首先应对业务模型和系统架构进行调研,收集测试需求。然后制定性能测试计划。
性能需求调研:客户能接受的响应时间,每日交易的处理能力,系统资源利用率,系统环境搭建方式、并发用户数、日交易数量等。
确定业务模型:划分测试交易等级
确定测试方案:目的是确定此次系统测试的目的,定义一个性能测试的入口准则,出口准则,并确定测试的交易业务模型、业务指标、测试模型、测试指标,性能测试的测试策略、执行策略、监控分析策略,以及测试内容、测试环境、工具、数据、脚本的准备、测试风险策略等。
确定测试计划:目的是为了约束各个活动的起止时间,为性能测试的准备、执行、分析与报告、总结等环节给出合理的时间估算,安排性能测试的进度、人员分工等。
建立测试环境:根据实际上线系统环境的网络拓扑结构搭建模拟测试环境,准备测试数据。
准备测试工具、脚本及测试数据
测试环境预热:搭建完成测试环境后,录制调试完脚本,对录制好的脚本都执行一次,让相关系统组件热身,以便更贴近模拟现实的情况,否则容易导致测试结果失真。
各个服务器参数的调整:对系统各个环境进行系统参数调整、Web服务器参数调整、应用服务器参数调整、数据库服务器参数调整,并对调整好的参数进行备份。
执行测试:
基本测试:例如单用户执行10分记录响应时间、TPS、点击率
单操作负载测试:例如在一定环境下50个用户并发30分,并进行资源监控、问题定位和测试结果分析
混合场景测试:几个典型的操作,进行混合并发测试
稳定性测试:在混合场景选型的业务模型上进行长时间的测试,目的是检测内存泄漏、网络处理能力、负载均衡等问题
异常测试:单节点故障或者网络故障等问题发生时,检查系统的处理能力、数据的完整性等。
性能测试方案
测试方案的制定可细分为:业务模型调研、系统架构调研、测试需求收集、测试策略设定和测试方案设计。
收集性能需求要关注以下几点:
测试业务操作的选取与配比,如果是已上线的生产系统可以对其进行时间段采样,对于未上线的系统,可以根据经验、同类系统的分析,预估上线后的情况来制定。
性能测试依赖的存量测试数据条件
系统在线用户数
业务操作要求的响应时间
性能测试计划
主要描述一个性能测试生命周期内各个阶段的时间进度、资源安排。性能测试计划是成功完成性能测试的基础,用于指导整个性能测试过程的执行:明确测试目的;明确测试范围、测试对象;明确测试环境需求,包括:测试需要的软、硬件环境及测试人力资源需求;确定测试方案,测试的方法和步骤;制定测试工作的时间安排;分析测试的风险,寻找规避办法;确定测试需要输出的结果和结果表现形式。
即目标、用户、用例、生产环境、测试环境、测试场景。
性能测试工具选型
性能测试工具的原理通常是:通过录制、回放脚本,模拟多用户同时访问被测试系统,模拟产生负载压力,监控并记录各种性能指标,生成性能分析结果和报告,从而完成性能测试的基本任务。
为确保后续性能测试脚本设计工作能得以顺利进行,应该在性能测试的策划阶段,对性能测试工具进行选型。
性能测试策略
性能测试:泛指所有类型的性能测试,是一个统称,此外,还要在特定条件下验证软件系统的性能是否达到预期指标的测试。
负载测试:模拟真实用户行为,通过不断加压直到系统性能出现瓶颈或资源达到饱和。用于测量系统的容量,发现系统瓶颈并配合性能调优。
压力测试:测试系统在一定饱和状态下系统的处理能力。在负载测试的基础上,持续不断加压到一定阶段即是压力测试。测试系统在压力环境下的稳定性,关注过载压力。
可靠性测试:加载一定的业务压力,同时让此压力持续运行一段时间,测试系统是否可稳定运行,关注持续时间。
并发测试:模拟用户并发访问同一应用的测试,用于发现并发问题,诸如内存泄漏、线程锁、资源争用、数据库死锁等。
配置测试:验证各种配置对系统性能的影响,用于性能调优和能力规划。
失效恢复测试:针对有冗余备份和负载均衡的系统,检验系统局部故障时用户所受到的影响。
疲劳强度测试:系统稳定运行时,以能够支持的最大并发用户数或者日常运行用户数,持续执行业务操作一段时间,通过综合分析操作执行指标和资源监控指标,来确定系统处理最大工作强度的性能表现。
大数据量测试:数据的量,包括独立的数据量测试和综合数据量测试。
性能测试环境搭建
性能测试环境需要模拟生产环境,反映的是软件系统的架构。一般Web应用系统可分为3层架构:表现层(Web服务器)、业务逻辑层(应用服务器)、数据层(数据库服务器)。
性能测试环境一般包括硬件、网络和软件:
硬件:服务器、客户端、交换机等
网络:有线/无线/宽带、网络协议等
软件:数据库、中间件、被测软件、操作系统等
性能测试的执行过程
主要包括性能测试脚本的设计与实现、性能测试场景的建立与执行、性能监控与数据收集。
性能测试脚本的设计主要依赖工具进行,一般的做法是嫌通过工具的录制功能,将协议的通信过程录制成脚本,再进行修改和完善,例如,添加思考时间、加入事务、插入检查点灯。
性能场景设计应考虑的因素包括:虚拟用户、并发用户、迭代时间、操作对象等。
性能监控包括场景运行和资源监控。
场景运行监控:
查看和记录事务运行情况,例如成功事务个数、失败事务个数
查看和记录虚拟用户状态
查看和记录虚拟用户日志
查看和记录事务响应时间、每秒事务数
查看和记录点击率、吞吐量
资源监控:
查看和记录系统资源使用情况,一般包括CPU, 内存,I/O,网络的资源使用
查看和记录Web服务器资源使用情况
查看和记录Web应用服务器资源使用情况
查看和记录数据库资源使用情况