可靠性測試是測試/驗證系統(tǒng)在各種條件下是否可以繼續(xù)維持功能、性能。實際測試中,功能性測試成功是可靠性測試可以順利進行的前提,即基本功能要先正確,再進行可靠性測試才有意義,這就為如何安排測試執(zhí)行順序提出了要求。
5種較為通用的可靠性測試方法,還可以根據(jù)自己的業(yè)務(wù)特點和失效規(guī)律來總結(jié)、完善自己的可靠性測試方法。
異常值輸入法
異常值輸入法是一種使用系統(tǒng)不允許輸入的數(shù)值(即異常值)作為測試輸入值的可靠性測試方法。
異常值輸入法可以測試系統(tǒng)的容錯性,能夠測試系統(tǒng)處理各種錯誤輸入的能力,是最基本的可靠性測試方法。
單運行邊界值輸入法中邊界值為非法輸入值時(如合法輸入值為[1,10]時輸入0和11),也可以歸入異常值輸入法。
有時一個功能會要求輸入一組數(shù)值或者多個參數(shù),對這個功能進行不完整的輸入測試,也屬于異常值輸入法。IP地址輸入為空,此時也屬于異常值輸入法。
故障植入法
故障植入法是把系統(tǒng)放在有問題的環(huán)境中進行測試的一種可靠性測試方法,主要用于測試質(zhì)量屬性中的容錯性和成熟性。
異常值輸入法是直接輸入一個系統(tǒng)認為是錯誤的、不支持的值;而故障植入法是把系統(tǒng)放在有問題的環(huán)境中,但是輸入的是正常值。
一般來說,我們習(xí)慣把系統(tǒng)放在一個非?!案蓛簟钡沫h(huán)境中去測試,讓系統(tǒng)運行在比較好的環(huán)境中。但是把系統(tǒng)部署在用戶的實際環(huán)境中時,無法保證條件總是如實驗室般理想,這就會引發(fā)問題。
從資源、環(huán)境沖突和網(wǎng)絡(luò)幾個方面對故障植入點進行了分析。
以“用戶發(fā)送電子郵件”為例,對這個測試項來說網(wǎng)絡(luò)是一個常見的故障植入點:
1)在斷網(wǎng)的情況下,用戶發(fā)送郵件會失敗,系統(tǒng)應(yīng)該有發(fā)送失敗的提示,并在網(wǎng)絡(luò)恢復(fù)的情況下自動重新發(fā)送郵件。
2)在網(wǎng)絡(luò)時斷時續(xù)、存在丟包的情況下,如果丟包不嚴重(比如小于15%),則系統(tǒng)能夠通過重傳的方式保證郵件發(fā)送成功;如果丟包嚴重(比如大于15%),則用戶發(fā)送郵件會失敗,系統(tǒng)應(yīng)該有發(fā)送失敗的提示,并在網(wǎng)絡(luò)恢復(fù)的情況下自動重新發(fā)送郵件。
穩(wěn)定性測試法
穩(wěn)定測試法是一種在一段時間里長時間、高負載運行某種業(yè)務(wù)的可靠性測試方法。穩(wěn)定性測試法能夠非常有效地測試系統(tǒng)的成熟性,是一種非常重要的可靠性測試方法。
穩(wěn)定性測試、壓力測試和性能測試存在一定的關(guān)系,以負載的高低來區(qū)分不同測試。
實際上,可以把負載擴大到系統(tǒng)規(guī)格:
1)超過系統(tǒng)規(guī)格的測試是壓力測試。
2)確定是否可以達到系統(tǒng)規(guī)格的測試是性能測試。
3)在系統(tǒng)規(guī)格內(nèi)的測試是穩(wěn)定性測試。
系統(tǒng)規(guī)格指系統(tǒng)承諾的能夠處理的最大容量或能力。
一套有趣的穩(wěn)定性測試心法——穩(wěn)定性測試四字:多、并、復(fù)、異。
第一訣:“多”字訣的要義是,在測試中通過增加用戶對功能的操作數(shù)量來測試系統(tǒng)的穩(wěn)定性。
以“用戶發(fā)送電子郵件”為例,測試用戶發(fā)送500封郵件或發(fā)送1000封郵件時系統(tǒng)的穩(wěn)定性。
第二訣:“并”字訣的要義是,在測試中讓多個用戶同時來操作這個功能,由此來測試系統(tǒng)是否依然穩(wěn)定。有時我們也稱這種測試為并發(fā)測試。
以“用戶發(fā)送電子郵件”為例,讓500個用戶同時向服務(wù)器發(fā)送電子郵件(假設(shè)系統(tǒng)支持的最大并發(fā)用戶數(shù)低于500)。
第三訣:“復(fù)”字訣的要義是,在測試中讓一個或多個用戶,反復(fù)進行新建、刷新、刪除、同步、備份之類的操作,以此來測試系統(tǒng)是否穩(wěn)定。使用“復(fù)”字訣能夠快速、有效地發(fā)現(xiàn)系統(tǒng)在處理時序、資源申請/釋放上是否存在問題。這是非常重要的穩(wěn)定性測試方法。
以“用戶發(fā)送電子郵件”為例,在一段時間內(nèi)(如1天、1周)通過500個用戶反復(fù)進行登錄郵箱、編寫郵件、發(fā)送郵件、退出郵箱等操作,觀察系統(tǒng)是否依然正常穩(wěn)定。
第四訣:“異”字訣的要義是,在測試中讓一個或者多個用戶反復(fù)進行異常操作,驗證系統(tǒng)是否能夠持續(xù)做出合理的反應(yīng)。
和異常輸入法和故障植入法相比,“異”字訣強調(diào)的是“持續(xù)”和“累積”。事實上,開發(fā)者在進行編碼的時候,常會考慮正確情況下的資源申請和回收而忽視異常情況下的資源回收。“異”字訣在發(fā)現(xiàn)缺陷方面非常有效。
以“用戶發(fā)送電子郵件”為例,可以測試用戶持續(xù)(如1天、1周)發(fā)送地址是非法輸入值的郵件,用戶在長時間(如1天、1周)處于網(wǎng)絡(luò)故障的情況下持續(xù)發(fā)送郵件等情況。
壓力測試法
壓力測試法是一種在一段時間內(nèi)持續(xù)使用超過系統(tǒng)規(guī)格的負載的可靠性測試方法。
所有系統(tǒng)都有其本身的性能規(guī)格。負載在性能規(guī)格范圍內(nèi),系統(tǒng)要穩(wěn)定提供正確功能。但在負載超過性能規(guī)格的情況下,對于系統(tǒng)應(yīng)該怎樣處理,人們的理解往往不統(tǒng)一。那么我們又該如何分析和確定測試結(jié)果呢?要回答好這個問題,就要從負載模型說起。
有兩種和壓力相關(guān)的負載模型,一種是持續(xù)壓力負載模型,一種是突發(fā)壓力負載模型。
1.持續(xù)壓力負載模型測試
當使用持續(xù)壓力負載模型進行壓力測試時,允許系統(tǒng)出現(xiàn)負載處理失效,但我們不希望系統(tǒng)直接宕機。有些系統(tǒng)能夠?qū)Τ^性能規(guī)格的負載做bypass(繞過)處理,這樣依然能夠盡力保證正確處理性能規(guī)格內(nèi)的負載。
從測試關(guān)注點來說,對于持續(xù)壓力負載模型測試,業(yè)務(wù)負載處理是否正常并不是我們的重點關(guān)注項,需要我們重點關(guān)注的是:
1)系統(tǒng)如果對超過規(guī)格的負載做了bypass處理,則需要測試bypass功能的正確性和有效性;
2)系統(tǒng)不會因為持續(xù)壓力負載而直接宕機。
盡管我們允許在持續(xù)壓力負載模型下出現(xiàn)業(yè)務(wù)失敗,但我們希望當業(yè)務(wù)負載再次恢復(fù)到性能規(guī)格范圍內(nèi)后,系統(tǒng)能夠正確處理所有業(yè)務(wù),這又構(gòu)成了一種新的測試方法——恢復(fù)測試法。
2.突發(fā)壓力負載模型測試
所謂“突發(fā)”,指業(yè)務(wù)負載在很短的時間內(nèi)出現(xiàn)超過性能規(guī)格又立即恢復(fù)的現(xiàn)象。
由于負載突發(fā)情況持續(xù)時間極短,用戶甚至無法覺察,整個過程平均負載一般都不會超過性格規(guī)格,所以通常情況下,我們希望系統(tǒng)能夠正確處理“突發(fā)”:系統(tǒng)不會因為突發(fā)發(fā)生宕機或出現(xiàn)異常,并可以正確處理突發(fā)業(yè)務(wù),在存在突發(fā)的情況下不會出現(xiàn)業(yè)務(wù)失敗。
恢復(fù)測試法
恢復(fù)測試法指使用持續(xù)超過性能規(guī)格的負載進行測試后,再將負載降到性能規(guī)格以內(nèi)的測試方法。
在恢復(fù)測試法上,重復(fù)此操作,形成一個加強版周期性負載震蕩測試,以反復(fù)進行持續(xù)壓力和恢復(fù)測試。
恢復(fù)測試法能夠?qū)ο到y(tǒng)的可恢復(fù)性進行測試,也就是測試系統(tǒng)的“自愈性”。在使用恢復(fù)測試法進行測試時,預(yù)期結(jié)果均為:
1)持續(xù)進行超過性能規(guī)格的負載測試時,允許性能規(guī)格內(nèi)的業(yè)務(wù)不是100%正確,如果產(chǎn)品在可靠性方面的要求不高,甚至允許系統(tǒng)出現(xiàn)死機、重啟等情況。
2)當負載降到性能規(guī)格以內(nèi)后,業(yè)務(wù)必須能夠恢復(fù)到100%正確,即產(chǎn)品在負載高的情況下出現(xiàn)的死機、重啟等問題,在負載降低后能夠“自愈”。
摘取自劉琛梅老師的《測試架構(gòu)師修煉之道:從測試工程師到測試架構(gòu)師 第2版》