Photo by Helloquence on Unsplash
小弟之前在 鼠年全馬鐵人挑戰 WEEK 03:軟體測試的種類 - 第二集 的文章中有提到:"非功能性測試 (Non-Functional Test)"。 而這篇文章主要是藉由上次的內容做一個額外的介紹。 ( •ˋωˊ• )~
什麼是性能測試? 為什麼需要做性能測試? 性能測試的重點是什麼?
如果是第一次接觸到 "性能測試" 這個名詞的人,或許都會有這些疑問吧~
性能測試可以用來驗證系統是否符合製造商或供應商聲明的規範。
簡單來說就跟玩遊戲一樣,製造商或供應商就像是正在找代打的玩家;而做性能測試的人,就像是要幫忙破關解成就的職業玩家,但是如果職業玩家解不了成就破不了關,雇主可能就會森氣氣了。 (#ˋ皿ˊ)ノ
透過性能測試可以了解應用程式可能失敗或延遲的地方。
當產品已經到了完成的階段,還是免不了要做一些性能測試。能夠提升產品的性能與效能,也能夠藉此避免掉一些錯誤或是延遲的機率。
性能測試的重點主要分成了三種。
速度 - 確定應用程式是否快速響應。
穩定性 - 確定應用程式在不同負載下是否穩定。
可伸縮性 - 確定應用程式可以處理的最大用戶負載。
然而性能測試根據上述的重點又可以畫分成許多不同種類的測試。
那測試包含了哪些呢?讓我們繼續看下去~ (☞゚∀゚)☞
在極端的工作負載下測試應用程式,了解應用程式如何處理高流量高數據。
因為在某些情況下系統的故障可能導致巨大虧損,所以還是乖乖的通過壓力測試吧~
壓力測試的目的:
舉個例子
教授要你在一天之內完成10篇的發表論文。 (雖然聽起來有點瞎@.@)
你就像是應用程式,必須處理10篇論文的高流量高數據。
而教授就是那個測試人員,他必須監督你在一天內完成10篇的發表論文。
然而合理的要求是訓練,不合理的要求是磨練。
如果你真的無法完成,但是你已經盡了你最大的努力。
那就向教授反應吧,適時的表達原因 - 也就是應用程式返回的錯誤訊息。
在預期的用戶負載下測試應用程式,了解應用程式在預期負載下是否會遇到性能瓶頸。
必須確保軟體的設計、伺服器的配置與硬體限制是沒有問題的。
負載測試的目的:
舉個例子
你在學校上了一天課,每個老師都出了回家作業。 (天阿!聽起來就覺得累)
你就像是應用程式,必須處理預期負載的回家作業。
而老師就是那個測試人員,他必須限制你在一天內完成他出的回家作業。
而老師會檢查你有沒有寫作業,作業的內容會不會太多,有沒有準時繳交。
甚至是檢查你的作業內容,不能有任何的錯誤。
因為負載測試與壓力測試常常被搞混所以這邊簡單的分別說明一下兩者的差異
好拉~ 其實是小弟我自己搞不清楚,所以幫自己做個筆記 (〃∀〃)
在預期的最大負荷下長時間的運行應用程式,確保應用程式能夠運作。
通常因為系统運行時間過長,一些資源無法正常釋放,導致系统回應的時間慢慢變長。
耐力測試/浸泡測試的目的:
舉個例子
在一整個學年度中,每個老師每天都狂出作業跟考試。 (聽起來是預期的XD)
你就像是應用程式,必須長時間處理預期的最大負荷。
而老師就是那個測試人員,他必須確定你不會無故請假或是翹課。
也要監督你的學業成績不會下滑,必須能夠有效地吸收老師教的東西。
將大量的數據寫入資料庫中,並監控整個系統的行為,確保應用程式能夠運作。
體積測試/洪水測試的目的:
舉個例子
在上英文課的時候,老師都會固定教 10 個單字,並在下次上課考試。
但是某天,老師突然教了 100 個單字,並且下次上課也要考試。
此時 100 個單字就有如大量的數據,學生的腦力就有如資料庫。
確保學生是否可以有效吸收這 100 個單字的內容。
確定系統在擴展中的有效性,以支持用戶負載的增加,有助於規劃軟體系統容量增加。
用於在按比例放大或縮小用戶請求時測量網絡或系統的性能。
擴展性測試/伸縮性測試的目的:
舉個例子
在學期剛開始的時候,老師教的東西都較簡單也較少。
但是隨著時間的增加,老師所教的內容越來越艱深也越來越難懂。
而老師就是那個測試人員,確保學生可以處理預期的課程內容。
而學生也必須能夠隨著課程難度的提升而有所成長。
尖峰測試是從電力工業借鑒而來的,測試設備剛接通電源時,能否承受住通流的破壞。
而軟體的衝擊測試,是為了驗證網站在用户突然急速增加的情况下能夠正常工運行。
還沒到上下個得期間,學校附近的交通都非常的順暢。
但是一到上下課的時間一到,大量的交通工具,一窩蜂的聚集在一起。
此時學校就會關注,家長的接送率,學校內部的接送區,與內部停車場的使用率。
就像是在關注 CPU 使用率、可用内存、内存使用百分比等。
每隔一時間就紀錄上述的指標,來確定系統的問題之處。
以下內容為性能測試的基本步驟,如果對性能測試的步驟毫無頭緒,可以參考看看。
了解所需測試的環境。(通常與穩定的版本環境相似)
了解可用的測試工具,或是可用的測試設備。
使用的軟硬體和網絡配置的詳細信息。
確認性能測試所要關注的主要內容。(包括吞吐量,響應時間和資源分配等)
還有必要在這些目標和約束之外確定項目成功標準。
確定最終用戶的使用情況,可能會有所不同。
確定測試所有可能案例的關鍵方案。
模擬各種終端用戶的使用情境。
規劃性能測試數據並概述將收集哪些指標。
執行前確保已準備測試環境,安排工具和其他資源。
根據測試計畫與設計創建性能測試內容。
執行並監控測試,確定測試正常運行。
整合、分析和共享測試結果。
進行微調並再次測試以確定性能是否有改善或降低。
就這樣,以上是這篇所介紹的內容,希望內容不會太艱澀難懂。
希望之後有時間可以再做幾篇性能測試的工具給大家做講解。