最近在使用loadrunner11測試Java 接口的併發性能,記錄本身從小白到勉強作出合理的結果的過程,以便有須要的朋友參照,歡迎挑錯。html
1.loadrunner11介紹java
LoadRunner,是一種預測系統行爲和性能的負載測試工具。經過以模擬上千萬用戶實施併發負載及實時性能監測的方式來確認和查找問題,LoadRunner可以對整個企業架構進行測試。企業使用LoadRunner能最大限度地縮短測試時間,優化性能和加速應用系統的發佈週期。 LoadRunner可適用於各類體系架構的自動負載測試,能預測系統行爲並評估系統性能。-百度百科。web
loadrunner是惠普公司開發的測試工具,目前有社區版能夠免費無限期試用。下載註冊方式參見:http://www.oschina.net/news/59345/loadrunner-free數據庫
本人是測試小白,目前瞭解到的測試工具:api
①loadrunner 作性能測試,併發性能、負載測試。收費版功能強大,可以模擬各類狀況。服務器
② Apache JMeter是Apache組織開發的基於Java的壓力測試工具,用於測試靜態和動態資源例如靜態文件、Java 小服務程序、CGI 腳本、Java 對象、 數據庫, FTP 服務器, 等等。JMeter 能夠用於對服務器、網絡或對象模擬巨大的負載,來在不一樣壓力類別下測試它們的 強度和分析總體性能。開源免費。網絡
③JUnit 單元測試架構
我選擇loadrunner11,是由於服務器上有現成的,不用本身安裝,直接拿來用。此處省略安裝步驟……併發
2.測試Java接口工具
2.1編寫測試腳本
打開loadrunner,首先是建立測試腳本,loadrunner有很強大的錄製腳本功能。能夠錄製模擬web頁面登錄、點擊等複雜的腳本。
我要測試的是Java 接口,須要建立Java Vuser。具體步驟:Create/Edit Scripts—>File—>New—>New Single Protocol Script—>Java Vuser
在action中編寫你的Java代碼。下面是我寫的腳本:
import lrapi.lr; public class Actions{ public int init() throws Throwable { return 0; }//end of init public int action() throws Throwable { try{ CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost("http://www.xx.com/detect"); String text = "我愛這藍色的海楊。"; String type = "字詞;"; List<NameValuePair> parameters = new ArrayList<NameValuePair>(); parameters.add(new BasicNameValuePair("text", text)); parameters.add(new BasicNameValuePair("type", type)); HttpEntity entity1 = new UrlEncodedFormEntity(parameters, "utf-8"); httpPost.setEntity(entity1); lr.rendezvous("point");//設置集合點 lr.start_transaction("auto");//設置事務開始點 HttpResponse response = httpClient.execute(httpPost); lr.end_transaction("auto", lr.AUTO);//設置事務結束點 StatusLine statusLine = response.getStatusLine(); int code = statusLine.getStatusCode(); if (code == 200) { HttpEntity entity2 = response.getEntity(); System.out.println(EntityUtils.toString(entity2, "utf-8")); } }catch(IOException e){ e.printStackTrace(); } return 0; }//end of action public int end() throws Throwable { return 0; }//end of end }
保存腳本,運行一下腳本(Vuser—>Run),測試一下是否有錯誤。
解釋幾個概念:
①集合點
用以同步虛擬用戶,以便剛好在同一時刻執行任務。集合點更多用於混合併發,只是爲了嚴格意義所謂的併發二設置。以爲理解困難的請參照:http://www.cnblogs.com/Uther/p/5301958.html。設置集合點方式,直接寫代碼或者Insert—>Rendezvous—>輸入Rendezvous Name
②事務
loadrunner運行到事務start時開始計時,運行到end時結束計時。這個時間loadrunner會記錄下來,並幫你分析平均響應時間等一些特徵。
事務是LoadRunner度量系統性能指標的惟一手段,事務用來衡量系統的響應時間。我以前在腳本代碼中計算響應時間,寫到日誌中。可是日誌分析起來十分麻煩,寫日誌的過程涉及Java多併發,不如loadrunner事務簡單方便準確。瞭解更多請參照:http://blog.csdn.net/liuyuzhu111/article/details/49803813
設置事務方式,直接寫代碼或者Insert—>Start Transaction/End Transaction
2.2 運行負載測試
Run Load Tests—>選擇剛纔編寫的測試腳本—>選擇Manual Scenario 手動場景
設置完場景以後Run便可。注意點:
在Global Schedule中設置Vuser個數,也就是併發數。
因爲我測試的接口比較簡單,只添加一個組。多個組時設置Vuser個數及運行原理目前沒搞懂,等有空繼續學習。
3.記錄和分析結果數據
運行結束後,Results—>Analyze Result
4.編寫測試報告
我認爲併發性能須要考慮兩點:①在程序不崩潰的狀況下,可承受的最大併發數②在某一併發下,性能最優。
測試1-1000併發下,5min成功處理的請求數來衡量性能。
測試總數據量爲1w條數據,在1-1000併發下,控制迭代次數(即處理完1w條數據),用耗時來衡量性能。