性能: 网上常说性能测试是什么

性能测试是一种特殊的软件测试,它的目的是确保软件在一定的负载流量下运行良好。性能测试是性能分析和性能优化的基础,它的目标是发现和性能相关的各种问题和性能瓶颈,从而进一步去消除错误和性能瓶颈

性能测试的分类方式

性能测试如何分类呢?我们需要从几个方面来看,包括测试目的、测试环境、负载流量、测试对象、负载数据、黑盒白盒等。

测试目的

测试目的是最重要的方面。大体上有几种目的:

  • 测试服务速度:
    • 确定程序是否能够快速的响应用户的请求,这个服务速度一般包括延迟和吞吐量这两个指标。
    • 速度通常是应用程序最重要的属性之一,因为运行缓慢的应用程序容易丢失用户。
  • 测试可扩展性: 确定应用程序是否可以在用户负载和客户流量增大的情况下还能正常的运行
  • 测试稳定性:确定在各种极端和恶劣环境下,应用程序是否能稳定运行
  • 测试性能瓶颈:性能瓶颈是应用程序和系统中的最影响整体性能的因素。瓶颈是指某个资源不足而导致某些负载下的性能降低。一些常见的性能瓶颈是CPU、内存、存储、网络等

测试环境

性能测试的环境也有几种,主要是开发环境还是生产环境。

  • 开发环境里面更多的是简单的测试来发现一些明显问题
  • 生产环境测试一般是开发环境测试通过后才进行的。

负载流量

根据测试的负载大小分为:小流量、正常流量、超大流量(这里的流量高低是相对于生产环境中的流量而言的。当然,它们的实际界限其实很模糊。)

除了大小,负载变化的速度也需要考虑

测试对象

测试的对象可以是只针对一个代码功能,或者是整个代码模块,或者是整个系统。

负载数据

测试的负载数据可以是真正的生产环境中的请求和数据,也可以是人工模拟出来的请求及数据。

黑盒白盒

如果把被测试的对象当作一个整体,不关心它的内部工作机理,也就是把它当作一个黑盒子,那么这种测试就是黑盒测试。

反之,如果你也关心它的内部构件和内部设计,就是把它当作白盒子来测试。

性能测试的种类

在这里插入图片描述

冒烟测试

  • 冒烟测试是开发人员在开发环境中执行的简单测试,以确认新的程序代码不出故障。
  • 冒烟测试目的是确认系统和程序基本功能正常
  • 冒烟测试的执行者往往就是开发人员,但有时也让运维人员参与。

耐力测试和浸泡测试

  • 耐力测试(也叫做耐久测试、浸泡测试),是一种非功能性测试。耐力测试是长时间测试具有预期负载量的系统,以验证系统的行为是否正常。
  • 举一个例子,假设系统设计工作时间是 3 小时;我们可以对这一系统进行超过 3 小时的测试,比如持续 6 小时的耐力测试,以检查系统的耐久性。
  • 执行耐力测试最常见的用例是暴露某些不易重视的问题,比如内存问题,系统故障,或者其他随机问题
  • 这里的偏重点是测试时间,因为有些程序和系统的问题只有在长期运行后才能暴露出来。一个明显的例子就是内存泄露。一个程序或许短时间内运行正常,但是如果有内存泄漏,只要运行时间足够,就一定会暴露出这个问题。

基准测试/性能回归测试

基准测试或者性能回归测试赛是着重“前后”对比的测试。

  • 这种测试往往是开发过程中的一部分,一般不需要具体的性能请求。
  • 代码的演化过程中经常需要确保新的代码不会对整个模块或者系统的性能产生不好的影响。
  • 最简单的方法是对代码修改前后进行基准测试,并比较前后的性能结果。
  • 执行基准测试的重点是保证前后测试环境的一致,比如负载流量的特征和大小。

负载测试

负载测试用于验证被测试系统或者程序是否可以处理初期的负载流量,并验证正常和峰值负载条件下的系统和程序行为。

这里的负载可以是真正的客户请求,也可以是仿真的人工产生的负载。

很多其他测试都可以看作是负载测试的一种,比如容量测试,其实就是一种负载测试。

断点测试

  • 断点测试类似于压力测试或者容量测试。这种测试的过程是随着时间的推移而增大流量负载,同时监听系统的预定故障条件。
  • 断点测试也可以用来缺点系统将达到其所需规范或者服务水平协议的最大容量,并且自动采取措施来纠正或者缓解
  • 比如一种性能断点可以是根据用户的访问延迟。如果延迟性能测量的结果是已经超过预定的阈值,就自动进行系统容量调整,比如增加云计算的服务器。反之,系统容量也可以根据断点的规则来减少,以节省成本。如下图所示。
    在这里插入图片描述

尖峰测试

  • 尖峰测试用于确认系统在负载突然变化时的系统行为。这种测试是通过突然增加或减少由用户产生的负载来观察系统的行为。
  • 测试的目标是确认性能在这样的场景下是否会受损,系统是否会失败,或者是否能够处理负载的显著变化。
  • 尖峰测试的核心是负载变化的突然性,所以也算是一种压力测试。

可扩展性测试

可扩展性(或者叫可伸缩性)测试用于确认一个程序或者系统的非功能性特性能不能在变化的环境中合理扩展。这里的环境变化包括系统环境的变化、负载量的大小、请求的多样性、数据量的大小等。

在系统环境变化时,同步的测量或者观察各种性能指标,并进行数据的分析,从而确认在各种环境下被测试系统的可扩展性,如下图:

在这里插入图片描述
这个测试的主要目标是了解系统在什么样的环境中,以及什么样的变化会导致系统不能控制。发现这些环境后,可以进一步有针对性的分析和加强。

容量测试

容量测试(或者叫体积测试)是用于确定一个容量能够支持的最大复制。比如一个程序运行在某种服务器上,我们有时需要知道每台服务器能够支持的最大负载(比如客户数),从而决定需要部署多少台服务器才能满足预定的总负载要求。

容量测试一般是会不断增大负载,并且不断测试各种性能指标。在性能目标变得不可接受之前,系统和程序可以成功处理的负载大小,就是单位容量可以承担的负载。为了尽量让得到的结果匹配实际生成环境,采用的负载流量最好是真正的生产环境的请求和数据。

正常生产环境中的流量和数据或者不够大到让一台服务器超载,因此我们需要解决这个问题。很多公司的解决方案是把其他服务器上的请求重定向到某一台被测试服务器,从而让这台服务器适度超载。

容量测试是确保系统稳定的重要一环。只有进行彻底的容量测试,并有相对应问题的解决方案,才可以使我们能够避免将来出现潜在的超载问题,比如增加的用户数或者增加的数据量。

如下图所示,容量测试至少包括三个部分:可调节的流量负载、性能的测量、可以接受的性能指标。这三个部分一起就可以决定单位容量(比如一台服务器)的最大负载容量。这个数据可以帮助我们做各种决策,包括预估系统能负担的总负载,或者根据预期负载来决定部署多少台服务器。

在这里插入图片描述

瓶颈测试

瓶颈测试其实可以看作一种特殊的压力测试。它的目的是找到被测试系统和程序的最制约的资源类型(比如CPU或者存储)。瓶颈测试并不局限于只找到最制约的一个瓶颈,它也可以同时找多个性能瓶颈。

找多个性能瓶颈的的意义主要有两点:

  • 如果最制约的瓶颈资源解决了,那么其他制约资源类型就自动会成为下一个瓶颈,所以需要未雨绸缪。
  • 系统设计时可以考虑在几个资源之间做些平衡,比如用内存空间来换取 CPU 资源的使用

压力测试

压力测试也是一种负载测试,不过它偏重的是在负载增加到超过系统涉及预期后观察和验证系统的行为。当我们通过增加负载,对系统施压超出设计期望的复制时,就能发现哪个模块或者组件首先因为超载而失败。这样就可以通过提升失败组件的性能来设计出更健壮、性能更优的系统。

相对于容量测试,压力测试的目的是为了暴露系统的问题,因此采用的负载不一定是真正的生产数据和客户请求。

总结

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值