性能测试理论知识

Mr.he...大约 13 分钟TheoreticalKnowledge

1. 学习目标

1.理解性能测试的定义和目的;
2.理解性能测试中常见的测试策略;
3.理解性能测试中常见的性能指标;
4.理解性能测试的流程。

2. 性能测试概述

2.1. 为什么要进行性能测试?

2.1.1. 业务需求

  1. 大量用户下,系统能否稳定运行(比较多的)
  2. 用于硬件服务器的选型
  3. 用于软件技术的选型

2.1.2. 招聘需求

面试:会性能测试吗?

招聘信息:要求会使用性能测试工具Jmeter、LoadRunner提示:要解决以上问题,必须要进行相关性能测试

2.2. 什么是性能?

这的性能通常意义上都是说的服务器的性能,如果是app性能,还需关注手机的内存、CPU、电量、流量、流畅度等情况。

image-20230709164300878

2.3. 性能的关注点(即效率)

  • 时间特性:服务器处理用户请求的响应时间(卡/不卡);
  • 资源特性:软件在运行时,对于服务器资源的消耗情况(CPU、内存、磁盘IO等等)。
image-20230709164438765

2.4. 什么是性能测试?

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

软件的范围包括:

  • 后台处理程序(开发写的代码);
  • 中间件(应用服务器)、数据库、MQ(消息队列)、Ridis(缓存)、程序架构等等;
  • 服务器资源的消耗(CPU、内存、磁盘、网络)。

7821708434664_.pic

2.5. 性能测试的目的

  1. 评估当前的系统能力;
    • 验收第三方提供的软件(如:第三方软件测试);
    • 获取关键的性能指标,与同类型的软件对比(例如:跑分)。
  2. 发现性能问题后,寻找性能瓶颈,优化性能(例如:12306春运时服务故障);
  3. 评估软件能否满足未来的性能需要(例如:淘宝11在2020年的销售额)。

2.6. 性能测试和功能测试

2.6.1. 焦点

  • 功能:关注系统对用户需求规则的满足程度。关注点(正向、逆向);
  • 性能:关注系统对用户业务场景的满足程度。关注点(时间、资源)。

2.6.2. 关系

  • 在一个项目中,功能测试和性能测试一般都有;
  • 功能测试通过后,才进行性能测试。

3. 性能测试分类

  • 基准测试
  • 负载测试
  • 稳定性测试
  • 其他:并发测试、压力测试、容量测试等

3.1. 基准测试

狭义上讲:单个用户进行业务场景的测试,并统计性能的各项指标(为后续多用户性能测试做参考对比)

广义上讲:在某一个时刻进行性能测试建立一个已知的性能水平,当软硬件发生变化时再测试,观察变化对于性能产生的影响

image-20230709165031611

3.2. 负载测试

通过逐步增加系统负载量,测试系统性能的变化,在满足性能指标的前提下,系统所能够承受的最大负载量的测试。

image-20230709165106791

通过负载测试,一般能找到系统的最优负载和最大负载。

最大负载一般项目组内部知晓,不会对外公布。

普通用户看到的系统的最大能力,一般都是测试得到的最优负载。

3.3. 稳定性测试

在服务器稳定运行(业务正常的负载量)的情况下,进行长时间的测试,保证服务器能够正常运行。

长时间:1天、1周

提示

稳定性测试的三个阶段

  1. 第一个阶段:恒定压力阶段

    目标是为了检验在恒定的大压力下,系统的服务是否稳定,比如是否存在吞吐量TPS指标的波动,响应延迟的抖动、毛刺等。波动情况必须在恒定的压力下进行验证,如果是波动的压力,出现吞吐量波动或者响应延迟的长尾现象会难以捕捉分析,难以区分是业务的问题还是服务的问题,为性能问题定位带来较大难度。

  2. 第二个阶段:基于一定的产品压力模型的,已上线产品

    我们不难观察产品线上的典型业务及业务比例,那么在过去的七天或者一个月的时间内,产品每天的业务模型是什么样的?根据线上监控及统计不难得出。这个阶段就是为了模拟线上的这种业务模型下,也即是存在峰谷变化的压力、典型的一些Web产品每天的压力模型是比较固定的,比如每天早上9点,下午4点,晚上10点都会存在压力峰值。这种方式的模拟会为系统的稳定性带来一定的压力,如用户量突增等情况,会不会导致错误或宕机等。

  3. 第三个阶段:是在恒定压力下,引入异常干扰,注入异常用例

    如CPU波动、网络延迟、主节点挂掉或重启等异常情况的出现,来充分拷打产品的稳定性和可靠性。在google的测试之道中也有提及这种模式,虽然没有更多细节暴漏出来,不过在这方面还是值得探索的。

稳定性测试怎么做,这篇文章彻底讲透了!open in new window

3.4. 其他分类

3.4.1. 并发测试

系统在短时间内同时处理大量请求,查看系统的并发处理能力。如:抢红包、抢购、秒杀活动等。

互相等待锁死

3.4.2. 压力测试(重要)

测试系统在强负载的情况下,测试系统在峰值情况下的操作,是否具有良好的容错能力及错误的恢复能力。

  • 稳定性压力测试:在系统高负载的情况下(接近C点),长时间运行(24小时),查看系统的处理能力,
  • 破坏性压力测试:在系统极限负载的情况下(C-D点),对系统进行压力测试,查看系统容错能力和错误恢复能力。

image-20230709165241682

3.4.3. 容量测试

关注系统在极限情况下的各种极限参数值,例如:最大TPS,最大连接数,最大并发数,最多数据条数等。

4. 性能测试的指标

指标:在性能测试的过程中,记录的一系列的数据值。用这些实际记录的数据值与需求中的性能要求做对比,达成需求要求则无问题;未达到需求要求则说明是性能bug。

常见的性能指标:

响应时间、并发数、吞吐量(TPS、QPS)、错误率、点击数、资源利用率。

4.1. 响应时间

客户端发送请求,到客户端收到服务器返回的响应,过程中所经历的全部时间,都是响应时间。

响应时间 = 应用程序处理时间(A1+A2+A3) + 网络传输时间(N1+N2+N3+N4)

image-20230709165507245

4.2. 并发用户数

说明:某一物理时刻同时向系统提交请求的用户数。

扩展:

  • 系统用户数:系统注册的总用户数据;(如淘宝注册用户数:10亿)
  • 在线用户数:某段时间内访问系统的用户数,这些用户并不一定同时向系统提交请求;(如淘宝当前登录用户数:1亿)
  • 并发用户数:某一物理时刻同时向系统提交请求的用户数。(如淘宝当前正在使用系统的用户数:500万)

4.3. 吞吐量

英文为Throughput,单位时间内,系统处理客户端请求的数量。衡量服务器性能好坏的直接指标。

从不同维度来衡量吞吐量:

  • 业务维度:业务数/秒,业务数/小时,业务数/天
  • 网络维度:字节数/秒,字节数/小时,字节数/天;
  • 技术维度:TPS(每秒事务数)、QPS(每秒请求数)。

4.3.1. QPS

服务器每秒钟处理的接口请求数量。

一个服务器中有多个接口,QPS指的是所有接口在同一个单位时间内的接口处理数量之和。

image-20230709165613588

4.3.2. TPS

服务器每秒钟处理的事务请求数量。

一个事务通常指的是界面上的一个操作。一个事务可以包含一个或者多个接口请求。

image-20230709165602474

对于登录事务而言,当TPS为10时,服务器的QPS也是10;

对于支付事务而言,当TPS为10时,服务器的QPS就是30。

4.4. 点击数

点击数不是指在页面上的一次点击,指的是页面(html代码、图片、js...)加载时,向服务器发送的请求数量,可以用每秒点击数来衡量web服务器的处理能力。

提示

  1. 点击数是衡量Web服务器处理能力的一个重要指标。
  2. 只有web项目才有此指标。

4.5. 错误率

错误率不是功能有错误或者bug,指的是在系统高负载的情况下,失败业务的概率。

错误率 = (业务失败的次数 / 业务的总次数) * 100%

::: 提示

  1. 不同系统对错误率要求不同,但一般不超过千分之五;
  2. 稳定性较好的系统,其错误率应该由超时引起,即为超时率。

:::

4.6. 资源利用率

资源利用率 = (资源的使用量 / 总的资源可用量) * 100%

通常,没有特殊需求的话。

  1. 建议CPU不高于88%(±5);

    在电脑里的所有处理请求(操作系统运行、软件程序、磁盘拷贝等) 都由CPU完成。

  2. 内存不高于80% ;

    所有程序在运行时要消耗的空间,(存储程序运行的数据)。

  3. 磁盘不高于90%;

    需预留空间存储本地数据文件。

  4. 网络不高于80%;

    影响数据在网络中的传输速度。

5. 性能测试的流程

5.1. 需求分析

说明

性能需求分析是整个性能测试工作开展的基础,性能需求分析做的好不好直接影响到性能测试的结果。

  1. 熟悉被测系统;

    • 熟悉系统的业务功能;
    • 熟悉系统的技术架构。
  2. 明确性能测试内容;

    • 从业务角度,挑选核心业务进行测试;

      确定关键业务。即:用户使用频率较高的业务功能。

    • 从技术角度,挑选逻辑复杂度高、数据量大的业务进行测试。

      通常逻辑复杂度较高的业务也是CPU密集运算较大的地方,考量服务器CPU在预定性能指标下是否达标;

      通常数据量较大的业务很占用系统内存,考量服务器内存在预定性能指标下是否达标。

  3. 确定测试策略;

    • 负载测试、稳定性测试、并发测试等
  4. 确定性能测试指标。

    • 有需求:按照需求来测试,只需要根据执行分析结果与预期指标做对比,如果有不满足的,就需要分析问题所在例如,类似如下指标:
      • 下订单业务并发20个用户;
      • 平均响应时间要小于等于3s;
      • 事务成功率为100%;
      • CPU使用率小于等于85%。
    • 没有需求:同类型软件对比,对未来流量、数据进行预估,确定性能测试需求的指标。

5.2. 性能测试计划

从模板内容来说,与功能测试基本一致,主要就是写清楚谁来做、怎么做。

主要内容:

  1. 项目背景 —— 简介
  2. 测试目的
  3. 测试范围 —— 对于需求分析中的性能测试内容
  4. 测试策略 —— 对应于需求分析中的测试策略
  5. 风险控制 —— 技术风险、人力风险
  6. 交付清单 —— 每个阶段的产出物
  7. 进度和分工 —— 谁在什么时候做什么事

说明

性能测试计划是性能测试实施第一份文档,也是最重要的一份文档。

5.3. 性能测试用例

编写测试用例要素:1.用例标题、2.用例编号、3.用例预制条件、4.用例步骤、5.用例预期结果、6.用例实际结果

注意

  1. 缺一个测试目的,对应用例描述。
  2. 实际结果:需要监控的各项性能指标
image-20230709170402321

5.4. 测试脚本编写**/**录制

性能测试用例编写完成以后,接下来就需要结合用例的需要,进行测试脚本的编写工作。

提示

录制或编写,根据不同的工具要注意代码冗余。

5.5. 建立测试环境

在进行性能则试之前,需要先完成性能测试环境的搭建工作,测试环境一般包括硬件环境、软件环境及网络环境,尽可能与用户的环境一致。

提示

一般情况下可以要求运维和开发工程师协助完成。

5.6. 执行测试脚本

首先要保证脚本调试通过之后,才能进入正式压测阶段。

执行测试脚本时,要先进行性能运行场景的设置,再运行脚本。

5.7. 性能测试监控

监控服务器的各项性能指标。例如:监控CPU、内存、网络、TPS、磁盘IO等的使用情况。

提示

性能测试监控与测试脚本的执行是同时进行的。

5.8. 性能分析和调优

性能测试分析人员经过对结果的分析以后,有可能提出系统存在性能瓶颈。

  • 测试人员只需要确定是否存在性能bug,有bug则提缺陷报告;
  • 问题分析和调优由相关人员(开发人员、数据库管理员、系统管理员、网络管理员、性能测试分析人员)来完成,测试人员配合验证调优结果(可能需要经过多轮验证,从而确定经过调整以后系统的性能是否有提升)。

5.9. 性能测试报告

性能测试总结要包含以下内容:

  1. 性能测试需求覆盖情况,测试过程回顾,及测试中出现的问题(如何去分析、调优、解决的)---基本要求;
  2. 性能测试过程中遇到各类风险是如何控制的,目前是否还有其他的性能风险存在;
  3. 给出性能测试结论(通过/不通过),经过该项目性能测试后,有那些经验和教训等内容。