可靠性测试是测试/验证系统在各种条件下是否可以继续维持功能、性能。实际测试中,功能性测试成功是可靠性测试可以顺利进行的前提,即基本功能要先正确,再进行可靠性测试才有意义,这就为如何安排测试执行顺序提出了要求。
5种较为通用的可靠性测试方法,还可以根据自己的业务特点和失效规律来总结、完善自己的可靠性测试方法。
异常值输入法
异常值输入法是一种使用系统不允许输入的数值(即异常值)作为测试输入值的可靠性测试方法。
异常值输入法可以测试系统的容错性,能够测试系统处理各种错误输入的能力,是最基本的可靠性测试方法。
单运行边界值输入法中边界值为非法输入值时(如合法输入值为[1,10]时输入0和11),也可以归入异常值输入法。
有时一个功能会要求输入一组数值或者多个参数,对这个功能进行不完整的输入测试,也属于异常值输入法。IP地址输入为空,此时也属于异常值输入法。
故障植入法
故障植入法是把系统放在有问题的环境中进行测试的一种可靠性测试方法,主要用于测试质量属性中的容错性和成熟性。
异常值输入法是直接输入一个系统认为是错误的、不支持的值;而故障植入法是把系统放在有问题的环境中,但是输入的是正常值。
一般来说,我们习惯把系统放在一个非常“干净”的环境中去测试,让系统运行在比较好的环境中。但是把系统部署在用户的实际环境中时,无法保证条件总是如实验室般理想,这就会引发问题。
从资源、环境冲突和网络几个方面对故障植入点进行了分析。
以“用户发送电子邮件”为例,对这个测试项来说网络是一个常见的故障植入点:
1)在断网的情况下,用户发送邮件会失败,系统应该有发送失败的提示,并在网络恢复的情况下自动重新发送邮件。
2)在网络时断时续、存在丢包的情况下,如果丢包不严重(比如小于15%),则系统能够通过重传的方式保证邮件发送成功;如果丢包严重(比如大于15%),则用户发送邮件会失败,系统应该有发送失败的提示,并在网络恢复的情况下自动重新发送邮件。
稳定性测试法
稳定测试法是一种在一段时间里长时间、高负载运行某种业务的可靠性测试方法。稳定性测试法能够非常有效地测试系统的成熟性,是一种非常重要的可靠性测试方法。
稳定性测试、压力测试和性能测试存在一定的关系,以负载的高低来区分不同测试。
实际上,可以把负载扩大到系统规格:
1)超过系统规格的测试是压力测试。
2)确定是否可以达到系统规格的测试是性能测试。
3)在系统规格内的测试是稳定性测试。
系统规格指系统承诺的能够处理的最大容量或能力。
一套有趣的稳定性测试心法——稳定性测试四字:多、并、复、异。
第一诀:“多”字诀的要义是,在测试中通过增加用户对功能的操作数量来测试系统的稳定性。
以“用户发送电子邮件”为例,测试用户发送500封邮件或发送1000封邮件时系统的稳定性。
第二诀:“并”字诀的要义是,在测试中让多个用户同时来操作这个功能,由此来测试系统是否依然稳定。有时我们也称这种测试为并发测试。
以“用户发送电子邮件”为例,让500个用户同时向服务器发送电子邮件(假设系统支持的最大并发用户数低于500)。
第三诀:“复”字诀的要义是,在测试中让一个或多个用户,反复进行新建、刷新、删除、同步、备份之类的操作,以此来测试系统是否稳定。使用“复”字诀能够快速、有效地发现系统在处理时序、资源申请/释放上是否存在问题。这是非常重要的稳定性测试方法。
以“用户发送电子邮件”为例,在一段时间内(如1天、1周)通过500个用户反复进行登录邮箱、编写邮件、发送邮件、退出邮箱等操作,观察系统是否依然正常稳定。
第四诀:“异”字诀的要义是,在测试中让一个或者多个用户反复进行异常操作,验证系统是否能够持续做出合理的反应。
和异常输入法和故障植入法相比,“异”字诀强调的是“持续”和“累积”。事实上,开发者在进行编码的时候,常会考虑正确情况下的资源申请和回收而忽视异常情况下的资源回收。“异”字诀在发现缺陷方面非常有效。
以“用户发送电子邮件”为例,可以测试用户持续(如1天、1周)发送地址是非法输入值的邮件,用户在长时间(如1天、1周)处于网络故障的情况下持续发送邮件等情况。
压力测试法
压力测试法是一种在一段时间内持续使用超过系统规格的负载的可靠性测试方法。
所有系统都有其本身的性能规格。负载在性能规格范围内,系统要稳定提供正确功能。但在负载超过性能规格的情况下,对于系统应该怎样处理,人们的理解往往不统一。那么我们又该如何分析和确定测试结果呢?要回答好这个问题,就要从负载模型说起。
有两种和压力相关的负载模型,一种是持续压力负载模型,一种是突发压力负载模型。
1.持续压力负载模型测试
当使用持续压力负载模型进行压力测试时,允许系统出现负载处理失效,但我们不希望系统直接宕机。有些系统能够对超过性能规格的负载做bypass(绕过)处理,这样依然能够尽力保证正确处理性能规格内的负载。
从测试关注点来说,对于持续压力负载模型测试,业务负载处理是否正常并不是我们的重点关注项,需要我们重点关注的是:
1)系统如果对超过规格的负载做了bypass处理,则需要测试bypass功能的正确性和有效性;
2)系统不会因为持续压力负载而直接宕机。
尽管我们允许在持续压力负载模型下出现业务失败,但我们希望当业务负载再次恢复到性能规格范围内后,系统能够正确处理所有业务,这又构成了一种新的测试方法——恢复测试法。
2.突发压力负载模型测试
所谓“突发”,指业务负载在很短的时间内出现超过性能规格又立即恢复的现象。
由于负载突发情况持续时间极短,用户甚至无法觉察,整个过程平均负载一般都不会超过性格规格,所以通常情况下,我们希望系统能够正确处理“突发”:系统不会因为突发发生宕机或出现异常,并可以正确处理突发业务,在存在突发的情况下不会出现业务失败。
恢复测试法
恢复测试法指使用持续超过性能规格的负载进行测试后,再将负载降到性能规格以内的测试方法。
在恢复测试法上,重复此操作,形成一个加强版周期性负载震荡测试,以反复进行持续压力和恢复测试。
恢复测试法能够对系统的可恢复性进行测试,也就是测试系统的“自愈性”。在使用恢复测试法进行测试时,预期结果均为:
1)持续进行超过性能规格的负载测试时,允许性能规格内的业务不是100%正确,如果产品在可靠性方面的要求不高,甚至允许系统出现死机、重启等情况。
2)当负载降到性能规格以内后,业务必须能够恢复到100%正确,即产品在负载高的情况下出现的死机、重启等问题,在负载降低后能够“自愈”。
摘取自刘琛梅老师的《测试架构师修炼之道:从测试工程师到测试架构师 第2版》