性能测试介绍

article/2025/10/5 2:06:41

转载来源 公众号《测试开发技术》

1.性能测试要开专栏了

提起性能测试,可能很多互联网从业人员会感觉比较混淆(不仅仅只是测试人员会弄混淆,很多开发人员、管理人员对性能测试也都是一知半解)。性能测试,它是属于测试领域一个专业细分领域,其涉及到的范围和所需要的技能也是非常广而精,从大的类型来划分,常见的它又被分为:

  1. 服务端性能测试。
  2. 客户端性能测试(通常指移动端)。
  3. 全链路性能压测。

在客户端(Android、iOS)中经常需要根据不同的测试需求,来开展一些性能测试专项,主要涉及的测试指标包括:APP的启动时间、内存、包大小、帧率,流量等。需要说明的是,本文作为性能专栏系统的开篇(称为番外篇),本文后续所提到的性能测试都是针对服务器端,它与移动App的性能测试完全是不同的领域。

为了打消读者的顾虑,提前吐露一下,作为性能测试系列专题文章,后续连载的内容并不仅仅只是围绕服务端性能测试来介绍,整个性能系列专题连载会包括:服务端性能测试、客户端性能测试、全链路性能压测等几大版块。

并且各类版块,介绍分享的内容都会覆盖有: 各端性能常见指标有哪些、指标含义及作用,各指标计算获取方法、各端性能测试开展流程、各端性能测试常用工具、性能测试实战应用等几方面。

番外语

本篇,作为整个性能系列专栏的开篇,将以服务端性能测试作为切入,从整体层面介绍一下服务端性能测试的一些要点内容(更详细的会在后续连载中逐一介绍)。

2.什么是服务端性能测试?

那么,什么是服务端的性能测试呢?

先从大家都熟悉的功能测试说起吧。例如,我们要测试一个搜索功能,那么我们测试时,就会输入搜索关键词,点击搜索按钮,然后再去查看搜索结果,看结果是否跟我们输入的搜索关键词匹配,如果匹配则说明搜索功能实现正确。

那如何对该功能进行性能测试呢?

答案是:N个人同时进行功能性操作的同时,在确保功能实现正确的前提下,考察服务端应用程序的各项性能指标,以及服务器硬件资源的使用情况。

当然,这个答案比较简单粗暴,但是它仍然包含了性能测试的基本特点:

  1. 以功能实现正确为前提
  2. 通常有一定的并发用户
  3. 重点考察服务器端在一定并发压力下的性能指标

最后,再明确下性能测试的目的。通常,对服务器端应用程序开展性能测试,是为了验证软件系统是否能够达到预期的性能指标,同时发现软件系统中存在的性能瓶颈,从而实现优化系统的目的。

3.性能测试类型

根据不同的测试目的,性能测试可以分为多种类型,常见的有如下几类:

  1. 基准测试(Standard Testing)
  2. 负载测试(Load Testing)
  3. 压力测试(Stress Testing)
  4. 疲劳强度测试
  5. 稳定性测试
  6. 容量测试

3.1 基准测试

基准测试指的是模拟单个用户执行业务场景时,考察系统的性能指标。严格意义上来讲,基准测试并不能算作性能测试范畴,它跟功能测试并没有太大区别。差异在于,基准测试的目的更多地是关注业务功能的正确性,或者说验证测试脚本的正确性,然后,将基准测试时采集得到的系统性能指标,作为基准测试结果,为后续并发压力测试的性能分析提供参考依据。

3.2 负载测试

负载测试主要指的是模拟系统在正常负载压力场景下,考察系统的性能指标。这里说的正常负载,主要是指用户对系统能承受的最大业务负载量的期望值,即预计系统最大应该支持多大用户的并发量。通过负载测试,目的是验证系统是否能满足预期的业务压力场景。

通常负载测试是最典型的性能测试类型,通过实施负载测试来获取性能拐点,也叫最佳性能点,当达到这个点的时候,系统能力、极限能力是多少?也常用来做线上流量评估。

3.3 压力测试

通俗地讲,压力测试是为了发现在多大并发压力下系统的性能会变得不可接受,或者出现性能拐点(崩溃)的情况。在加压策略上,压力测试会对被测系统逐步加压,在加压的过程中考察系统性能指标的走势情况,最终找出系统在出现性能拐点时的并发用户数,也就是系统支持的最大并发用户数。

开展压力测试主要用于探测应用或者应用的支撑基础设施某些部分的极限能力。通过一直增加负载,直到应用的部分功能不能正常工作,目的是找到被测系统的容量天花板。

3.4 疲劳强度测试

疲劳强度测试的加压策略跟负载测试也很接近,都是对系统模拟出系统能承受的最大业务负载量,差异在于,疲劳强度测试更关注系统在长时间运行情况下系统性能指标的变化情况,例如,系统在运行一段时间后,是否会出现事务处理失败、响应时间增长、业务吞吐量降低、CPU/内存资源增长等问题。

3.5 稳定性测试

稳定性测试会把用户真实会发生的场景放大3-5倍,然后在线上运行24小时,在这个阶段会发现很多稳定性问题,例如:list回收,java list回收,一旦回收出现问题,可能会出现内存溢出,这个在日常测试过程中,是很难测出来的,所以用稳定性测试查出这些问题。

3.6 容量测试

当我们业务越来越复杂的时候,比如一场大促,应该怎么评估线上的性能?如何去做合理的扩容?这个时候就需要开展相应的容量测试了。

通过对比可以发现,不同的性能测试类型,其本质的差异还是在加压策略上,而采用何种加压策略,就取决于我们实际的测试目的,即期望通过性能测试发现什么问题。明白了这一点,性能测试类型的差异也就不再容易混淆了。性能测试手段的重点在于加压的方式和策略。

4.性能指标的分类

从维度上划分,性能指标主要分为两大类,分别是业务性能指标和系统资源性能指标。
业务性能指标可以直观地反映被测系统的实际性能状况,常用的指标项有:

  1. 并发用户数
  2. 事务吞吐率(TPS/RPS)
  3. 事务平均响应时间
  4. 事务成功率

而系统资源性能指标,主要是反映整个系统环境的硬件资源使用情况,常用的指标包括:

  • 服务器:

CPU利用率、处理器队列长度、内存利用率、内存交换页面数、磁盘IO状态、网卡带宽使用情况等;

  • 数据库:

数据库连接数、数据库读写响应时长、数据库读写吞吐量等;

  • 网络:

网络吞吐量、网络带宽、网络缓冲池大小;

  • 缓存(Redis):

静态资源缓存命中率、动态数据缓存命中率、缓存吞吐量等;

  • 测试设备(压力发生器):

CPU利用率、处理器队列长度、内存利用率、内存交换页面数、磁盘IO状态、网卡带宽使用情况等。

可能对于最后一项(测试设备)有些人不大理解,监控被测系统环境的相关硬件资源使用情况不就好了么,为什么还要关注测试设备本身呢?这是因为测试设备在模拟高并发请求的过程中,设备本身也会存在较高的资源消耗,例如CPU、内存、网卡带宽吃满,磁盘IO读写频繁,处理器排队严重等;当出现这类情况后,测试设备本身就会出现瓶颈,无法产生预期的并发压力,从而我们测试得到的数据也就不具有可参考性了。

需要说明的是,性能指标之间通常都是有密切关联的,单纯地看某个指标往往很难定位出性能瓶颈,这需要我们对各项性能指标的含义了然于胸,然后才能在实际测试的过程中对系统性能状况综合进行分析,找出整个系统真正的瓶颈。举个简单的例子,压力测试时发现服务器端CPU利用率非常高,那这个能说明什么问题呢?是服务端应用程序的算法问题,还是服务器硬件资源配置跟不上呢?光看这一个指标并不能定位出产生问题的真正原因,而如果仅因为这一点,就决定直接去优化程序算法或者升级服务器配置,最后也很难真正地解决问题。
性能瓶颈定位的重点在于性能指标的监控和分析。

5.性能测试开展流程

  1. 获取性能测试需求,确定性能目标
  2. 构建性能测试环境
  3. 编写性能测试脚本
  4. 构建性能测试场景
  5. 执行性能测试和分析
  6. 测试结果分析和报告

6.性能测试工具

性能测试的主要手段是通过产生模拟真实业务的压力对被测系统进行加压,与此同时监控被测系统的各项性能指标,研究被测系统在不同压力情况下的表现,找出其潜在的性能瓶颈。

那么,如何对系统进行加压,又如何对系统的指标进行监控呢?这里,就需要引入性能测试工具了。

当然,我们也可以先看下在不借助性能测试工具的情况下,如何手工地对系统进行性能测试。

假设现在我们要对前面提到的搜索功能进行负载测试,验证在10个并发用户下搜索功能的事务平均响应时间是否在3秒以内。

很自然地,我们可以想到测试的必要条件有如下几点:

  1. 10个测试人员,产生业务压力
  2. 1个指挥人员,对10个人员的协调控制,实现并发操作
  3. 1个结果记录人员,对每一个人员的操作耗时进行监控和记录
  4. 若干资源监控人员,实时查看被测系统的各项性能指标,对指标进行汇总、分析
  5. 1个结果统计人员,对10个用户各操作消耗的时长进行汇总,计算其平均值

可以看出,要通过人工来进行性能测试,操作上极为繁琐,需要投入的资源非常多,而这还仅仅是一个非常简单的场景。设想,如果要测试10000并发,服务器有好几十台,显然,这种情况下是完全不可能通过投入人力就能解决的。这也就是性能测试工具存在的必要性和诞生的背景。

7. 性能测试工具组成
当前,市面上已经有了很多性能测试工具,但不管是哪一款,基本都会包含如下几个核心的模块。

  • 压力生成器(Virtual User Generator)
  • 结果采集器(Result Collector)
  • 负载控制器(Controller)
  • 系统资源监控器(Monitor)
  • 结果分析器(Analysis)

其中,压力发生器又是性能测试工具最核心的部分,它主要有两个功能,一是真实模拟用户操作,二是模拟有效并发。

8.性能测试工具推荐

在性能测试工具方面,市面上已经存在了许许多多的测试工具可以拿来用,这里重点给大家推荐 Locust、LoadRunner、Jmeter这三款工具,下图是针对这三款性能测试工具的一个简单对比介绍。
在这里插入图片描述

LoadRunner是一款老牌性能测试工具,其功能是最全面的,用户群体也是最多的,相应的学习资料也最为丰富。个人建议如果是新接触性能测试,可以先熟悉LoadRunner,借此了解性能测试工具各个模块的概念和功能,在此基础上再转到别的测试工具,也都比较好上手了。便它的缺点也很明显,不支持跨平台运行,只能运行在Windows机上。

Jmeter是由Java开发的可在跨平台运行的性能测试工具,除了能做性能测试,它也常用于做接口测试。目前市面上大多数的人都在用它来开展性能测试。该款工具的并发机制是基于线程来实现的。有GUI界面操作,也支持命令行调用。

Locust是由Python开发的一款性能测试库,性能测试过程皆是采用Python脚本描述,并且HTTP请求完全基于Requests库。除了HTTP(S)协议,Locust也可以测试其它任意协议的系统,只需要采用Python调用对应的库进行请求描述即可。需要强调的是Locust的并发机制摒弃了进程和线程,采用协程(gevent)的机制。

好了,作为开篇,今天的内容先介绍到这,更详细的性能测试介绍,见后续系列连载~


http://chatgpt.dhexx.cn/article/H04lhPie.shtml

相关文章

性能测试流程-性能测试2

性能测试流程 1. 性能测试需求分析 2. 性能测试计划及方案 3. 性能测试用例 4. 搭建测试环境 5. 测试数据准备 6. 测试脚本编写 7. 执行测试脚本 8. 性能测试监控 9. 性能分析和调优 10. 性能测试回归 11. 性能测试报告总结 1、性能测试需求分析 熟悉被测系统 熟…

【测试方案】性能方案设计

什么是性能测试? 压力测试:强调极端暴力 稳定性测试:在一定压力下,长时间运行的情况 基准测试:在特定条件下的性能测试 负载测试:不同负载下的表现 容量测试:最优容量 性能测试方案设计流程 需…

性能测试—性能测试方案设计思路总结

一、需求分析 1.测试目的 为什么测?目的在于测试系统相关性能能否满足业务需求。通常分以下两种情况: 1)新项目上线 2)老项目优化 如果是老项目优化,可考虑是否存有历史测试方案,如果有可以参考&#…

性能测试计划及方案

说明:性能测试实施第一份文档,也是最重要的一份文档。 主要内容: 1、项目背景 项目是用来做什么的 2、测试目标 确定此次性能测试的目标,决定测试策略(下文) 3、人员安排 明确性能测试的时间&#xff0c…

性能测试详细测试方案

性能测试详细测试方案 前言 平台XX项目系统已经成功发布,依据项目的规划,未来势必会出现业务系统中信息大量增长的态势。 随着业务系统在生产状态下日趋稳定、成熟,系统的性能问题也逐步成为了我们关注的焦点:每天大数据量的“…

性能测试设计方案

前言 最近比较多的时间是在做压力测试,也就是常说的压测,而且压力测试也属于性能测试中的其中一个,所以今天总结下性能测试的测试方案。 性能测试分类 常见的性能测试分类一般分为:负载测试、压力测试、稳定性测试 ①负载测试&…

​性能测试基础——性能测试方案(示例)

前面所说的测试分析等准备工作实际上最终目的是制定测试方案,测试方案一般包括: 项目的简要说明、项目系统结构、项目的业务结构、以及项目的性能需求、测试环境数据以及测试策略方法、测试案例、测试人员进度安排以及测试风险预估等等。 下面是一个一般…

性能测试~性能测试方案

1. 背景 1.1. 项目背景 明确该性能测试的项目背景 1.2. 性能目标 性能目标都会影响项目的整个过程,对目标的把握将决定一个性能项目的走向 测试测目标必须明确 取生产峰值流量作为基线(目标一般是峰值的xxx倍)业务的流量预期 2. 测试范围 明确需要测试的特性…

干货|一次完整的性能测试,测试人员需要做什么?

作者:Kiki Deng 一、 规范性能测试实施流程的意义 规范的性能测试实施流程能够加强测试工作流程控制,明确性能测试各阶段应完成的工作,指导测试人员正确、有序的开展性能测试工作,提高各角色在性能能测试中的工作效率。本次分享的性能测试实施流程是性能测试开展的”指导方…

让外网访问内网

让外网访问内网 假如我的电脑的ip是192.168.0.100 我在这个ip下开放了一个3000端口 同一wifi下的设备可以访问192.168.0.100:3000 但是只要访问的设备和被访问的设备不在同一wifi下就不能访问了 现在来解决 需要用到一个叫花生壳的软件 打开花生壳 点击右下角的加号 根据需要…

内网接入外网的几种方式

背景:Pc1pingAR2是ping不通的,因为两者不在同一个网段,pc1虽然知道AR2的地址,但是AR2不知道pc1的地址,所以要将pc1转为公网的ip地址 一.静态地址转换 (1)全局模式下配置 将内网主机的私有地址…

如何同时使用内网和外网

场景: 最近在对接医保专线的时候,发现在连接互联网的同时,是无法同时使用专线的。要使用的时候只能一下连wifi一下连专线,相当的不方便。 方法: 第一步,以管理员权限打开cmd,不然可能会出现用…

【网络】内网访问外网和外网访问内网的原理

原文地址 公有 IP 和私有 IP 的区别 首先,我们需要了解一下什么是公有 IP 和私有 IP ? 公有地址(Public address):由 Inter NIC(Internet Network Information Center 因特网信息中心)负责。…

三阶魔方快速公式

三阶魔方快速公式: 白色做底面。 (二)做第二层棱块。 黄面为顶层,找顶层中不带黄面的棱块,将棱块面对你的颜色转到与中点色块相同处,这两块面对自己,做公式: 远,侧面上…

【玩】三阶魔方公式

每次忘记公式,找到当时记忆的公示都得查很费劲。索性记录一下。 一、基本 1、标注: 一般来说,你可能需要整体地转动魔方来找到合适的是用公式的位置,但是为了简单起见,在使用一条具体公式时,只需要转动魔…

三阶魔方公式速记

最近在玩魔方的过程中,发现魔方真正需要死记硬背的公式只有三个,分别是棱块互换、棱块上翻、角块互换。 本文不是魔方复原教程,只是总结常用的几个公式,不适合新手。 先贴上一个非常强大的网页版魔方 Cuber 1.一层 观察法 2.二层 …

三阶魔方入门级学习

文章目录 起因:认识魔方:复原步骤:任务一:拼好底层(设底层为白)目标1:在顶层(黄)中心块周围安排四个白色棱块目标2:将目前在顶层的四个白色棱块分别对准侧面中…

php编程三阶魔方,三阶魔方还原教程

大家好,或许在你们会感觉魔方的还原很难,其实不然。今天我来为大家带来三阶魔方的简单还原公式,让你能够快速上手,并且能够理解学会。 话不多说,首先我来介绍一下魔方的六个面:白,黄,红,橙,绿,蓝(白-黄,红-橙,绿-蓝)图如下: 打开搜狗搜索APP,查看更多精彩资讯 我…

四阶魔方用三阶魔方公式时,两个特殊情况处理方式(顶面十字、最后一步)

四阶魔方的玩法比较简单的,就是把他变成三阶魔方,然后用三阶魔方公式还原: (三阶魔方还原,一共只记6个公式即可,https://blog.csdn.net/Bob__yuan/article/details/86546920) 1、先按照面与面…

三阶魔方还原步骤图_七步玩转三阶魔方还原公式及步骤图解教程

魔方Rubiks Cube 又叫魔术方块,也称鲁比克方块,是匈牙利布达佩斯建筑学院厄尔诺鲁比克教授在1974年发明的。三阶魔方系由富有弹性的硬塑料制成6面正方体,共有26块小立方体。魔方与中国人发明的“华容道”,法国人发明的“独立钻石”一块被称为智力游戏界的三大不可思议。 完…