Apache JMeter( http://jakarta.apache.org/jmeter/ )是來自 Apache Jakarta 項目的一個壓力測試工具, 目前版本2.0.3, JMeter 支持 HTTP, FTP, SOAP/XML-RPC, JDBC 等多種目標的壓力測試(參見下圖).
關(guān)于 JMeter 的一般使用在它的官方主頁和其它網(wǎng)站可以搜索到不少文章, 但是很少看到如何使用一些動態(tài)內(nèi)容(比如在 HTTP 請求中使用變量作為參數(shù))的文章, 近因為工作需要, 在這方面做了一些摸索, 總結(jié)如下.
0.測試項目概述
為了嘗試如何使用變量, 我們首先需要建立一個測試項目, 在這里使用了 Buffalo (一種 AJAX 技術(shù), 詳細資料參見http://www.amowa.net/buffalo/index.html ), 或者可以看一下我下載的這個文件(att:在 JMeter 壓力測試工具中使用變量.Buffalo-info.zip)中的說明和例子. 目前 Buffalo 還不是很穩(wěn)定, 但是建立一個測試環(huán)境已經(jīng)足夠了, 而且很方便.
我們建立的這個例子叫做 "buffalo-jmeter", 將這個壓縮文件(att:在 JMeter 壓力測試工具中使用變量.buffalo-jmeter.zip)中的 buffalo-jmeter.war 文件復(fù)制到 Tomcat(我用的是 Tomcat 5.0.30) 的 webapps 目錄下, 待 Tomcat 自動發(fā)布完成之后可以通過 http://localhost:8080/buffalo-jmeter/ (假設(shè)是發(fā)布在本地的Tomcat上) 訪問測試頁面(如下圖).
在這個例子中我們假設(shè)一個業(yè)務(wù): 首先通過 getToken() 獲得一個憑證, 然后通過這個憑證使用 getOrder() 去申請一個訂單, 憑證上存在時間記錄, 如果超過設(shè)定的時間(例子中是10秒)后這個憑證失效而無法用于申請訂單了(在上圖中的對話框正說明了這種情形).
1.測試中遇到的問題
首先我們需要知道 Buffalo 其實是一種 XML-RPC 技術(shù), 所以我們可以使用 JMeter 的 SOAP/XML-RPC Request 這個 Sampler 進行測試, 但是為了方便快捷進行測試, 以下兩個問題需要解決:
如果測試服務(wù)器發(fā)生變化, 如何方便的一次性改變所有請求的 URL 地址;
如上一節(jié)所述, 10秒鐘后憑證會失效, 因此我們在測試 getOrder() 的時候不能輸入固定的憑證號, 應(yīng)該每10秒左右獲取一個新的憑證, 這樣操作的難點在于如何自動讓 JMeter 得到新獲得的憑證號并應(yīng)用到 getOrder() 請求中.
2.靜態(tài)變量(用戶定義的變量)
JMeter 允許對一個測試計劃(*.jmx)設(shè)置用戶定義的變量, 因此我們可以把象 URL 等需要統(tǒng)一修改的值作為變量定義起來(如下圖);