性能测试怎么做?实际性能测试案例大D佬经验分享.....


前言

首先了解一个系统的架构,白各服务器之间是如何交互工作、系统的数据流向、系统的压力点,从而确定性能测试需求和指标,即那些功能需要考虑压力,能承担的压力是多大。

比如一个购物网站,最典型的登陆功能、提交订单功能需要支持多少个用户并发,每个并发用户在几秒之完成操作,系统长时间在压力状态下的稳定性。

性能标准
关于性能好坏的行业标准,没有这样的指导标准存在。不过,业内倒有一个约定俗成的标准,即响应时间的临界点为2秒,尤其对于 B/S 应用。

糟糕性能原因分析
性能问题通常会比较晚才发现,而且越晚发现,解决成本就越高。

一、性能基准测试

性能基准测试,是每次对外发布产品版本前必须要完成的测试类型。

性能基准测试,会基于固定的硬件环境和部署架构(比如专用的服务器、固定的专用网络环境、固定大小的集群规模、相同的系统配置、相同的数据库背景数据等),通过执行固定的性能测试场景得到系统的性能测试报告,然后与上一版本发布时的指标进行对比,如果发现指标有“恶化”的趋势,就需要进一步排查。

典型的“恶化”趋势,主要表现在以下几个方面:

同一事务的响应时间变慢了。比如,上一版本中,用户登录的响应时间是 2 s,但是在最新的被测版本中这个响应时间变成了 4 s;

系统资源的占用率变高了。比如,上一版本中,平均 CPU 占用率是 15%,但是在最新的被测版本中平均 CPU 占用率变成了 30%;

网络带宽的使用量变高了。比如,上一版本中,发送总字节数是 20 MB,接收总字节数是 200 MB,但是在最新的被测版本中发送总字节数变成了 25 MB,接收总字节数变成了 250 MB。

这里需要注意的是,这些“恶化”趋势的前提是:完全相同的环境以及测试负载。不同“恶化”指标的排查,有不同的方法。我以最常见的事务响应时间变慢为例,和你说明一下排查方法。

假设,通过性能基准测试的比较结果得知,用户登录的响应时间从 2 s 变成了 4 s。那么,我们首先要做的是验证在单用户的情况下,是否会出现响应时间变长的问题。具体做法是,将用户登录的虚拟用户脚本单独拿出来,建立一个单用户运行的性能测试场景并执行,观察用户登录的响应时间是否变慢。

如果变慢了
就说明这是单用户登录场景就可重现的性能问题,后续的处理也相对简单了。解决方法是:分析单用户登录的后端日志文件,看看完成登录操作的时间具体都花在了哪些步骤上,相比之前哪些步骤花费的时间变长了,或者是多出了哪些额外的步骤。

如果没有变慢
则说明我们必须尝试在有压力的情况下重现这个性能问题。为此,我们要基于用户登录的虚拟用户脚本构建并发测试的场景,但是我们并不清楚在这个场景设计中到底应该采用多少并发用户、加入多长的思考时间。这时,通常的做法是,直接采用性能基准测试中的并发用户数和思考时间,去尝试重现问题。如果无法重现,我们可以适当地逐步加大测试负载,并观察响应时间的变化趋势。

这里需要注意的是,千万不要使用过大的测试负载。因为测试负载过大的话,系统资源也会成为性能瓶颈,一定会使响应时间变长。但这时,响应时间变长主要是由资源瓶颈造成的,而不是你开始要找的那个原因。

如果此时可以重现问题,那就可以进一步去分析并发场景下,用户登录操作的时间切片,找到具体的原因。如果此时还是不能重现问题的话,情况就比较复杂了,也就是登录操作的性能可能和其他的业务操作存在依赖,或者某种资源竞争关系,这就要具体问题具体分析了。

一般来说,当定位到性能“恶化”的原因并修复后,我们还会再执行一轮性能基准测试,以确保系统对外发布前的性能基准测试指标没有“变坏”。可以说,通过对每个预发布版本的性能基准测试,我们可以保证新发布系统的整体性能不会下降,这也就是性能基准测试最终要达到的目的。

很多大型的传统软件公司都有专门的性能测试团队,这个团队会建立标准的性能基准测试场景,并把性能基准测试的结果作为产品是否可以发布的依据之一。

从性能基准测试的设计角度来看,你需要特别注意以下三点:

一、性能基准测试中虚拟用户脚本的选择以及配比,需要尽可能地匹配实际的负载情况;

二、总体的负载设计不宜过高,通常被测系统的各类占用率指标需要控制在 30% 以内,尽量避免由于资源瓶颈引入的操作延时;

三、每次性能基准测试前,一般需要对系统资源以及网络资源做一轮快速的基准测试,以保证每次被测环境的一致性,同时也要保证数据库的数据量在同一个级别上。总之,你需要采用一切可能的手段,来确保多次性能基准测试之间的环境一致性。

二、稳定性测试

稳定性测试,又称可靠性测试,主要是通过长时间(7*24 小时)模拟被测系统的测试负载,来观察系统在长期运行过程中是否有潜在的问题。通过对系统指标的监控,稳定性测试可以发现诸如内存泄漏、资源非法占用等问题。

很多企业级的服务器端产品,在发布前往往都要进行稳定性测试。稳定性测试,通常直接采用性能基准测试中的虚拟用户脚本,但是性能测试场景的设计和性能基准测试场景会有很大不同:

一般是采用“波浪式”的测试负载,比如先逐渐加大测试负载,在高负载情况下持续 10 多个小时,然后再逐渐降低负载,这样就构成了一个“波浪”,整个稳定性测试将由很多个这样的波浪连续组成。

稳定性测试成功完成的标志,主要有以下三项:
系统资源的所有监控指标不存在“不可逆转”的上升趋势;
事务的响应时间不存在逐渐变慢的趋势;
事务的错误率不超过 1%。

实际工程项目中,由于稳定性测试执行的时间成本很高,往往需要花费 3~7 天的时间,所以我们一般是在其他所有测试都已经完成,并且所有问题都已经修复之后才开始稳定性测试。

另外,有些企业为了缩短稳定性测试的执行时间,往往还会采用“时间轴压缩”的方法,具体的做法就是:在加大测试负载的前提下,适当缩短每个“波浪”的时间,从而减少整体的测试执行时间。

最后,需要强调的一点是,虽然很多时候,尤其是产品版本已经逐渐走向成熟期时,稳定性测试并不会发现问题,但是千万不要小看稳定性测试带来的价值。因为稳定性测试一旦发现问题,那么这些问题都是很严重而且非常隐蔽的大问题。

所以,很多大型的企业级软件企业都会执行严格的稳定性测试,并把稳定性测试的结果作为产品是否可以发布的硬性要求。比如,我曾经工作过的 HP 软件研发中心,它每次产品发布前都会由专门的性能测试团队完成严格的稳定性测试,并以此来决定是否要发布这个产品。

三、并发测试

并发测试,是在高并发情况下验证单一业务功能的正确性以及性能的测试手段。高并发测试一般使用思考时间为零的虚拟用户脚本来发起具有“集合点”的测试。

并发测试,往往被当作功能测试的补充,主要用于发现诸如多线程、资源竞争、资源死锁之类的错误。要执行并发测试,就需要加入“集合点”,所以往往需要修改虚拟用户脚本。

加入“集合点”一般有两种做法:

  1. 在虚拟用户脚本的录制过程中直接添加;
  2. 在虚拟用户脚本中,通过加入 lr_rendezvous() 函数添加。

四、容量规划测试

容量规划测试,是为了完成容量规划而设计执行的测试。

那什么是容量规划呢?所谓容量规划,是软件产品为满足用户目标负载而调整自身生产能力的过程。

所以,容量规划的主要目的是,解决当系统负载将要达到极限处理能力时,我们应该如何通过垂直扩展(增加单机的硬件资源)和水平扩展(增加集群中的机器数量)增加系统整体的负载处理能力的问题。

目前来讲,容量规划的主要方法是基于水平扩展。但是,具体应该增加多少机器,以及增加后系统的负载处理能力是否会线性增长,这些问题都需要通过容量规划测试进行验证。

那么,容量规划测试具体要怎么做呢?

我们可以使用性能基准测试中的虚拟用户脚本,以及各个业务操作脚本的百分比,压测单机部署的被测系统。我们会采用人工的方式不断增加测试负载直到单机系统的吞吐量指标到达临界值,由此就可以知道单台机器的处理能力。

理论上讲,整个集群的处理能力将等于单台机器的处理能力乘以集群的机器数,但是实际情况并不是这样。实际的集群整体处理能力一定小于这个值,但具体小多少就是要靠实际的测试验证了。

理想的状态是,集群整体的处理能力能够随着集群机器数量的增长呈线性增长。但是,随着机器数量的不断增长,总会在达到某个临界值之后,集群的整体处理能力不再继续呈线性增长。这个临界值是多少,我们也需要通过容量规划测试找出来了。

另外,容量规划测试的测试结果还可以被用作系统容量设计的依据。比如,企业级软件产品的目标用户规模通常是可以预估的,那么我们就可以通过这些预估的系统负载计算出软件部署的集群规模,并且可以在具体实施后通过容量测试的方式进行验证。

五、总结

如果决意去做一件事了,就不要再问自己和别人值不值得。心甘情愿才能理所当然,理所当然才会义无反顾。

没有别人聪明,就要比别人努力!没有别人有钱,就要比别人能吃苦!没有别人的机会多,就要主动去创造机会!一份付出一份收获。

每个人真正强大起来都要度过一段没人帮忙,没人支持的日子。所有事情都是自己一个人撑,所有情绪都是只有自己知道。但只要咬牙撑过去,一切都不一样了。

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
### 回答1: 《JMeter性能测试实战.pdf》是一本关于使用JMeter进行性能测试的实践指南。本书主要分为理论方面和实际操作方面两个部分。 首先,本书详细介绍了性能测试的基本概念和原理,包括测试目标、测试环境准备、性能指标等方面。读者可以通过阅读本书了解到性能测试的整个流程,从而对性能测试有一个全面的了解。 其次,本书重点介绍了JMeter的使用方法和操作技巧。JMeter是一款功能强大的性能测试工具,通过本书的指导,读者可以了解到JMeter的各种功能和使用场景,包括如何创建测试计划、设置线程组、配置Sampler和监听器等。通过实际操作示例,读者可以学会如何使用JMeter进行性能测试。 此外,本书还介绍了JMeter的扩展插件和高级功能。JMeter提供了一些扩展插件,如图形化查看测试结果的插件和分布式测试的插件,本书对这些插件的使用方法进行了详细的解释。此外,本书还介绍了一些高级功能,如参数化、断言、前置处理器和后置处理器等,读者可以通过学习这些高级功能,进一步提升自己的性能测试技能。 总之,《JMeter性能测试实战.pdf》是一本详细介绍JMeter性能测试方法和实践操作的实用指南。无论是初学者还是有一定经验测试人员,阅读本书都能够提升自己在性能测试方面的能力,并能够更加准确、高效地进行性能测试。 ### 回答2: 《JMeter性能测试实战》是一本介绍JMeter性能测试的实用指南。这本书从基础概念开始,详细讲解了JMeter的安装、配置和使用方法。它从如何创建测试计划开始,包括线程组、控制器、取样器、监听器等的使用。同时,它还介绍了如何使用JMeter进行负载测试压力测试性能测试,并提供了一些实际案例,让读者能够更好地理解和应用所学的知识。 该书内容结构清晰,文字简洁明了,配有丰富的图示和示例代码,有助于读者理解和运用JMeter进行性能测试。同时,书中还包括了一些常见问题和解决方案,帮助读者解决在使用JMeter过程中可能遇到的困难和问题。 《JMeter性能测试实战》除了介绍JMeter的基本用法之外,还涉及了一些高级主题,如分布式测试、数据分析和报告生成等。这些内容对于需要进行大规模、复杂性能测试的人员来说尤为有用。 总的来说,《JMeter性能测试实战》是一本很好的JMeter实践指南,对于想要了解和运用JMeter进行性能测试的人员来说,是一本不可多得的参考书。无论是初学者还是有一定经验的人员,都可以从中获取到宝贵的知识和经验,并能够应用到实际工作中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值