張晉桂
(廣東拓思軟件科學園有限公司 廣東省廣州市 510663)
按照標準GB/T 25000.10 系統與軟件質量模型,性能效率是軟件產品的八大質量特性之一。實施性能效率測試在軟件產品和信息化系統測試和質量保障上應用較為廣泛,一方面通過開展性能效率測試來驗證軟件產品和信息化系統的設計和開發滿足用戶需求和系統設計的性能指標要求,另一方面也可以準確掌握被測軟件產品和信息化系統在規定的某種性能負載下的整體性能狀況,便于在實際運行中被測軟件產品和信息化系統出現相對應負載時可以及時采取應對措施;再者通過對被測軟件產品和信息化系統實施性能診斷分析和性能調優測試,可以針對被測軟件產品和信息化系統的性能瓶頸和問題進行定位,提升被測軟件產品和信息化系統性能和用戶體驗。行業內通常采用Loadrunner、Jmeter 等性能測試和監控工具來開展性能測試,性能測試會產生大量的結果數據和監控數據,手工進行結果分析和數據采集工作量較大并且耗時較長。本文以Loadrunner 性能測試為例,探討通過Analysis API 的方式實現Loadrunner 性能測試數據的自動化分析和采集。
Loadrunner測試結果數據存儲在擴展名為.lrr的結果文件集中,并將活動圖的顯示信息和布局設置存儲在擴展名為.lra 的文件集中。可通過Loadrunner 的Analysis 分析模塊訪問測試結果,以統計圖表和統計結果報告的形式展示,主要包括Summary Report 概要報告和Graphs 詳細報告兩部分。
2.1.1 Summary Report 概要報告
Loadrunner 的Summary Report 概要報告主要展示了測試結果集的基本信息(如場景名稱、結果名稱、執行周期、運行時長等)、統計信息概要(如最大運行用戶數、總吞吐量、平均每秒吞吐量、總點擊率、平均每秒點擊率、錯誤數量等)、事務執行情況概要(事務、響應時間的最大值、最小值、平均值、方差、90%響應值,以及事務的通過、失敗、停止等統計情況)、HTTP 響應情況概要等基本信息。
2.1.2 Graphs 詳細報告
Loadrunner 性能測試詳細結果和數據主要通過Graphs 來展示,Graphs 主要包括Vusers、Errors、Transactions、Web Resources、Web Pagediagnostics、Windows Resources、Unix Resources 等分析圖表集。各圖表集包含的主要分析圖表,如表1所示:

表1:主要分析圖表
通常性能測試結果分析和報告撰寫,需要關注的指標包括時間特性、資源利用性及容量等方面的指標。其中時間特性方面的指標項主要包括事務響應時間(平均值、最大值、最小值、90%響應值、方差等)、每秒處理事務數、每秒點擊率、每秒連接數等;資源利用率主要包括Web 資源情況(如Web 組件加載情況和Web 組件大小情況等)、服務器資源使用情況(包括CPU、內存、磁盤、網絡等相關指標)等;容量方面主要包括在線/并發用戶情況、數據量情況等。
在測試結果分析和報告時,如果以上相關指標數據采用手工進行摘錄,一方面容易出差錯,而且出錯后在評審環節也可能難以發現;另一方面,手工摘錄工作量比較大耗時周期較長,不利于提升測試的質量和效率。
Loadrunner通過 Analysis API公開了測試結果數據的訪問接口,可以通過該接口編寫程序來提取測試結果數據,并應用于后續的自動化處理。Loadrunner 的Analysis 的接口訪問是以會話的方式來訪問原始結果數據。此外,Loadrunner 的每一個測試結果均以獨立的一個Access 數據庫保存原始結果(結果名稱.mdb 的形式,執行錯誤信息保存在OUTPUT.MDB 中),因此也可以基于Loadrunner 測試結果的Access 數據庫進行分析和數據采集。本文主要探討主要基于Analysis API 的方式實現數據自動化采集。
Loadrunner Analysis API 核心類Session,每個Session 下可以包括一個或多個run 類,一個run 對象集合對應Loadrunner 的一個性能測試場景結果集。性能測試的詳細結果數據通過run 對象下Graphs 對象進行訪問,如圖1所示。
3.2.1 環境及相關依賴
Analysis API 是基于.NET 的動態鏈接庫,通過該接口訪問性能測試結果數據,需要有.NET Framework2.0 及以上支持,此外需要安裝Loadrunner 軟件(或者至少安裝Analysis 模塊)。如果通過Access 數據庫來實現,則需要安裝數據庫連接驅動。
3.2.2 動態鏈接庫引用
Loadrunner 的性能測試結果訪問接口封裝成Analysis API,編寫程序訪問接口時,需要引用Analysis.Api.dll、Analysis.ApiDL.dll、Analysis.ApiLib.dll、Analysis.ApiSL.dll、Analysis.Utils.dll 等 鏈接庫,可以使用VB 和C#等編程語言來實現訪問和數據提取。
3.2.3 對象命名空間
Analysis API 包含多個命名空間,其中最重要的是Analysis.Api、Analysis.ApiLib 和Analysis.ApiLib.Sla 等,以上命名空間包含了應用程序的主要類:LrAnalysis、Session、Graph、Run 和Log 等,通過該命名空間下的接口就可以訪問性能測試結果數據。
Analysis API 訪問和處理流程:
(1)通過LrAnalysis.Options 設置會話參數選項,包括參數DefaultOptimizationMode 和RunTimeErrors 等;
(2)通過LrAnalysis 的analysisApi.Session.Open(lrfile)接口打開并創建一個會話對象;
(3)通過currentSession.Runs[usedRun]可以訪問當前打開的Loadrunner 性能測試結果數據,例如currentSession.name 為結果名稱、currentSession.Scenario 為場景名稱,通過currentSession.Scripts可訪問該性能場景中執行的測試腳本,通過currentSession.Hosts 可訪問該性能場景中所調用的壓力測試機(Agent)等。
(4)具體各項指標數據通過currentRun.Graphs[graphname]進行,其中graphname 對應著Analysis 中分析圖表名稱。
因考慮到在實際項目中,被測試系統的應用和數據庫服務器大部分可能是linux 或unix 操作系統,服務器資源使用情況的實時監控可采用輕量級監控工具nmon 進行監控。因此,在實現性能測試數據自動化分析和數據采集時,同時實現了對nmon 監控結果的支持。
Loadrunner 性能測試結果分析步驟和流程如下:
(1)創建測試項目,需輸入項目基本信息;
(2)導入性能測試結果(如有nmon 監控結果,對應的nmon監控需放置于Loadrunner 對應的測試結果中);
(3)進行測試數據分析(必要時);
(4)導出測試結果,生成測試報告。
測試結果數據分析主要包括時間特性、資源利用性和容量方面的相關指標,包括不限于并發/在線用戶數、事務響應時間、事務交易數、點擊率、事務執行情況、頁面組件加載情況、頁面組件大小、服務器資源監控情況(CPU利用率、CPU平均等待隊列、內存利用率、剩余內存、內存頁交換率、磁盤使用情況、網絡利用率/傳輸速率)等指標,部分結果分析截圖如圖2所示。

圖2:部分結果分析截圖
通過Analysis API 接口在實現數據分析的基礎上,可按照測評機構和單位的實際需要,定制自動生成結果數據和測試結果報告的模板,直接通過接口把相關的性能指標數據自動化生成,導出word 格式的部分截圖如圖3所示。

圖3:測試結果
(1)時間特性測試結果生成:
本文所論述的基于Analysis API 實現Loadrunner 性能測試數據自動化采用和分析,在實現數據分析基礎上,可以結合測評機構的體系和模板需要,定制個性化的測試結果或測試報告模板,自動采集并生成性能測試所需的結果數據和測試報告,解決了性能測試在數據采集整理和報告編制/評審環節中,工作量大、周期長、數據準確難以保證等問題,提高了性能效率測試工作質量和效率。以一次包括10 個性能測試場景,每個場景均包含3 臺服務器資源監控的性能測試結果采集和生成報告為例,如果手工進行數據摘錄和測試報告編制,花費的時間大概為1-2 天,且評審時也需花費3 個小時的時間,通過本文所述的方法和工具,大概3-5 分鐘就可以生成測試報告,數據準確性得到保證,幾乎不需重復核對,質量和效率提升效果顯著。目前該工具軟件已經試點應用于電網、測評機構和院校的性能測試工作中,反響良好。