性能测试介绍
一、为什么需要进行性能测试?
近些年来,由于软件系统的性能问题而引起严重后果的事件比比皆是,下面列举几个案例
(1)2007年10月,北京奥组委实行2008年奥运会门票预售,一时间订票官网访问量激致系统瘫痪,最终奥运会门票暂停销售5天。
(2)伦敦时间26日23:59是原定的售票截止最后期限,结果网站订票系统于 22:30便开始出现问题,到了晚上23:59,订票系统彻底崩溃。此次伦敦奥运会门票的预订虽然吸取了北京奥运会“先到先得,售完即止”而导致系统瘫痪的教训,但也将想要订票的民众引向另一个极端:很多英国居民经过深思熟虑后,到最后的截止时间才提交申请。
(3)12306订票网站自2010年上线以来就饱受诟病,每年春运期间,该网站总会因为抢票高峰到来而崩溃,用户在买票时出现无法登录的现象。2014年,12306网站甚至出现了安全问题,用户可以轻易获取陌生人的身份证号码、手机号码等信息。
上述事件都是由于软件系统没有经过性能测试或者性能测试不充分而引发的问题。作为一名测试人员,除了要对软件的基本功能测试之外,还需要对软件性能进行测试,软件性能测试也是非常重要且非常必要的一项测试。
二、什么系统需要做性能测试?
现有系统大致分为单机系统、C/S、B/S。这三类系统都应该进行性能测试,只是每个分类有各自特点,在实际测试中应该选择不同的策略进行对应。一般C/S架构的应用程序更关注于系统资源使用情况、数据库性能以及运行的配置要求等。例如,内存、用户连接数、数据库锁死、数据库cache命中率、运行的最低配置等。而B/S架构的应用程序,会关注Web服务器的相关指标,如每秒点击数、吞吐量、尝试连接数、事物成功率等。
三、性能测试的目的
性能测试与功能测试有所不同,性能测试更加关注系统的性能表现。而性能测试就是排除系统瓶颈,使系统更加健壮。可以从以下几个方面理解:
1)评估当前系统。系统未做过任何性能测试,对系统的当前性能情况不了解,缺少必要的的性能评估。
2)寻找瓶颈,优化性能。常见的现象为,某业务操作响应时间很长、某系统上线一段时间后运行越来越慢,这些都需要分析定位并调优。
3)预测未来性能。当用户数和业务量增加时能否及时应对?如何调整?是增加应用服务器,还是数据库服务器?还是要优化代码逻辑?这一系列问题都值得思考,这也是性能测试目的所在。
四、性能测试原理
说到性能测试就不得不提工具,常见的性能测试工具loadrunner、jmeter、locust、tsung等,其主要作用是通过模拟生产环境中的真实业务操作,对被测试系统实行压力负载测试,监视被测系统在不同业务场景、不同压力下系统的性能表现,找出潜在的性能瓶颈进行分析、优化。
常见的性能测试都是使用多线程的原理进行,使用线程来模拟人,经常在工作有人把先一个线程比作一个人,实际上这种描述是不正确的,在性能测试的时候,我们需要将客户的需求转换为实际的线程数在进行测试
五、性能测试分类详解
a、基准测试
基准最简单的理解就是有基础的标准,这样能通过对比发现系统的不同的与变化。一般情况下,基准测试有以下几种应用场景。
1)可以在指定的标准下通过基准测试建立一个性能基准,这样以后当系统的环境、参数发送变化之后,在进行一次相同标准下的测试,即可看出变化对性能的影响。例如,数据库的基准性能测试。
2)系统进行基准测试可以在较早的阶段发现性能问题。例如,如果对BestTest论坛进行10个用户并发测试时,系统出现了死机现象,那么就没比较进行后续测试。
3)某系统从来没有进行过任何性能测试,需要对该系统做一次性能评估作为后续开发调优的参考。这是基准测试常见的一种场景,也是大部分没有做过性能测试的公司最需要的。
基准测试不难理解,但实践起来常常被误解。以对某个系统的数据搜索进行性能基准测试用例,这个系统的数据量会随着时间的增长而增长,所以必须频繁地进但行基准测试,这样子才能准确地把握数据量的增长对系统性能的影响。但是进行的基础测试又恰恰是在应用程序级别的,并不能客观地反应全局的性能。所以,比较好的做法是每次只修改一个地方,这样就能准确地判断出那个地方会对性能产生影响。
b、并发测试
并发测试是值通过模拟多个用户并发访问同一个应用、存储过程或数据记录及其他并发操作,测试是否存在死锁、数据错误等故障。为了避免数据库或者函数方法在并发下的错误,需要专门针对每个模块进行并发测试。
并发数如何确定?
并发数 = PV/PVTime * 页面连接次数 * HTTP响应时间 * 因数/Web服务器数量。
其中,PVTime是PV的统计时间,换算成秒,一天是86400s。页面连接次数包括外部的JS、CSS、图片等,一般为10。HTTP响应时间一般为1s或更少。因数一般为5。
假设,BestTest官网每天有6万PV,其余参数保持默认,那么推算出来的并发数大致为35
注意**:PV(page view)即页面浏览量。一个用户有可能创造十几个甚至更多的PV。它是目前判断网站访问流量最常见的计算方式,也是反映一个网站受欢迎程度的重要指标。
3、负载测试
负载测试是值在一定的软件、硬件及网络环境下,运行一种或多种业务,在不同虚拟用户数量的情况下,测试服务器的性能指标是否在用户的要求范围内,以此确定系统所能承受的最大用户数、最大有效用户数以及不同用户数下的系统响应时间及服务器的资源利用率。
负载测试强调的是在一定的环境下系统能够达到的峰值指标,大多数的性能测试都是负载测试。例如:在各大网站上看到的各种显卡测试,都是通过运行3DMark或者某种游戏得到的最终数据,通过这个数据来说明显卡的峰值处理能力,这就是负载测试的一种。
4、压力测试
压力测试是指在一定的软件、硬件及网络环境下,模拟大量的虚拟用户数向服务器产生负载,使服务器的资源处于极限状态下并长时间连续运行,以测试服务器在高负载情况下是否能够稳定工作。
与负载测试获得峰值性能数据不同,压力测试强调在极端情况下系统的稳定性,这个时候出来能力已经不重要了。
5、稳定性测试
想要知道系统稳定的情况,就需要长时间运行,在这段时间内观察系统出错的几率、性能变化趋势。进而大大减少系统上线后崩溃等现象。一般都会进行所谓7X24小时的稳定性测试。
但是稳定性测试也有和其他地方分类不一样的地方,这里需要强调一下两点:
1)一般稳定性测试需要在系统成型后进行,并且没有严重的Bug存在。
2)场景的设计以模拟真实用户的实际操作为佳。
6、失效恢复测试
失效恢复测试重点在关注系统出现问题后能否根据预先指定的策略恢复,且恢复后能否正常运行。失效恢复测试一般是对具有负载均衡的系统进行测试的,主要是为了测试当前系统局部发生故障时,是否会对全局产生大的影响,产生的影响是否可以在接受的范围,以及用户能否继续使用系统
7、现网性能测试
所谓现网性能测试,就是在实际网络、实际环境中进行测试,当前具有一定风险:
1)时间段的选择。现网性能测试可能会影响正常用户,所以时间段尽量避开高峰期。
2)垃圾数据处理。如果现网性能测试涉及写数据的操作,那么肯定会带来不少的垃圾数据,这些数据后期一定要清理,为了方便清理,前期数据设计要有规律可循。
3)网络限制。和在内网测试不同,现网的测试如果突然间产生大量测试,可能会被网络带宽限制,甚至路由会认为是非法数据请求而产生拦截等。所以如果在现网进行性能测试,那么压力机需要和被测服务器部署在同一个机房内,这样可避免网络限制,最好远程收取数据即可。