LoadRunner使用入門 進行Webservice負載測試
1.什么是LoadRunner
LoadRunner是HP公司的一款付費工具,該工具是一種預測系統行為和性能的負載測試工具。通過模擬上千萬用戶實施并發負載來確認和查找問題。
2.什么是負載測試
通過測試系統在資源超負荷的情況下的表現,以發現設計上面的錯誤或驗證系統的負載能力。
負載測試的目標是確定并保證系統在超出最大預期工作量的情況下仍能正常運行,還能評估系統的性能特征。
下面介紹一下關于負載測試的幾個基本概念:
2.1吞吐率:服務器并發處理能力的量化描述(單位reqs/s),單位時間內處理的請求數。
2.2并發連接數:某一個時間點允許最大的請求數量,這個常用來衡量系統的并發處理請求的能力,應該區分與下面的并發用戶數。
2.3并發用戶數:一個用戶可能會產生多個并發連接,例如IE8目前支持6個并發連接。
2.4用戶請求平均時間:大量用戶請求從發起到接收到處理結果的一個平均時間,在web頁面默認不超過3秒是最佳的用戶體念。
2.5服務器平均處理請求時間:處理完成一個請求所用的平均時間,這個指標可用來衡量業務邏輯復雜度和機器的性能指標。
3.使用LoadRunner進行負載測試詳解
3.1負載測試目標
在做任何事情的時候,都應該三思而后行,明確要達到的目標。然后計劃一步一步的達到所定的目標。同樣在測試初期我們應該明確定義需要達到的測試目標,例如:我們現在要測試一個調用人力資源數據的WebService接口,我們的重點測試規定時間長度的接口并發處理能力,且接口的單次調用時間不超過3秒,在最大并發用戶80最小并發用戶20平均并發用戶40的情況下進行30分鐘的接口調,預計總調用次數10000次,用戶平均請求時間不超過5秒。
怎樣定義以上測試目標的呢?第一、寫一個腳本順序多次調用接口獲得一個平均單次調用時間,且這個時間作為基礎時間。第二、最大并發用戶、最小并發用戶和平均并發用戶來自對原有系統的分析,發現人力資源接口在公司中被大量其他系統所訪問經過分析和調查得出最大并發用戶80最小并發用戶20平均并發用戶40的結果。第三、調用次數10000次如何得來,根據設置的3個請求源,分別設置這3個請求開始時間和結束事件計算得來的,如A請求源從0~20分鐘并發用戶訪問數為20,B請求源并發數為30從10分鐘~25分鐘,C請求源從15分鐘至30分鐘,并發用戶數為30.
3.2創建負載測試腳本
腳本是用來運行需要測試對象的主要力量。
腳本主要分了3個部分vuser_init和Action和vuser_end這三個部分,vuser_init 是虛擬用戶創建的函數,vuser_end是運行結束后銷毀虛擬用戶的函數,Action是主要的代碼運行測試的部分。
Action可以建立多個,每一個Action都負責各自的事情。
Action() { <span style="white-space:pre"> </span>//輸入字符串 char input[500]="command="; //日志記錄地址 char *address="D:\\LoadRunnerWorkSpace\\RunLog\\log.log"; <span style="white-space:pre"> </span>long filename;//定義存儲文件指針的變量 //輸入參數,進行了參數化,可以進行配置 char *cmd = lr_eval_string("{InputParam}"); //輸出參數 char *out = ""; |
lr_start_transaction("init"); //定義初始化事務 strcat(input,cmd); lr_end_transaction("init", LR_AUTO);//結束初始化事務 lr_rendezvous("beginaction");//事務集結點 lr_start_transaction("call");//初始化訪問接口的事務 web_service_call( "StepName=ExecuteCommand_102", "SOAPMethod=Test|TestSoap|ExecuteCommand", "ResponseParam=response", "Service=Test", "ExpectedResponse=SoapResult", "Snapshot=t1397177849.inf", BEGIN_ARGUMENTS, input, END_ARGUMENTS, BEGIN_RESULT, "ExecuteCommandResult=outPutParams", END_RESULT, LAST); lr_end_transaction("call", LR_AUTO);//結束訪問接口事務 lr_start_transaction("log");//初始化記錄日志事務 //獲取輸入值 out = lr_eval_string("{outPutParams}"); //輸出信息 lr_output_message("調用日志|Cmd=%s|Re=%s\r\n",cmd,out); //寫自定義日志文件 if ((filename=fopen(address,"a+"))==NULL)//打開文件 { lr_error_message("can not open this file,address=%s",address); return -1; } fprintf(filename,"調用日志|Cmd=%s|Re=%s\r\n",cmd,out); lr_end_transaction("log", LR_AUTO);//結束訪問接口事務 lr_start_transaction("interval"); lr_think_time(0.1); //定義思考時間,思考時間和模擬程序對業務處理事件有些類似 lr_end_transaction("interval", LR_AUTO); return 0; } |
創建完成腳本之后單次執行該接口查看action程序是否正確,能夠正常運行。
如果能夠正常運行,進行下一步操作。
3.3執行負載測試(Run Load Tests)
在執行之前(Design)中對我的測試目標的3個請求源進行配置,創建相應的請求場景,這個配置可以在(Interactive Schedule Graph)查看相應請求場景。
配置好之后在(Run)點擊Start scenario。
經過漫長的等待測試運行完畢,系統自己生成響應的測試結果,泡杯茶小酌一杯呵呵。
3.4執行測試結果的分析(Analyze Load Tests)
導入生成的res1文件,系統會自動生成出相應的測試報表。在Analysis Summary中就可以看出整體的測試結果。
還可以通過查看Running Vusers的情況了解整理的并發訪問情況。
查看Hits per Second,查看每秒的請求數量的走勢。
查看Throughput,可以查看整個壓力測試過程中處理數據的吞吐量情況,是否達到設計的要求。
查看Transaction Summary,查看整個壓力測試的所處理的事務的匯總統計。
查看Average Transaction Response Time ,可以查看整個Action中所有事務處理的時間走勢。
4.通過上面的測試結果我們可以判定我們的測試是否滿足要求
不要迷信性能測試,所有的性能“系統的性能不是測試測試出來的,而是系統設計出來的。”
LoadRunner能做系統程序的性能測試,在一些大型系統中,可能對系統測試要分為多個目標多個維度,要對硬件架構進行性能測試,對系統進行性能測試,對網絡進行性能測試等等多個維度。
性能測試的目的有兩方面,第一方面是測試系統是否滿足設計要求。第二方面發現系統的瓶頸,為系統優化提出修改建議。
posted on 2014-04-25 10:08 順其自然EVO 閱讀(569) 評論(0) 編輯 收藏 所屬分類: 測試學習專欄 、性能測試