談軟體負載測試Load Testing
負載測試屬於效能測試的一種,在軟體工程中,效能測試是一個普遍用來確定系統特定之工作負載量;與某段時間下其在回應與穩定性上,會如何呈現所執行的一種非功能性測試。
它包含了幾種類型,除了負載測試外,還有壓力測試、浸泡測試、尖峰測試、組態測試和隔離測試等等,而當中最被重視與最常被執行的便是負載測試,因此本文乃針對其內容與執行方式作進一步說明。
負載測試的需求,是為了瞭解系統在所預期或特定的負載量下,這邊所指的負載量,有可能是系統未來正式上線後每日營運所預估的量、或是因有特殊某個需求,在一段時間期間內,系統需滿足同時大量暴增的使用者,其回應數據是否能滿足使用者需求與期望。
而回應數據又包含了像是吞吐量、平均交易回應時間與交易成功率等指標,在執行測試期間,除了以自動化負載測試工具對系統產生出指定之負載量,同時也會對與系統相關之資料庫與各伺服器之CPU、記憶體、硬碟使用率和網路頻寬等進行監控,以判斷屆時效能測試結果不如預期之原因,究竟該歸於軟體還是硬體。
此外,在進一步介紹負載測試前,我們先對一般人容易與之混淆之壓力測試一詞作個簡單釐清。壓力測試(Stress Testing)通常用來檢測系統在異常大的負載量下(可能是負載測試的好幾十、百倍),系統與軟體的行為與反應是否仍能滿足健壯性(robustness)。
一般而言,在執行壓力測試期間,系統發生異常乃是預期的結果,但是當異常發生時,特別是crash,系統是否有做好例外處理,並採取fail-closed而非fail-open原則,一般來說,網站或手機應用程式通常皆採fail-closed,以上皆為壓力測試的重點。
而就執行負載測試而言,通常包含四個步驟:
一. 確認負載測試的測試標的物。
二. 向客戶收集系統資訊與定義測試目標。
三. 選用自動化測試工具並執行負載測試。
四. 分析造成軟體/系統瓶頸之原因。
以下針對四個步驟逐項說明:
首先測試經理會先向客戶詢問他此次測試的初步需求、測試標的物,標的物較常見的項目為以下三種
- 是網站、手機應用程式,還是一般client端的應用程式
- 系統屬哪種架構
- 撰寫之程式語言為何
這些可以讓測試小組先評估,並選定不同的自動化測試工具進行試錄,通常這些效能測試工具都需要先將進行負載測試的操作程序完成錄製,並設置測試情境,接著之後便可對系統施壓進行測試,當中的關鍵因素便是確定自動化工具的可支援性與適用性,因此此步驟所需之工作人數與天數,視系統範圍大小與架構複雜性而定。
接著測試經理會開始蒐集上述第二步驟之系統資訊,包含了該測試標的物之所有業務流程、各流程平時和尖峰時期的使用頻率(可參考歷史資料或預估)、流程重要性,並確認其內容是否為動態網頁程式,以及每個流程在未來上線,所預估之最大同時使用人數等資訊。
接下來還需定義你在每個業務流程中要測量的交易點,可能是一個網頁連結或「查詢」、「送出」按鈕,這也就是我們之後會提到的測試衡量指標(交易回應時間、交易成功率)中所謂之「交易」。
以上種種的資訊,測試經理均需向客戶收集齊全,並共同討論,以便讓測試小組挑選出需要進行負載測試的流程,並安排之後的測試情境。
此外,測試小組也會向客戶收集正式環境的系統架構,包含軟硬體資訊與組態/配置,以便比照建立測試環境,這項資訊同時也是在效能測試結束後,評估系統效能是否受到硬體資源本身不足,所需參考的一項重要資料。
而測試目標是可量化的指標,其主要是根據使用者需求/期望所訂定出的數據,像是吞吐量、與前面所提過之平均交易回應時間與交易成功率等,而測試經理需在實際測試執行前,將上述各項資訊及目標暨測試通過原則等,放置於測試計畫書中,在與客戶確認後內容後便可開始執行第三步驟。
除了針對系統/軟體本身的效能進行檢測的工具外,測試期間也會使用測試工具內建之硬體資源監控功能,或另行使用其他專門點對點之監控工具,來監控環境架構中與系統網站會進行互動之硬體伺服器,而系統架構可能包含網頁伺服器、應用程式伺服器、資料庫伺服器等。
測試執行結束後,有時並無法從單一工具所產生出來的報表,看出本次測試系統之癥結,因此會再加入其他的自動化測試工具,綜合判讀以探求其細部原因。
由以上可知,效能測試前的前置作業實屬重要,且在執行階段,測試小組可視測試結果及可用資源,適時加入並搭配其他的測試工具,以提供更客觀的測試結果與更明確的建議,而在系統完成調效後,也須再次進行覆測,以確認系統效能確實有獲得改善。
名詞解釋:
- 回應時間:回應時間代表的,是自使用者送出一個請求到伺服器端,伺服器端收到該請求,接著回傳一個回應給使用者端,此完整程序所需花費的時間。針對一般的網站系統而言,於上線後之平時負載量下,各網頁與交易回應時間不得超出3秒。
- 平均交易回應時間 (Average Transaction Response Time):即沒有產生錯誤之交易於一段期間下回應時間之平均值。針對一般電子商務或有進行交易的網站而言,於上線後之平時負載量下,建議的平均交易回應時間不超出三秒。
- 交易成功率(Transaction Successful Rate):即沒有產生錯誤之交易百分比。針對一般提供資訊的網站系統而言,於上線後之平時負載量下,整體交易成功率(例如以一萬筆交易/請求計算)不得低於99%。
- 健壯性(robustness):系統在運行期間,處理錯誤並應對錯誤輸入的能力。
- fail-open與fail-closed:系統存取權限是開放給所有人還是全部拒絕
以上是本次為大家介紹的文章資訊分享,您想知道什麼?或需要什麼相關服務?歡迎您在下方留言給我們。
或是追蹤我們的粉絲專頁,就不會錯過最新文章囉!
我要留言