天天看點

性能:軟體測試的重中之重

  性能測試在軟體的品質保證中起着重要的作用,它包括的測試内容豐富多樣。中國軟體評測中心将性能測試概括為三個方面:應用在用戶端性能的測試、應用在網絡上性能的測試和應用在伺服器端性能測試。通常情況下,三方面有效、合理的結合,可以達到對系統性能全面的分析和瓶頸的預測。

  應用在用戶端性能的測試

  應用在用戶端性能測試的目的是考察用戶端應用的性能,測試的入口是用戶端。它主要包括并發性能測試、疲勞強度測試、大資料量測試和速度測試等,其中并發性能測試是重點。

  ◆ 并發性能測試是重點

  并發性能測試的過程是一個負載測試和壓力測試的過程,即逐漸增加負載,直到系統的瓶頸或者不能接收的性能點,通過綜合分析交易執行名額和資源監控名額來确定系統并發性能的過程。負載測試(Load Testing)是确定在各種工作負載下系統的性能,目标是測試當負載逐漸增加時,系統組成部分的相應輸出項,例如通過量、響應時間、CPU負載、記憶體使用等來決定系統的性能。負載測試是一個分析軟體應用程式和支撐架構、模拟真實環境的使用,進而來确定能夠接收的性能過程。壓力測試(Stress Testing)是通過确定一個系統的瓶頸或者不能接收的性能點,來獲得系統能提供的最大服務級别的測試。

  并發性能測試的目的主要展現在三個方面:以真實的業務為依據,選擇有代表性的、關鍵的業務操作設計測試案例,以評價系統的目前性能;當擴充應用程式的功能或者新的應用程式将要被部署時,負載測試會幫助确定系統是否還能夠處理期望的使用者負載,以預測系統的未來性能;通過模拟成百上千個使用者,重複執行和運作測試,可以确認性能瓶頸并優化和調整應用,目的在于尋找到瓶頸問題。

  當一家企業自己組織力量或委托軟體公司代為開發一套應用系統的時候,尤其是以後在生産環境中實際使用起來,使用者往往會産生疑問,這套系統能不能承受大量的并發使用者同時通路? 這類問題最常見于采用聯機事務處理(OLTP)方式資料庫應用、Web浏覽和視訊點播等系統。這種問題的解決要借助于科學的軟體測試手段和先進的測試工具。

  ◆ 舉例說明:電信計費軟體

  衆所周知,每月20日左右是市話交費的高峰期,全市幾千個收費網點同時啟動。收費過程一般分為兩步,首先要根據使用者提出的電話号碼來查詢出其當月産生費用,然後收取現金并将此使用者修改為已交費狀态。一個使用者看起來簡單的兩個步驟,但當成百上千的終端,同時執行這樣的操作時,情況就大不一樣了,如此衆多的交易同時發生,對應用程式本身、作業系統、中心資料庫伺服器、中間件伺服器、網絡裝置的承受力都是一個嚴峻的考驗。決策者不可能在發生問題後才考慮系統的承受力, 預見軟體的并發承受力, 這是在軟體測試階段就應該解決的問題。

  目前,大多數公司企業需要支援成百上千名使用者,各類應用環境以及由不同供應商提供的元件組裝起來的複雜産品,難以預知的使用者負載和愈來愈複雜的應用程式,使公司擔憂會發生投放性能差、使用者遭受反應慢、系統失靈等問題。其結果就是導緻公司收益的損失。

  如何模拟實際情況呢? 找若幹台電腦和同樣數目的操作人員在同一時刻進行操作,然後拿秒表記錄下反應時間? 這樣的手工作坊式的測試方法不切實際,且無法捕捉程式内部變化情況,這樣就需要壓力測試工具的輔助。

  測試的基本政策是自動負載測試,通過在一台或幾台PC機上模拟成百或上千的虛拟使用者同時執行業務的情景,對應用程式進行測試,同時記錄下每一事務處理的時間、中間件伺服器峰值資料、資料庫狀态等。通過可重複的、真實的測試能夠徹底地度量應用的可擴充性和性能,确定問題所在以及優化系統性能。預先知道了系統的承受力,就為最終使用者規劃整個運作環境的配置提供了有力的依據。

  ◆ 并發性能測試前的準備工作

  測試環境:配置測試環境是測試實施的一個重要階段,測試環境的适合與否會嚴重影響測試結果的真實性和正确性。測試環境包括硬體環境和軟體環境,硬體環境指測試必需的伺服器、用戶端、網絡連接配接裝置以及列印機/掃描器等輔助硬體裝置所構成的環境;軟體環境指被測軟體運作時的作業系統、資料庫及其他應用軟體構成的環境。

  一個充分準備好的測試環境有三個優點:一個穩定、可重複的測試環境,能夠保證測試結果的正确;保證達到測試執行的技術需求;保證得到正确的、可重複的以及易了解的測試結果。

  測試工具:并發性能測試是在用戶端執行的黑盒測試,一般不采用手工方式,而是利用工具采用自動化方式進行。目前,成熟的并發性能測試工具有很多,選擇的依據主要是測試需求和性能價格比。著名的并發性能測試工具有QALoad、LoadRunner、Benchmark Factory和Webstress等。這些測試工具都是自動化負載測試工具,通過可重複的、真實的測試,能夠徹底地度量應用的可擴充性和性能,可以在整個開發生命周期、跨越多種平台、自動執行測試任務,可以模拟成百上千的使用者并發執行關鍵業務而完成對應用程式的測試。

  測試資料:在初始的測試環境中需要輸入一些适當的測試資料,目的是識别資料狀态并且驗證用于測試的測試案例,在正式的測試開始以前對測試案例進行調試,将正式測試開始時的錯誤降到最低。在測試進行到關鍵過程環節時,非常有必要進行資料狀态的備份。制造初始資料意味着将合适的資料存儲下來,需要的時候恢複它,初始資料提供了一個基線用來評估測試執行的結果。

  在測試正式執行時,還需要準備業務測試資料,比如測試并發查詢業務,那麼要求對應的資料庫和表中有相當的資料量以及資料的種類應能覆寫全部業務。

  模拟真實環境測試,有些軟體,特别是面向大衆的商品化軟體,在測試時常常需要考察在真實環境中的表現。如測試防毒軟體的掃描速度時,硬碟上布置的不同類型檔案的比例要盡量接近真實環境,這樣測試出來的資料才有實際意義。

  ◆ 并發性能測試的種類與名額

  并發性能測試的種類取決于并發性能測試工具監控的對象,以QALoad自動化負載測試工具為例。軟體針對各種測試目标提供了DB2、DCOM、ODBC、ORACLE、NETLoad、Corba、QARun、SAP、SQLServer、Sybase、Telnet、TUXEDO、UNIFACE、WinSock、WWW、Java Script等不同的監控對象,支援Windows和UNIX測試環境。

  最關鍵的仍然是測試過程中對監控對象的靈活應用,例如目前三層結構的運作模式廣泛使用,對中間件的并發性能測試作為問題被提到議事日程上來,許多系統都采用了國産中間件,選擇Java Script監控對象,手工編寫腳本,可以達到測試目的。

  采用自動化負載測試工具執行的并發性能測試,基本遵循的測試過程有:測試需求與測試内容,測試案例制定,測試環境準備,測試腳本錄制、編寫與調試,腳本配置設定、回放配置與加載政策,測試執行跟蹤,結果分析與定位問題所在,測試報告與測試評估。

  并發性能測試監控的對象不同,測試的主要名額也不相同,主要的測試名額包括交易處理性能名額和UNIX資源監控。其中,交易處理性能名額包括交易結果、每分鐘交易數、交易響應時間(Min:最小伺服器響應時間;Mean:平均伺服器響應時間;Max:最大伺服器響應時間;StdDev:事務處理伺服器響應的偏差,值越大,偏差越大;Median:中值響應時間;90%:90%事務處理的伺服器響應時間)、虛拟并發使用者數。

  應用執行個體:“新華社多媒體資料庫 V1.0”性能測試

  中國軟體評測中心(CSTC)根據新華社技術局提出的《多媒體資料庫(一期)性能測試需求》和GB/T 17544《軟體包品質要求和測試》的國家标準,使用工業标準級負載測試工具對新華社使用的“新華社多媒體資料庫 V1.0”進行了性能測試。

  性能測試的目的是模拟多使用者并發通路新華社多媒體資料庫,執行關鍵檢索業務,分析系統性能。

  性能測試的重點是針對系統并發壓力負載較大的主要檢索業務,進行并發測試和疲勞測試,系統采用B/S運作模式。并發測試設計了特定時間段内分别在中文庫、英文庫、圖檔庫中進行單檢索詞、多檢索詞以及變檢索式、混合檢索業務等并發測試案例。疲勞測試案例為在中文庫中并發使用者數200,進行測試周期約8小時的單檢索詞檢索。在進行并發和疲勞測試的同時,監測的測試名額包括交易處理性能以及UNIX(Linux)、Oracle、Apache資源等。

  測試結論:在新華社機房測試環境和内網測試環境中,100M帶寬情況下,針對規定的各并發測試案例,系統能夠承受并發使用者數為200的負載壓力,最大交易數/分鐘達到78.73,運作基本穩定,但随着負載壓力增大,系統性能有所衰減。

  系統能夠承受200并發使用者數持續周期約8小時的疲勞壓力,基本能夠穩定運作。

  通過對系統UNIX(Linux)、Oracle和Apache資源的監控,系統資源能夠滿足上述并發和疲勞性能需求,且系統硬體資源尚有較大利用餘地。

  當并發使用者數超過200時,監控到HTTP 500、connect和逾時錯誤,且Web伺服器報記憶體溢出錯誤,系統應進一步提高性能,以支援更大并發使用者數。

  建議進一步優化軟體系統,充分利用硬體資源,縮短交易響應時間。

  ◆ 疲勞強度與大資料量測試

  疲勞測試是采用系統穩定運作情況下能夠支援的最大并發使用者數,持續執行一段時間業務,通過綜合分析交易執行名額和資源監控名額來确定系統處理最大工作量強度性能的過程。

  疲勞強度測試可以采用工具自動化的方式進行測試,也可以手工編寫程式測試,其中後者占的比例較大。

  一般情況下以伺服器能夠正常穩定響應請求的最大并發使用者數進行一定時間的疲勞測試,擷取交易執行名額資料和系統資源監控資料。如出現錯誤導緻測試不能成功執行,則及時調整測試名額,例如降低使用者數、縮短測試周期等。還有一種情況的疲勞測試是對目前系統性能的評估,用系統正常業務情況下并發使用者數為基礎,進行一定時間的疲勞測試。

  大資料量測試可以分為兩種類型:針對某些系統存儲、傳輸、統計、查詢等業務進行大資料量的獨立資料量測試;與壓力性能測試、負載性能測試、疲勞性能測試相結合的綜合資料量測試方案。大資料量測試的關鍵是測試資料的準備,可以依靠工具準備測試資料。

  速度測試目前主要是針對關鍵有速度要求的業務進行手工測速度,可以在多次測試的基礎上求平均值,可以和工具測得的響應時間等名額做對比分析。

  應用在網絡上性能的測試

  應用在網絡上性能的測試重點是利用成熟先進的自動化技術進行網絡應用性能監控、網絡應用性能分析和網絡預測。

  ◆ 網絡應用性能分析

  網絡應用性能分析的目的是準确展示網絡帶寬、延遲、負載和TCP端口的變化是如何影響使用者的響應時間的。利用網絡應用性能分析工具,例如Application Expert,能夠發現應用的瓶頸,我們可知應用在網絡上運作時在每個階段發生的應用行為,在應用線程級分析應用的問題。可以解決多種問題:用戶端是否對資料庫伺服器運作了不必要的請求?當伺服器從用戶端接受了一個查詢,應用伺服器是否花費了不可接受的時間聯系資料庫伺服器?在投産前預測應用的響應時間;利用Application Expert調整應用在廣域網上的性能;Application Expert能夠讓你快速、容易地仿真應用性能,根據最終使用者在不同網絡配置環境下的響應時間,使用者可以根據自己的條件決定應用投産的網絡環境。

  ◆ 網絡應用性能監控

  在系統試運作之後,需要及時準确地了解網絡上正在發生什麼事情;什麼應用在運作,如何運作;多少PC正在通路LAN或WAN;哪些應用程式導緻系統瓶頸或資源競争,這時網絡應用性能監控以及網絡資源管理對系統的正常穩定運作是非常關鍵的。利用網絡應用性能監控工具,可以達到事半功倍的效果,在這方面我們可以提供的工具是Network Vantage。通俗地講,它主要用來分析關鍵應用程式的性能,定位問題的根源是在用戶端、伺服器、應用程式還是網絡。在大多數情況下使用者較關心的問題還有哪些應用程式占用大量帶寬,哪些使用者産生了最大的網絡流量,這個工具同樣能滿足要求。

  ◆ 網絡預測

  考慮到系統未來發展的擴充性,預測網絡流量的變化、網絡結構的變化對使用者系統的影響非常重要。根據規劃資料進行預測并及時提供網絡性能預測資料。我們利用網絡預測分析容量規劃工具PREDICTOR可以作到:設定服務水準、完成日網絡容量規劃、離線測試網絡、網絡失效和容量極限分析、完成日常故障診斷、預測網絡裝置遷移和網絡裝置更新對整個網絡的影響。

  從網絡管理軟體擷取網絡拓撲結構、從現有的流量監控軟體擷取流量資訊(若沒有這類軟體可人工生成流量資料),這樣可以得到現有網絡的基本結構。在基本結構的基礎上,可根據網絡結構的變化、網絡流量的變化生成報告和圖表,說明這些變化是如何影響網絡性能的。 PREDICTOR提供如下資訊:根據預測的結果幫助使用者及時更新網絡,避免因關鍵裝置超過利用閥值導緻系統性能下降;哪個網絡裝置需要更新,這樣可減少網絡延遲、避免網絡瓶頸;根據預測的結果避免不必要的網絡更新。

  應用在伺服器上性能的測試

  對于應用在伺服器上性能的測試,可以采用工具監控,也可以使用系統本身的監控指令,例如Tuxedo中可以使用Top指令監控資源使用情況。實施測試的目的是實作伺服器裝置、伺服器作業系統、資料庫系統、應用在伺服器上性能的全面監控,測試原理如下圖。

  (暫時略)

  圖:應用在伺服器上的性能測試原理圖

  UNIX資源監控名額和描述

  監控名額 描述

  平均負載 系統正常狀态下,最後60秒同步程序的

  平均個數

  沖突率 在以太網上監測到的每秒沖突數

  程序/線程交換率 程序和線程之間每秒交換次數

  CPU使用率 CPU占用率(%)

  磁盤交換率 磁盤交換速率

  接收包錯誤率 接收以太網資料包時每秒錯誤數

  包輸入率 每秒輸入的以太網資料包數目

  中斷速率 CPU每秒處理的中斷數

  輸出包錯誤率 發送以太網資料包時每秒錯誤數

  包輸入率 每秒輸出的以太網資料包數目

  讀入記憶體頁速率 實體記憶體中每秒讀入記憶體頁的數目

  寫出記憶體頁速率 每秒從實體記憶體中寫到頁檔案中的記憶體頁數

  目或者從實體記憶體中删掉的記憶體頁數目

  記憶體頁交換速率 每秒寫入記憶體頁和從實體記憶體中讀出頁的個數

  程序入交換率 交換區輸入的程序數目

  程序出交換率 交換區輸出的程序數目

  系統CPU使用率 系統的CPU占用率(%)

  使用者CPU使用率 使用者模式下的CPU占用率(%)

  磁盤阻塞 磁盤每秒阻塞的位元組數