可靠性測試是測試/驗證系統在各種條件下是否可以繼續維持功能、性能。實際測試中,功能性測試成功是可靠性測試可以順利進行的前提,即基本功能要先正確,再進行可靠性測試才有意義,這就為如何安排測試執行順序提出了要求。
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版》