一、性能测试VS功能/自动化测试
功能/自动化测试:
- 输出: 找bug 预期结果与实际结果进行比较,
- 隐藏的前提:模拟都是1个用户的操作
性能测测试:
- 不是模拟1个人,模拟多个人同时操作
- 关注:多个人操作时,响应时间,
二、性能测试的定义
性能测试的定义:通过自动化测试工具或者代码手段,来模拟正常、峰值负载访问被测系统,来观测系统各项性能指标是否合格的过程。
三、性能测试的分类
基于代码的性能测试(关注点是函数或方法执行的效率)
基于协议的性能测试(关注服务器的性能)
客户端的性能测试(页面或者客户端的响应时间)
服务端测试的分类
-
压力测试:在一定的软硬件、网络条件下,模拟用户高并发(峰值负载),持续一段时间,检测系统的各项性能指标,关注峰值下的系统的性能表现(秒杀、团购、抢票)
目的:监测被测系统在峰值下的运行情况,给最坏情况(系统崩溃)设计预案 场景模型:门型场景,大量线程同时开始,经过一段时间后,又同时结束 -
负载测试:在一定的软硬件、网络条件下,通过改变负载的方式,监测系统的各项性能指标,得到系统在正常工作情况下,系统的最大用户数、最佳用户数,定位系统的瓶颈,判断区间的标准:
- 有没有报错
- tps下降
- 响应时间变长
-
配置测试:改变软硬件配置(架构配置、参数配置),观测不同配置条件下的性能状态 基准测试:在一定的软硬件、网络条件下,模拟单用户操作系统,检测系统各项性能指标。为后面深入的性能测试做一个数据对比。
-
并发测试:测试同一模块、同一应用在高并发的情况下,接口工作是否正常。目的是主要检查应用或者接口在多用户情况下,是否存在缺陷(比如死锁等)
同一时间发起请求的用户数
- 广义并发:
- 狭义并发:
- 容量测试:在一定的软硬件、网络条件下,改变数据库的容量,模拟多用户,监测各项性能指标的过程。寻找数据容量的极限值
- 稳定性测试:主要强调长时间、正常负载情况下,观测系统各项指标的稳定性,不会出现致命的问题。7*24小时。8小时、24小时、48小时。目的是检测系统长时间运行,系统的稳定性、是否有异常表现(宕机、出现致命问题等)
四、性能测试使用
- 上新系统:用户场景(大量用户、同时使用、某个时间段内使用)适合用基准测试、负载测试、压力测试、容量测试
- 扩容:分析了历史系统自身的性能标新,适当的扩容。基准测试、负载测试、压力测试、容量测试
- 调优:针对以上线的系统越来越慢,对系统进行优化配置,提升性能表现。基准测试、配置测试
- 修复:解决线上系统的并发死锁、内存泄漏等问题。并发测试
- 秒杀、团购:基准测试、负载测试、压力测试
性能测试的介入时机:一般是在功能、接口测试都已经完成之后再来做性能测试。
五、性能测试的指标
性能指标:
- 响应时间:用户发出请求到服务器处理完成请求返回给客户端的这段时间
- 吞吐量:网络中每秒传输的事务数,衡量系统的业务处理能力。
- 1、没有网络瓶颈:tps 数值 = 吞吐量数值
- 2、如果网络有瓶颈: tps 数值 != 吞吐量数值
- 吞吐率:每秒钟能通过多少kb数据
- TPS:每秒事务数。
- QPS:每秒请求数
- 资源利用率:cpu、内存、网络、磁盘读写IO。
- 一般资源的利用率不高于70%-80%,如果某项高于这个值,则可能是性能瓶颈
- IO:
:
- 错误率:系统在负载情况下,失败请求的概率。
- 错误率=(失败请求数/总请求数)*100。
- 和功能测试的错误相区别,在性能测试中,所谓的错误一般是指由系统超时引起的错误,而不是指功能错误。不同的系统错误容错率不同。普通的业务系统,错误率不超过万分之一就可以了,有的大型系统,亿分之一。
常用专业术语
- 集合点:大量进程统一开始的地方
- 关联 :
- 检查点:
- 断言 :
- 用户数:在线用户数,并发用户数,系统用户数
- PV:页面访问量。客户端向服务器请求的数量,通常是作为网站系统的处理能力的衡量标准
- UV:独立用户访问量,根据用户数量来进行统计,访问系统一次算一个UV
六、性能测试的流程
1. 性能测试需求分析
- 弄清楚本次性能测试的需求,性能测试的目的是什么,明确后续性能的要点
- 主要需求有几种:新系统的能力验证、历史系统(明确的客户需求)、找出系统的性能瓶颈、稳定性验证(强度测试)
2. 了解系统架构
- 在环境搭建阶段,了解项目的部署
- 在性能测试分析阶段,要通过不同的系统架构去设计相应的测试模型(真实模拟用户实际操作场景)
- 在性能测试定位和调优阶段,更要深入这些技术细节才能发现具体问题的位置
3. 分析性能测试点(场景设计)
场景选择有哪些原则
- 使用频率高的业务
- 关键程度非常高的业务
- 资源占用非常严重的业务
4. 测试工具选型
开源工具
商业工具
自研工具
5. 测试计划
- 简介
- 性能测试的需求
- 测试环境
- 数据准备
- 测试工具
- 测试策略
- 人力和时间安排
6. 测试环境搭建
-
主要保证测试环境与生产环境一致
-
- 硬件环境(服务器、网络)机器数与请求数按比例一致
-
- 软件环境(系统版本、软件版本)
-
- 使用场景的一致性
7. 测试执行
- 准备测试数据
- 使用测试工具实现测试操作
- 根据测试策略,使用不同的虚拟用户和测试组合来进行测试
- 监控系统资源利用率
重复3,4步,直到找到性能问题
8. 测试结果分析,瓶颈定位及性能调优
- 调优需要开发、运维工程师参与和主导
- 反复验证性能是否有提升
- 性能调优的顺序,从易到难
- 硬件问题
- 网络问题
- 应用服务器、数据库的配置问题
- 源码、数据库脚本问题
- 系统架构问题