本节书摘来自华章计算机《LoadRunner性能测试巧匠训练营》一书中的第1章,第1.4节,作者:赵 强 邹伟伟 任健勇 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1.4 性能测试分类详解
小白在学习过程中发现性能测试的种类繁多,但是实际执行起来又很难严格区分,所以小白觉得理解各种分类的特点和概念即可,没必要咬文嚼字。
1.基准测试
基准最简单的理解就是有基础的标准,这样能通过对比发现系统的不同点与变化。一般情况下,基准测试有以下几种应用场景。
1)可以在制定的标准下通过基准测试建立一个性能基准,这样以后当系统的环境、参数发生变化之后,再进行一次相同标准下的测试,即可看出变化对性能的影响。例如,数据库的基准性能测试。
2)系统进行基准测试可以在较早的阶段发现性能问题。例如,如果对BestTest网站进行10个用户并发测试时,系统出现了死机的现象,那么就没有必要进行后续的测试了。
3)某系统从来没有进行过任何性能测试,需要对该系统做一次性能评估作为后续开发调优的参考。这是基准测试常见的一种场景,也是大部分没有做过性能测试的公司最需要的。
虽然基准测试不难理解,但实践起来常常被误解。以对某个系统的数据搜索进行性能基准测试为例,这个系统的数据量会随着时间的增长而增长,所以必须频繁地进行基准测试,这样才能准确地把握数据量的增长对系统性能的影响。但因为进行的基准测试又恰恰是在应用程序级别的,并不能客观地反映全局性的性能。所以,比较好的做法是每次只修改一个地方,这样就能准确地判断出哪个地方会对性能产生影响。
2.并发测试
并发测试可以理解为很多的用户按照预定的场景并发请求某个业务或功能时是否出现并发问题。例如,内存泄露、线程锁、资源争用等,几乎所有的性能测试都会涉及并发测试。并发测试的主要目的是找出并发引起的问题。
那并发数又如何确定呢?小白通过查找资料得知,一般可以通过以下几种方法推算需要的并发数。
1)并发数=PV / PV Time×页面连接次数×HTTP响应时间×因数/ Web服务器数量。
其中,PV Time是PV的统计时间,换算成秒,一天是86 400s。页面连接次数包括外部的JS、CSS、图片等,一般为10。HTTP响应时间一般可为1s或更少。因数一般为5。
假设,BestTest官网每天有6万PV,其余参数保持默认,那么推算出来的并发数大致为35。
PV(page view)即页面浏览量。一个用户有可能创造十几个甚至更多的 PV。它是目前判断网站访问流量最常用的计算方式,也是反映一个网站受欢迎程度的重要指标之一。
2)著名的经典理论80-20原则。
3)参考段念老师在《软件性能测试过程详解与案例剖析》一书中提到的估算方法。
当然,上面的方法仅供参考,需要根据实际的系统特点、业务特点来衡量。
3.负载测试
负载测试可以理解为确定所要测试的业务或系统的负载范围,然后对其进行测试。它的主要目的是验证业务或系统在给定的负载条件下的处理性能。此外,还要关注响应时间、每秒通过事务数和其他相关指标。
从另一个角度理解,负载测试可以看作是性能测试的一部分,但它们两者的目的是不同的,负载测试是为了发现性能问题,而性能测试是为了获取性能指标。因为在性能测试过程中,也可以不调整负载,而是在同样负载情况下通过改变系统的结构、算法、硬件配置等来得到性能指标。
4.压力测试
压力测试可以理解为没有预期的性能指标,不断地加压,看系统什么时候崩溃,以此来确定系统的瓶颈或者不能接受的性能拐点,以获得系统的最佳并发数、最大并发数。仍然以生活中的例子来说明,压力测试就好比跑马拉松,看你到底能跑多久,什么时候就坚持不住了。
压力测试也可以看作是负载测试的一种,即高负载下的负载测试。通过压力测试,可以更快地发现内存泄漏问题,还可以更快地发现影响系统稳定性的问题。例如,在正常负载情况下,某些功能可以正常使用或者出错的概率比较低,但在压力测试下可能很快就会出现,帮助我们提早发现性能问题。
小白想起,公司之前有个网站,在用户少的时候没有什么问题,但在用户多时就暴露出了一些问题,经常会有异常报错产生。看来公司的网站真的需要进行性能测试来评估了,小白心里暗想。
负载测试与压力测试的概念并非完全独立,读者大可不必纠结于文字概念。在实际应用中一般二者都是相互结合、相互补充的。
5.稳定性测试
稳定性测试顾名思义重点在于“稳定”二字,要想知道系统稳定的情况,就需要长时间运行,在这段时间内观察系统的出错几率、性能变化趋势等。进而大大减少系统上线后的崩溃等现象。一般都会进行所谓的7×24小时的稳定性测试。
但稳定性测试也有和其他分类不一样的地方,这里需要强调以下两点。
1)一般稳定性测试需要在系统成型后进行,并且没有严重的Bug存在。
2)场景的设计以模拟真实用户的实际操作为佳。
6.失效恢复测试
失效恢复测试重在关注系统出现问题后能否根据预先制定的策略恢复,且恢复后能否正常运行。怎么理解呢?很简单,以跑马拉松为例,为了预防出现跑不动的情况,预先准备了一瓶红牛(应该给我广告费),当选手累得躺下后,拿出这瓶红牛一口气喝了,然后你有力量了,恢复了原来的状态,站起来继续跑。这下理解了吧。
不过失效恢复测试一般是对具有负载均衡的系统进行的,主要是为了测试当系统局部发生故障时,是否会对全局产生大的影响,产生的影响是否在可以接受的范围内,以及用户能否继续使用系统。
在实际应用过程中,可以模拟一台或几台负载均衡机器出现故障来进行失效恢复测试,但需要注意的是,不仅要关心失效后,用户是否可以正常访问或者恢复后系统是否可以正常工作,也要关注失效后,系统还能支持多少并发用户,以及采用哪些备选方案来快速响应。
小白学到这里也明白了原来性能测试中需要关注许多点,既要有对某个点的思考,也要有扩展点的思考,否则容易遗漏或得出片面的结论,而不能从根本上来预防解决问题。
7.现网性能测试
所谓现网性能测试,就是在实际网络、实际环境中进行测试,完全和真实用户一样。当然这样的测试有一定的风险,需要注意以下几点。
1)时间段的选择。现网性能测试可能会影响正常用户,所以这样的时间段要尽量避开高峰期,选择半夜或者凌晨来进行。
2)垃圾数据处理。如果现网性能测试涉及了写数据的操作,那么肯定会带来不少的垃圾数据,这些数据后期一定要清理,为了清理方便,前期数据的设计要有规律可循。
3)网络限制。和在内网测试不同,现网的测试如果突然间产生大的数据量,可能会被网络带宽限制,甚至路由会认为是非法数据请求而产生拦截等。所以如果在现网进行性能测试,那么压力机需要和被测服务器部署在同一个网段机房内,这样可以避免网络限制,最后远程收集数据即可。
如果没有特殊情况,尽量不要进行现网的性能测试,风险比较大,如果非要进行,一定要事先充分评估风险以及应对的解决方案,这样出了问题可以快速响应,把影响控制到最小。