很久前整理的资料,关于性能测试体系建设的粗略方案,希望能帮助更多的朋友。
性能测试分类
一般性能测试可以分类为:压力测试、负载测试、稳定性测试。
在性能测试过程中,通常有两种施压方式:并发模式和RPS模式。传统方式是使用并发用户数来衡量系统的性能(站在客户端视角)。此方法一般适用于一些网页站点的压测(例如H5页面);而RPS(Requests per second)模式主要是为了方便直接衡量系统的吞吐能力TPS(Transaction Per Second,每秒事务数)而设计的(站在服务端视角),按照被压测端需要达到TPS等量设置相应的RPS,应用场景主要是一些动态的接口API,例如登录、提交订单等等。
压力测试的目的是通过高并发的手段来使服务器资源(强调服务器资源,硬件资源)处于极限状态,测试系统在极限状态下一段时间内运行是否稳定。
负载测试的目的是帮助我们找出性能问题与风险,对系统进行定容定量,分析系统性能变化趋势;为系统优化、性能调整提供数据支撑。负载测试在执行时又分为单场景与混合场景;单场景有利于分析性能问题,因为排除了其他业务的干扰;混合场景更贴近于用户实际使用习惯,是一个综合的性能评估。
稳定性测试也叫可靠性测试,它的目的是验证在当前软硬件环境下,长时间运行一定负载,确定系统在满足性能指标的前提下是否运行稳定,执行时采用混合场景。按惯例要求执行时间不低于8小时。稳定性测试原则上是时间越长越好,有些隐藏较深的诸如内存溢出的问题是需要长时间运行才能反映出来的。
常用场景
压力场景
某网站 不需要给系统添加思考时间,直接将系统压崩溃为位,分析系统最大能支撑多少用户访问。
负载场景
某系统业务 第一阶段只运行 77 个并发用户,运行 10 分钟。 第二阶段再加上 77个并发用户共计 154 个用户,运行 10 分钟。 第三阶段再加上77 个并发用户共计 231 个用户,运行 10 分钟。
稳定性场景
某平台系统 连续执行7*24小时性能测试,一般压力量级使用混合场景最大TPS的80%来运行,根据结果评估系统运行是否稳定。
基本概念
性能指标
业务指标
并发用户数、TPS(系统每秒处理事务数)、成功率、响应时间、QPS
TPS(Transaction Per Second,即系统每秒处理事务数),这个指标是衡量系统的处理能力的一个非常重要的指标。TPS可以参照同行业系统和结合具体业务,中小企业TPS值为501000笔/秒,银行TPS值为100050000笔/秒,淘宝TPS值为30000~300000笔/秒。
QPS(Queries Per Second,意思是每秒查询率),指一台服务器每秒能够响应的查询次数,用于衡量特定的查询服务器在规定时间内所处理流量多少,主要针对专门用于查询的服务器的性能指标,比如DNS,它不包含复杂的业务逻辑处理,比如数据库中的每秒执行查询SQL的次数。QPS 只是一个简单查询的统计,显然,不能描述增删改等操作,不建议用 QPS 来描述系统整体的性能。
资源指标
CPU资源利用率、内存利用率、I/O、内核参数(信号量、打开文件数)
应用指标
空闲线程数、数据库连接数、GC(Garbage Collection)/FULL GC次数、函数耗时
前端指标
页面加载时间、网络时间(DNS、连接时间、传输时间)
监控指标
操作系统
CPU(User、Sys、Wait、Idle)利用率、内存利用率(包括Swap)、磁盘I/O、网络I/O、内核参数
中间件
线程池、JDBC连接池、JVM(GC/FULL GC/堆大小)
数据库
低效SQL、锁、缓存、会话、进程数
应用
方法耗时、同步与异步、缓冲、缓存
完整测试流程
测试准备
1.1 定义测试目标:明确测试的目的
1.2 确定测试范围:明确测试目标和性能需求
1.3 选择测试工具:根据测试目标和范围选择合适的测试工具
1.4 环境准备:确保测试环境符合测试要求,并备份环境数据
测试设计
2.1 编写测试用例:根据测试目标和范围,编写合适的测试用例
2.2 准备测试数据:构造测试数据(如果依赖第三方,需要做个测试桩,mock服务或数据)
2.3 调试脚本:根据用例编写调试脚本
测试执行
3.1 执行测试:执行测试脚本
3.2 数据采集:采集测试数据
测试分析
4.1 数据分析:根据采集到的数据,进行瓶颈分析
4.2 方案调优:系统调优及修复
4.3 复测:系统改进后复测
4.4 出具报告:出具性能测试报告
流程图
工具对比与选择
LoadRunner
LoadRunner 是一种预测系统行为和性能的负载测试工具,通过模拟实际用户的操作行为进行实时性能监测,来帮助测试人员更快的查找和发现问题。LoadRunner 适用于各种体系架构,能支持广泛的协议和技术,为测试提供特殊的解决方案。通过使用 LoadRunner ,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。
JMeter
Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域。它可以用于测试静态和动态资源例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、 数据库, FTP 服务器ÿ