1. 概述

本文参考了B站-黑马程序员-性能测试教程,是在其基础上的总结和提炼

1.1 概述性能测试
  • 满足真实场景的业务需求,支持大量用户,满足商用需求
1.2 性能的含义

软件质量属性中的"效率特性"

  • 时间特性:系统处理用户请求的响应时间
  • 资源特性:系统运行过程中,系统资源的消耗情况(CPU,内存,磁盘)
1.3 性能测试的含义

使用自动化工具,模拟不同的场景,对软件的各项性能指标进行测试和评估的过程

1.4 性能测试的测试对象(服务器+数据库)
  1. 后台处理程序的性能(代码性能)
  2. 应用服务器、数据库、架构设计等是否存在瓶颈
  3. 服务器资源消耗(CPU,内存,磁盘,网络)
1.5 性能测试的目的
  1. 评估当前系统的能力
    • 验收第三方提供的软件
    • 获取关键的性能指标,与其他类似的产品进行比较(跑分)
  2. 寻找性能瓶颈,优化性能
    • 12306订票
  3. 评估软件是否能够满足未来的需要
    • 淘宝双11销售趋势
1.6 常见性能需求
  1. WEB首页打开速度5s以下,登录速度15s以下
  2. 邮件服务支持50万个在线用户
  3. 计费话单成功率99.99%以上
  4. 在100个并发用户的高峰期,邮箱的基本功能,处理能力达到10TPS
  5. 系统能在高于实际系统运行压力1倍的情况下,稳定运行12小时
  6. 这个系统能够支撑200万的vu(每天登录系统的人次),vu—visual user虚拟用户
1.7 功能测试和性能测试的对比
功能测试

验证软件系统操作功能是否符合产品功能需求规格,主要焦点在于功能(正向、逆向)

​ 正向:条件满足需求,比如输入正确的用户名密码,登录成功

​ 逆向:输入条件不满足需求,比如输入错误的用户名密码,登录失败给出提示

​ bug:结果不满足需求

性能测试

只针对正向的功能进行测试

验证软件系统是否满足业务需求场景,主要焦点是业务场景的满足(时间,资源)

​ - 100w人使用正确的用户名密码登录,1s内能登录成功(时间)

​ - 同时服务器的CPU使用率低于70%,内存使用率低于60%(资源)

关系

性能测试不是必须的;但对于一个相对大型的项目来说,一般功能测试通过后,进行性能测试

2. 性能测试的类型

2.1 基准测试
原因
  • 单用户性能不达标,那就没有必要进行多用户的性能测试了

  • 影响性能的因素有很多(服务器配置、资源、代码效率),为了判断到底是哪些因素导致性能变好/变坏,通过建立一个基准,来判断,基准作为一种参考

定义

狭义上讲,就是单用户测试(进行多次重复测试),测试环境确定后,对业务模型中重要业务做单独测试,获取单用户运行时的各项性能指标

广义上讲,通过基准测试建立一个已知的性能基准线,当系统的软硬件环境发生变化后再进行一次基准测试以确定变化对性能的影响
基准测试的基准线设立

用途
  1. 基准测试不会单独存在,为综合场景测试提供参考依据
  2. 为多用户并发测试和综合场景测试提供参考依据
  3. 为系统/环境配置,系统优化前后的性能提升/下降提供参考指标
2.2 负载测试

平时运行没问题,双十一运行是否没问题

定义

通过逐步增加系统负载,确定在满足系统性能指标的情况下(如响应时间),找出系统所能承受的最大负载量的测试

作用
  1. 通过负载测试,可以确定系统的最大负载量和极限负载量(系统崩溃的点)
  2. 系统最大负载量达到用户要求时,才能正式上线使用
  3. 负载测试时间一般为1-2小时
案例

负载量-电梯案例
JMeter里面,逐渐增加线程数,表示用户数逐渐增加

2.3 稳定性测试

系统能否保证长时间运行不出问题

定义

在服务器稳定运行(用户正常的业务负载下)的情况下,进行长时间测试(1天-1周),并最终保证服务器满足线上业务需求

用户正常负载下的长时间测试,保证系统长时间稳定运行

作用

系统在用户要求的业务负载下运行达到规定的时间时,系统才能正式上线使用

案例

电梯案例中,实际测试的最大负载是13人

场景1:如果甲方要求用户正常的负载人数是15人,稳定运行的负载量是?(首先让负载测试时的最大负载量达到15,才能进行稳定性测试)

场景2:如果甲方要求正常负载人数是10人,稳定运行的负载量是10(按照用户需求来,当然设置为13也没问题)

2.4 压力测试

软件实际使用时,用户量超过预期(系统最大负载量),该如何反应;发生意外,如何恢复

定义

在强负载下,查看系统在峰值情况下是否存在功能隐患,系统是否具有良好的容错能力和可恢复能力

测试场景
  1. 极限负载情况下,导致系统崩溃的破坏性压力测试
  2. 高负载下的长时间稳定性压力测试
2.5 并发测试

电商系统能够保证秒杀活动(特点:时间短,负载量大)时不出问题

定义

在极短时间内,发送大量请求,来验证服务器对并发的处理能力(绝对并发)

应用场景

抢红包、秒杀、抢购

3. 性能测试的相关指标

对性能测试结果进行量化衡量

3.1 响应时间
定义

从客户端发送一个请求开始,到客户端接收到从服务器端返回的结果,整个过程耗费的时间

  • 通过HTTP接口请求消息来测试
  • 包括服务器处理时间+网络传输时间
  • 不包括发消息时前端页面的处理时间和收到消息后前端页面的渲染显示时间
3.2 并发(用户)数
定义

某一时刻同时向服务器发送请求的用户数

案例
  1. 淘宝商城,注册用户数5亿
    • 系统用户数(数据库用户表的数据条数,对性能无影响)
  2. 当前登录的用户数为2000万
    • 在线用户数(某段时间访问过系统的用户,不一定在向系统提交请求)
  3. 目前正在刷淘宝的用户数有500万
    • 并发用户数(某段时间内同时向系统提交请求,请求会产生负载)
3.3 吞吐量
定义

throughput,单位时间内处理的客户端请求数量,直接体现软件系统的性能承载能力

QPS(每秒查询数,query per second)

控制服务器每秒处理的指定请求数量

搜索QPS,订单QPS

TPS(每秒事务数,transactions per second)

控制服务器每秒处理的事务请求数量

事务:即业务,页面上的一次操作,可能对应一个/多个请求

当一个事务对应一个请求时,TPS=QPS

当一个事务对应n个请求时,QPS=n*TPS

3.4 点击数
定义

客户端向服务端发送请求时,所有页面资源元素(图片,链接,框架css,js等)的请求总数量

点击数不是页面上的一次点击,而是点击后,发送的请求数

3.5 错误率
定义

在系统负载情况下,失败业务的概率,错误率=失败业务数/业务总数

错误率是性能指标而不是功能上的随机bug(系统要求错误率无限接近0)

3.6 资源使用率
定义

系统各种资源的使用情况,资源使用量/总的资源可用量

常见资源指标
  1. CPU使用率,不高于75%
  2. 内存不高于80%
  3. 磁盘IO不高于90%
  4. 网络不高于80%

4. 性能测试的流程

4.1 需求分析
明确被测系统
  1. 熟悉被测系统的业务功能
  2. 熟悉被测系统的技术架构
明确测试内容
  1. 业务角度:用户使用频率较高的关键业务功能
  2. 技术角度:逻辑复杂度高的业务;数据量大的业务
明确测试策略
  1. 负载测试
  2. 稳定性测试
  3. 并发测试
明确测试指标
  1. 有明确需求指标:执行结果和预期指标进行对比
  2. 无明确需求指标(分析):查找资料;类似系统的对比;对未来流量的预估
4.2 计划和方案
测什么
  1. 项目背景
  2. 测试目的
  3. 测试范围
谁来测
  1. 进度和分工
  2. 交付清单
怎么测
  1. 测试策略
4.3 用例设计
名称
编号
描述
前置条件
步骤和期望结果
实际结果(事务性指标、应用服务器+数据库服务器的资源使用情况)

性能测试用例设计规范

4.4 测试执行
建立测试环境
  1. 搭建性能测试环境,包括硬件环境、软件环境、网络环境
  2. 一般情况下可以要求运维和开发工程师协助完成
编写测试脚本
  1. 按照性能测试用例的需要,使用性能测试工具进行编写测试脚本
  2. 脚本可以自己编写,也可以使用工具录制
性能测试监控
  1. 脚本执行前,配置各项性能的监控指标
  2. 如:响应时间、TPS、错误率、资源使用率(CPU,内存,磁盘)
执行测试脚本
  1. 设置性能运行场景,执行性能测试,并同步收集各项性能指标
  2. 执行脚本之前,保证脚本调试通过
4.5 分析和调优
  1. 性能测试分析人员经过对结果的分析以后,如果不符合性能需求,则会提出性能bug,然后由开
    发人员进行后续的调优
  2. 开发人员主导,数据库管理员、系统管理员、网络管理员、性能测试分析人员配合进行
  3. 性能测试人员继续第2,3,…轮测试,与之前结果进行比较,从而确定调整后系统的性能是否有所提升
4.6 测试报告总结

测试报告是对性能测试工作的总结,为软件的后续验收和交付打下基础

  1. 测试工作的经过回顾
  2. 缺陷分析和调优
  3. 风险评估
  4. 性能测试结果
  5. 测试工作总结和改进
4.7 总结
性能测试的核心
  1. 需求分析
  2. 性能测试执行
  3. 性能分析调优

5. 性能测试工具-Loadrunner

HP Loadrunner是一种工业级标准性能测试负载工具,可以模拟上万用户实施测试,并在测试时可实时检测应用服务器及服务器硬件各种数据,来确认和查找存在的瓶颈

5.1 支持多协议

Web(HTTP/HTML)

Windows Sockets

FTP

ODBC

MS SQL Server

5.2 语言

采用C语言编写

5.3 优点
  1. 多用户(支持的用户以万为单位)
  2. 详细的分析报表(以秒为单位)
  3. 支持IP欺骗功能
5.4 缺点
  1. 收费
  2. 体积庞大(安装包单位GB)
  3. 无法定制功能

6. 性能测试工具-JMeter

JMeter是Apache组织开发的基于Java的开源软件,用于对系统做功能测试和性能测试

最初用于Web应用测试,后来扩展到其他测试领域,例如静态文件、Java程序、shell脚本、数据库、FTP、Mail

项目日常性能测试JMeter足够用,出商业报告优先Loadrunner

6.1 优点
  1. 开源免费
  2. 安装包小50MB左右
  3. 丰富的学习资料和扩展组件
6.2 缺点
  1. 不支持IP欺骗
  2. 分析和报表能力相对于LR欠缺精度(以分钟为单位)
6.3 相同点
  1. 都能模拟大量用户
  2. 都能支持多协议
  3. 都有监控和分析报表功能
6.4 不同点

Loadrunner和JMeter对比

更多推荐