Apache JMeter是可以對利用HTTP或FTP服務器的應用程序進行測試的工具。它是基于Java的,通過所提供的API它還具有高度可擴展性。典型的JMeter測試包括創建循環和線程組。循環使用預設的延遲來模擬對服務器的連續請求。線程組是為模擬并發負載而設計的。JMeter提供了用戶界面。它還公開了API,用戶可以從Java應用程序來運行基于JMeter的測試。為了在JMeter中創建負載測試,需要構建測試計劃。在實際操作中,Jmeter需要執行一系列的操作。最簡單的測試計劃通常包括下列元件:
線程組——這些元件用于指定運行的線程數和等候周期。每個線程模擬一個用戶,而等候周期用于指定創建全部線程的時間。例如,線程數為5,等候時間為10秒,則創建每個線程之間的時間間隔為2秒。循環數定義了線程的運行時間。使用調度器,還可以設置運行的起始時間。
取樣器——對于服務器HTTP、FTP或LDAP請求,這些元件是可配置請求。該教程僅側重于Web Services請求。
監聽器——這些元件用于請求數據的后期處理。例如,可以將數據保存到文件或用圖表來說明結果。此時JMeter圖表并沒有提供許多配置選項;然而它是可擴展的,它始終可以添加額外的可視化效果或數據處理模塊。
Apache JMeter網站給出了關于可用元件的詳細說明。在某些情況下,如果可用元件不適合特定的測試,開發人員可通過在安裝Jmeter的\lib\ext\目錄中放置jar文件來編寫他/她自己的腳本或Java類,并將其嵌入測試計劃。
本文中我們使用的是版本是JMeter 2.1。從 Web 站點 下載可執行二進制文件,將其解壓縮,然后應用程序即可在Windows或Unix平臺中使用。如果是在Windows操作系統中工作,要轉到bin文件夾用jmeter.bat 或jmeterw.bat啟動應用程序。初始用戶界面如圖1所示。
性能測試實例 src="http://www.k11sc111.com/attachments/2008/01/8_200801141050261.jpg">
圖1:啟動Apache JMeter
創建負載測試
使用Jmeter的負載測試功能,可以在服務器上產生高負載并確定其容量和限制。注意:若要使用Web services樣本,需要有可用的mail.jar和activation.jar,它們可從Sun Microsystems中獲。ㄕ垍㈤喯旅娴逆溄樱。由于授權限制,Apache沒有分發這些庫。下載這兩個jar文件之后,將它們放入Java classpath或安裝Jmeter的lib目錄中。
圖2:創建線程組和基本Web Services測試計劃
現在,右鍵單擊Test Plan并添加Thread Group和Loop Controller。我們使用這兩個元件來設置模擬的并發用戶數和測試持續時間。在樹狀結構的Loop Controller下面,添加“WebService (SOAP) Request”和Graph,如圖2所示。如果不能向測試計劃添加WebService請求,則可能是路徑中沒有mail.jar或activation.jar。
鍵入線程數、等候周期和循環數。在本教程中我們分別使用5、10和100。將循環控制器計數設置為1。如果配置了Web Services的WebLogic Server仍然沒有運行,請手動啟動它或從WebLogic Workshop中啟動。
配置負載測試
如圖3所示,我們需要對發送到服務器的SOAP請求參數進行設置。如果指向WSDL文件的鏈接(URL)可用,將該鏈接粘貼到WSDL URL字段并單擊Load WSDL?捎玫姆椒▽@示在Web Methods組合框中。接下來,需要單擊Configure以便填充Server Name或IP、Port Number、Path和SOAPAction。
圖3:WebService(SOAP)請求對話框(單擊圖像查看完整尺寸的屏幕截圖)
如果沒有可用的WSDL鏈接,也可以手動鍵入服務器名稱、端口號、路徑和SOAP操作的值。最后一步,在SOAP/XML-RPC Data區域填寫SOAP請求。用戶也可以通過SOAP XML Data選項用File從文件中加載。
輸入Web Services請求對話框中的所有字段之后,單擊Ctrl+S保存JMeter項目。為了使數據可視化,我們添加了圖表元件“Graph results”和“Spline Visualizer”。此外,我們也可以通過添加“Save responses to a file”元件將響應發送到文件;這在檢查SOAP響應錯誤時很有用。為了模擬更真實的客戶端請求順序,我們在樹中插入了定時器元件——“Gaussian Random timer”。執行該操作之后,客戶端的請求的分布更加混亂,將會以隨機方式而不是以相等的時間間隔來點擊服務器。我們將Gaussian隨機時間設置為偏離100ms,恒定延遲偏移量為300ms.
運行負載測試
用戶可以通過單擊Ctrl+R運行負載測試,或者從菜單中選擇Run并單擊Start運行負載測試。單擊圖形元件,將會看到圖表被填充,數據代表對服務器的請求,如圖4至6所示。
圖4:說明測試結果的圖表。線程數=5,等候時間=10,循環數=100。循環控制器設置為1。
我們選擇在圖表中顯示三個參數——吞吐量(綠線)、中間值(紫線)和平均值(藍線)。我們對測試參數進行修改。為了模擬服務器上的較高負載,我們將線程數提高到10和50并比較服務器的響應時間。再次單擊Start并觀查圖表中顯示的結果;參見圖5和圖6。
圖5:說明測試結果的圖表。線程數=50,等候時間=5,循環數=20,循環控制器設置為1。
圖表底部參數的含義如下:
吞吐量是服務器每分鐘處理的請求數。
平均值是總運行時間除以發送到服務器的請求數。
中間值是代表時間的數字,有一半的服務器響應時間低于該值而另一半高于該值。
偏離表示服務器響應時間變化、離散程度測量值的大小,或者,換句話說,就是數據的分布。
最后的樣本就是最后完成的請求。
只要觀察這三次運行及它們的相應圖表,我們就可以得到下列有價值的結果:
響應時間很明顯地隨著線程的增加而增加。若要繼續進行測試,我們可以更改線程數、等候周期和循環數。注意:我們沒有更改或調整服務器的配置。WebLogic Server 9.0中有一個可自動配置的線程池,其配置范圍受到限制(請參閱Naresh Revanuru撰寫的 Workload Management in WebLogic Server 9.0 ,Dev2Dev),上表說明客戶端數量的增長對服務器響應時間的影響是非線性的。實際上,將這個數字提高兩倍或十倍不會產生明顯的影響!然而,使用接近或超過默認服務器限制的線程數來運行同一個試驗時應引起注意。為了檢驗從服務器收到的響應是真實的SOAP響應而不是HTTP錯誤,我們觀察下列輸出文件的內容。這是符合上面要求的SOAP響應:
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<m:calculateAreaResponse xmlns:m="http://myservice">
<m:return>12</m:return>
</m:calculateAreaResponse>
</soapenv:Body>
</soapenv:Envelope>
為了使測試結果更加可視化,向計劃中添加Spline Visualizer,它緊靠著Graph Results。Spline Visualizer提供了關于所有樣本次數的視圖。它用分段插入功能繪制出一條連續的線,在繪制時跨越10個點,每個點代表10﹪的樣本。在樣條圖表中用直線取代連接點,提供了基于多項式近似算法的平滑分布視圖。結果如圖7所示
圖6:使用Spline Visualizer說明與圖6相同測試結果的圖表(單擊圖像查看完整尺寸的屏幕截圖)
Multiple JMeters
JMeter還具有一項十分有用的Remote Start功能,它允許用戶從多臺機器啟動JMeter測試?蛻舳酥鳈C地址可以輸入到位于bin文件夾下的“jmeter.properties”文件中。找到remote_hosts屬性并在那里添加遠程主機名稱,使用逗號進行分隔。重新啟動Jmeter,在Run菜單中單擊Remote Start或Remote Start All。某些Web和應用程序服務器可連續處理同一個IP地址的多個請求以及并行處理不同IP地址的請求,因此,對于請求來自不同的機器或將測試負載分布到幾個客戶端顯得十分關鍵的情況,可以使用該選項來執行操作。
文章來源于領測軟件測試網 http://www.k11sc111.com/