初級軟件測試工程師如何向性能測試工程師進階?獻給迷茫的測試人
性能測試的目的不僅是為了評估系統當前的性能狀況,同時還希望通過故障定位找到系統存在的性能瓶頸,從而進一步優化性能,直接提升系統的處理能力,或者對系統的擴展能力提供優化策略。性能測試工程師的能力可分為三個層次,從初級的性能檢測,到中級的故障定位,再到高級的性能調優,是一個循序漸進,逐步提高的過程,下面就這三個層次的能力進行簡述。能力層次如下圖:
(一)初級——性能檢測能力
初級性能測試工程師需要掌握性能的基礎理論,能夠編制測試方案,使用自動化測試工具,進行初步的數據結果分析。
在性能基礎理論方面,需要知道併發用户數、響應時間、吞吐量等常用的性能測試指標,知道負載測試、壓力測試、疲勞強度測試、基準測試等主要的性能測試類型,知道測試流程的幾個重要節點,如測試需求分析、測試方案制定、測試環境配置、測試數據準備、測試執行及測試結果分析。測試流程如下圖:
在性能測試方案方面,根據性能測試需求,編制性能測試方案,方案中應包括測試目的、測試依據、測試計劃、測試內容、測試方法、測試環境要求等。其中關鍵的是測試用例及測試數據的準備,測試數據包括鋪底數據、參數化數據及測試數據,數據量的多少及合理性會影響到測試結果的真實性。
在測試工具使用方面,至少會使用一到兩種自動化的性能測試工具,如主流的商業化測試工具LoadRunner、開源的測試工具JMeter等。能夠識別應用協議錄製腳本、簡單調試腳本、配置測試策略、裝載測試數據、收集測試數據。
在測試結果分析方面,重點關心時間特性、資源利用率及容量,包括交易的響應時間、支持的併發用户數、交易的吞吐量、網絡的吞吐量、CPU的使用情況、磁盤讀寫情況等常用指標,通過數據分析可以反映系統當前的性能狀況。
(二)中級——故障定位能力
中級性能測試工程師需要通過透視性能腳本執行過程來找到影響系統性能提升的故障點,為後續的性能調優提供數據支持。所以需要具備故障診斷分析能力,熟練使用各類的故障分析工具等。
在故障診斷分析方面,當在做性能測試的時候發現系統響應時間過長,沒有達到預期的目標,那麼就需要分析是什麼因素導致了響應慢,是數據庫服務器響應慢,還是應用服務器響應慢,如果是數據庫服務器響應慢,是因為SQL語句執行時間長引起,還是數據庫參數配置不當造成的,這些都是要找出的故障點。故障診斷可以從技術架構、硬件、網絡、軟件、應用、安全這幾個方面展開,如下圖:
在故障分析工具方面,掌握一些專有的故障分析工具可以提高故障定位效率,可以通過性能監控工具、日誌分析工具、抓包工具、安全監控軟件等來輔助定位故障,為接下來的系統調優做準備。如Youkit是一款專業的java性能分析工具,可以提供強有力的數據分析功能。Fiddler是一個抓包工具,可對數據包進行截獲、重發、編輯、轉存等操作,也可以用來檢測網絡情況。日誌分析工具可以監控服務器、數據庫、中間件等系統日誌,發現問題及時定位,如Facebook日誌系統Scribe、Apache日誌系統Chukwa日誌系統等。
(三)高級——性能調優能力
高級性能測試工程師因需要參與解決性能問題,對測試工程師的要求非常高,需要有比較全面強大的技術基礎及實踐經驗,要熟悉系統架構,熟悉基礎支撐軟件等,還要具備性能優化分析能力,通常性能問題的修復成本相對較高,如何使用最低的成本換取最高的性能,是性能調優的重點。
在性能調優知識面,要實現性能調優,需要掌握系統架構、中間件、數據庫、操作系統、網絡協議等綜合知識,如下圖:
在性能優化分析方面,在進行性能測試的時候,通過過程數據分析,可在這幾個方面入手性能調優。應用服務器調優包括JVM調優、Server調優、JDBC調優、WEB、JMS、EJB調優;數據庫調優包括核心參數調優、數據庫連接池調優、SQL與索引調優、表及視圖的調優;應用程序調優包括通用代碼調優、JDBC代碼調優、WEB代碼調優、JMS代碼調優、EJB代碼調優;操作系統調優包括硬件的配置(CPU、內存、硬盤等)、核心參數、TCP/IP參數、補丁等。系統架構調優是系統層次上的優化,如採用Redis設置系統緩存數據庫機制,減少數據庫的訪問代價。
也可考慮系統部署方式、網絡和硬件層面的調優,包括對系統部署負載均衡策略、網絡帶寬/流量、安全訪問控制策略等情況優化系統。根據實際性能結果計算資源瓶頸,對系統硬件資源(內存、存儲資源等)進行擴容處理優化。通常建議性能優化可從程序優化、業務處理方式優化、系統層次優化、系統架構優化、網絡架構優化、硬件優化這個順序展開。