# 性能测试基础（一）性能测试分类




<br>

关于性能测试有几个名词：性能测试、负载测试、压力测试、并发测试，很多人都是混合使用，或者有时压力测试，有时叫并发测试。这些名词除了非测试人员分不清楚，甚至许多专业测试人员也对这些名词也很模糊。关于这个分类我翻阅了一些资料，解释都比较模糊，并没有给出本质上的区别。只是从不同角度和关注点来解释。我们先来看看这些解释。

<br>
#### 性能测试（狭义）
----
性能测试方法是通过模拟生产运行的业务压力量和使用场景组合，测试系统的性能是否满足生产性能要求。通俗地说，这种方法就是要在特定的运行条件下验证系统的处理能力。

__特点：__

* 这种测试方法的主要目的是验证系统是否有系统宣称具有的能力。

* 这种测试方法要事先了解被测试系统经典场景，并具有确定的性能目标。

* 这种测试方法要求在已经确定的环境下运行。

也就是说，这种方法是对系统性能已经有了解的前提，并对需求有明确的目标，并在已经确定的环境下进行的。

<br>
#### 负载测试
----

通过在被测系统上不断加压，直到性能指标达到极限，例如“响应时间”超过预定指标或都某种资源已经达到饱和状态。

__特点：__

* 这种测试方法的主要目的是找到系统处理能力的极限。

* 这种测试方法需要在给定的测试环境下进行，通常也需要考虑被测试系统的业务压力量和典型场景、使得测试结果具有业务上的意义。

* 这种测试方法一般用来了解系统的性能容量，或是配合性能调优来使用。

也就是说，这种方法是对一个系统持续不段的加压，看你在什么时候已经超出“预期要求”或系统崩溃。

<br>
#### 压力测试（强度测试）
---

压力测试方法测试系统在一定饱和状态下，例如CPU、内存在饱和使用情况下，系统能够处理的会话能力，以及系统是否会出现错误。

__特点：__


* 这种测试方法的主要目的是检查系统处于压力性能下时，应用的表现。

* 这种测试方法一般通过模拟负载等方法，使得系统的资源使用达到较高的水平。

* 这种测试方法一般用于测试系统的稳定性。

也就是说，这种测试是让系统处在很大强度的压力之下，看系统是否稳定，哪里会出问题。

<br> 
### 并发测试
---

并发测试通过模拟用户并发访问，测试多用户并发访问同一个应用、同一个模块或者数据记录时是否存在死锁或其者他性能问题。

__特点：__

* 这种测试方法的主要目的是发现系统中可能隐藏并发访问时的问题。

* 这种测试方法主要关注系统可能存在的并发问题，例如系统中的内存泄漏、线程锁和资源争用方面的问题。

* 这种测试方法可以在开发的各个阶段使用需要相关的测试工具的配合和支持。

也就是说，这种测试关注点是多个用户同时（并发）对一个模块或操作进行加压。

<br>
####	配置测试
---
配置测试方法通过对被测系统的软\硬件环境的调整，了解各种不同对系统的性能影响的程度，从而找到系统各项资源的最优分配原则。
__特点：__

* 这种性能测试方法的主要目的是了解各种不同因素对系统性能影响的程度，从而判断出最值得进行的调优操作。

* 这种性能测试方法一般在对系统性能状况有初步了解后进行。

* 这种性能测试方法一般用于性能调优和规划能力。

也就是说，这种测试关注点是“微调”，通过对软硬件的不段调整，找出这他们的最佳状态，使系统达到一个最强的状态。

<br>
####	可靠性测试
---
在给系统加载一定业务压力的情况下，使系统运行一段时间，以此检测系统是否稳定。

__特点：__

* 这种性能测试方法的主要目的是验证是否支持长期稳定的运行。

* 这种性能测试方法需要在压力下持续一段时间的运行。

* 测试过程中需要关注系统的运行状况。

也就是说，这种测试的关注点是“稳定”，不需要给系统太大的压力，只要系统能够长期处于一个稳定的状态。

除了上面的分类，还有失效性测试，就是系统局部发生问题时，其它模块是否可以正常的运行。这个在极少数情况下进行，这里就不介绍了。

<br>
#### 性能测试分类之我见
---

上面的类分完了，似乎得到不少专家的认同。但我们在做性能测试过程中真的能把它们区分的很清楚么?你能严格区分出你这次的测试到底并发测试还是压力测试。

我中学时练过几年体育，对于一个体育运动员来说，那么多的体育项目，其实，考核他的就两方面：爆发力和耐力。其实，我们在进行性能测试时主要关注的也是这两方面。

__爆发力：__ 拿一个举重选手来说，他的重点在重量上，因为你只要能举起三秒就算你成功了。关键是看你能举起一个什么样的重量。

__耐力：__ 拿一个马拉松运动员来说，你百米速度跑得再快没用。关键是这40公里路程中，最先跑到终点的人才是赢家。

__整体协调性：__ 作为一个教练，在训练运动员时，除了看这个运动员的实际成绩之外，分析运动员的整体协调性，并发现运动员的短板是最关键的。比如一个运行员身体各位部位练得非常强壮，但右臂先天性萎缩。虽然他的最终的跑步成绩不错。但他在跑的过程中，身体有各个部位明显都在分担右臂的不足。右臂影响了整个体能的发挥。

回到性能测试上上，爆发力就是系统能承受的最大压力，没准系统承受的压力很大，但过半个小时之间就挂掉了。耐力就是这个系统长时间处于压力下的稳定性，这系统超级稳定，跑个几十年都不用重启服务器。那么整体协调性就是看系统有没系统瓶颈（短板），并对其进行系统调优。




原始封面

![课程图片](https://images.unsplash.com/photo-1592853625511-ad0edcc69c07?w=300)


