JMeter從入門到精通

JMeter從入門到精通》之一——開始你的第一個JMeter腳本

JMeter是一款在國外非常流行和受歡迎的開源性能測試工具,像LoadRunner一樣,它也提供了一個利用本地Proxy Server(代理服務器)來錄製生成測試腳本的功能,但是這個功能並不好用。所以在本文中介紹一個更爲常用的方法——使用Badboy錄製生成 JMeter腳本。

簡單的介紹一下BadboyBadboy是一款不錯的Web自動化測試工具,如果你將它用於非商業用途,或者用於商業用途但是安裝Badboy的機器數量不超過5臺,你是不需要爲它支付任何費用的。也許是一種推廣策略,Badboy提供了將Web測試腳本直接導出生成JMeter腳本的功能,並且這個功能非常好用,也非常簡單。你可以跟着下面的試驗步驟來邁出你在開源世界的第一步。

1.      通過Badboy的官方網站下載Badboy的最新版本;

2.      安裝Badboy。安裝過程同一般的Windows應用程序沒有什麼區別,安裝完成後你可以在桌面和Windows開始菜單中看到相應的快捷方式——如果找不到,可以找一下Badboy安裝目錄下的Badboy.exe文件,直接雙擊啓動Badboy

3.      啓動Badboy,你可以看到下面的界面。

在地址欄(圖中紅色方框標註的部分)中輸入你需要錄製的Web應用的URL——這裏我們以http://www.yahoo.com 爲例,並點擊GO 按鈕開始錄製。如果你用過LoadRunner之類的商業工具,對於這個操作一定不會陌生吧^_^

4.      開始錄製後,你可以直接在Badboy內嵌的瀏覽器(主界面的右側)中對被測應用進行操作,所有的操作都會被記錄在主界面左側的編輯窗口中——在這個試驗中,我們在Yahoo的搜索引擎中輸入 JMeter 進行搜索。不過你將看到,錄製下來的腳本並不是一行行的代碼,而是一個個Web對象——這就有點像LoadRunner的VuGen中的Tree View視圖;

5.      錄製完成後,點擊工具欄中的“停止錄製”按鈕,完成腳本的錄製;

6.      選擇“File-> Export to JMeter”菜單,填寫文件名“login_mantis.jmx”,將錄製好腳本導出爲JMeter腳本格式。也可以選擇“File -> Save”菜單保存爲Badboy腳本;

7.      啓動JMeter並打開剛剛生成的測試腳本。

也許你已經急不可待的準備開始嘗試着用JMeter處理你手頭的工作了^_^ 在下面的幾節,我將繼續爲大家介紹如何在 JMeter中完成一個測試場景的設置和JMeter測試結果分析入門,以及如何參數化JMeter腳本。

當然,如果你的動手能力很強,幾分鐘你就可以熟悉這些內容。不過還是請允許我一點點由淺入深的來幫大家完成“JMeter從入門到精通”的過程。我相信在這個過程中你將會瞭解到更多有關性能測試的知識和經驗,甚至包括一些LoadRunner等商業測試工具所無法提供給你的經驗。

 

 

 

理解 JMeter 聚合報告(Aggregate Report

AggregateReport 是 JMeter常用的一個 Listener,中文被翻譯爲“聚合報告”。今天再次有同行問到這個報告中的各項數據表示什麼意思,順便在這裏公佈一下,以備大家查閱。

如果大家都是做Web應用的性能測試,例如只有一個登錄的請求,那麼在Aggregate Report中,會顯示一行數據,共有10個字段,含義分別如下。

Label:每個 JMeter 的 element(例如 HTTP Request)都有一個 Name 屬性,這裏顯示的就是 Name屬性的值

#Samples:表示你這次測試中一共發出了多少個請求,如果模擬10個用戶,每個用戶迭代10次,那麼這裏顯示100

Average:平均響應時間——默認情況下是單個Request 的平均響應時間,當使用了 Transaction Controller 時,也可以以Transaction 爲單位顯示平均響應時間

Median:中位數,也就是 50% 用戶的響應時間

90% Line:90% 用戶的響應時間

Note:關於 50% 和 90% 併發用戶數的含義,請參考下文

http://www.cnblogs.com/jackei/archive/2006/11/11/557972.html

Min:最小響應時間

Max:最大響應時間

Error%:本次測試中出現錯誤的請求的數量/請求的總數

Throughput:吞吐量——默認情況下表示每秒完成的請求數(Requestper Second),當使用了 Transaction Controller 時,也可以表示類似 LoadRunner 的 Transaction perSecond 數

KB/Sec:每秒從服務器端接收到的數據量,相當於LoadRunner中的Throughput/Sec

 

另外,如果大家在使用 JMeter 的過程中遇到問題,建議先參考下面這篇文章

http://www.cnblogs.com/jackei/archive/2006/11/06/551921.html

其他有關 JMeter 和 性能測試的文章請參見下面的鏈接

http://www.cnblogs.com/jackei/archive/2006/11/13/558720.html

 

 

使用 JMeter 分佈式性能測試

作爲一個純JAVA 的GUI應用,JMeter 對於CPU和內存的消耗還是很驚人的,所以當需要模擬數以千計的併發用戶時,使用單臺機器模擬所有的併發用戶就有些力不從心,甚至還會引起JAVA內存溢出的錯誤。不過,JMeter 也可以像 LoadRunner 一樣通過使用多臺機器運行所謂的 Agent 來分擔 Load Generator 自身的壓力,並藉此來獲取更大的併發用戶數。根據 JMeter官方文檔的署名,你需要自己完成這個配置,不過不用擔心,這將非常簡單 ^_^

1.             在所有期望運行 JMeter作爲 Load Generator 的機器上安裝 JMeter,並確定其中一臺機器作爲 Controller,其他的機器作爲 Agent。然後運行所有 Agent 機器上的JMeter-server.bat文件——假定我們使用兩臺機器 192.168.0.1 和 192.168.0.2 作爲Agent;

2.             在Controller 機器的 JMeter安裝目錄下找到 bin 目錄,再找到 JMeter.properties這個文件,使用記事本或者其他文字編輯工具打開它;

3.             在打開的文件中查找“remote_hosts=”這個字符串,你可以找到這樣一行“remote_hosts=127.0.0.1”。其中的127.0..0.1 表示運行 JMeterAgent 的機器,這裏需要修改爲“remote_hosts=192.168.0.1:1664,192.168.0.2:1664”——其中的1664 爲 JMeter 的Controller 和 Agent 之間進行通訊的默認 RMI 端口號;

4.             保存文件,並重新啓動 Controller 機器上的 JMeter.bat,並進入Run -> Remote Start 菜單項。看到啥了?^_^

 

 

使用命令行方式運行 JMeter 腳本

2.4.3 Non-GUI Mode (Command Line mode)

For non-interactive testing, you may choose to run JMeter without the GUI. To do so, use the following command options

-n This specifies JMeter is to run in non-gui mode

-t [name of JMX file that contains the Test Plan].

-l [name of JTL file to log sample results to].

-r Run all remote servers specified in JMeter.properties (or remote servers specified on command line by overriding properties)

The script also lets you specify the optional firewall/proxy server information:

-H [proxy server hostname or ip address]

-P [proxy server port]

Example : JMeter -n -t my_test.jmx -l log.jtl -H my.proxy.server -P 8000

上面這段說明來自 JMeter的官方用戶手冊。其中提到了使用命令行方式運行 JMeter 腳本的方法。只有幾個簡單的參數,很直觀,用起來也很方便。好處是可以節省一些系統資源。

今天嘗試 300 個虛擬用戶連續運行 5 分鐘時——使用 GUI 方式,發現開始運行後不久 UI 就失去了響應,並提示一個有關  AWT 的錯誤,最終只能把 Java 進程結束掉。但是使用命令行方式時卻很穩定。
不過當在命令行方式下嘗試 500 個虛擬用戶連續運行 5 分鐘時,JMeter 拋出了一個 Out of Memory 的異常並退出了進程。

Note:
1.執行命令前要檢查當前目錄是否是%JMeter_Home%\bin 目錄;
2.如果 JMeter腳本不在當前目錄,需要指定完整的路徑;如果要把執行的結果保存在其他地方也要指定完整的路徑。

 

 

 

如何解決 JMeter 通過 JDBC 訪問 Oracle MySQL 的問題 (留言中有 Test Plan 實例下載)

 

JMeter的手冊中描述瞭如何訪問 MySQL,但是沒有說明如何訪問 Oracle。對於沒有 Java 應用開發經驗和對 Oracle 不是特別熟悉的朋友,可以參考這篇文章來簡單、快速的配置好 JMeter 中的 JDBC 連接和 JDBC Request。

 

步驟:

1.  新建一個 Thread Group;

2.  新增 JDBC Connection Configuration;

3.  點擊新增的 JDBC Connection Configuration ,需要修改的參數包括:

· Variable Name:可以先填一個 Oracle,等會解釋;

· Database URL:jdbc:oracle:thin:@{host_IP_or_machine_name}:{Oracle 監聽器監聽的端口}:{你的Oracle實例的名字}  ——大家要注意,“{ }” 大括號 只是我用來說明用的,在配置 JMeter時,請將 “{ }” 大括號去掉 ^_^

· JDBC Driver class:oracle.jdbc.driver.OracleDriver

· Username:訪問上面Oracle實例的用戶名

· Password:對應的密碼

0.   新增一個 JDBC Request,需要修改的參數包括:

· Variable Name:和上面的 JDBC Connection Configuration填寫同樣的內容。這裏表示 JDBC Connection Configuration建立一個名爲Oracle 的連接池,之後其它的JDBC Request都共用這個連接池;

· Query:select * from table_name 。 這裏建議打開你的數據查詢工具,輸入一條SQL查詢語句,保證可以執行看到結果的,然後copy 過來;

0.   新增一個View Results Tree;

0.   點擊 Run,查看結果。可以在Response data tab 看到響應的返回結果。

 

注意事項:

1.  執行時提示:No Suitable Driver。

在電腦上搜索一下 classes12.jar 這個文件,然後copy到JMeter的Lib目錄下。如果找不到classes12.jar這個文件,就找找classes12.zip文件,然後把擴展名改爲jar;

2.  執行時提示:ORA-00911: invalid character。

確保你在JDBC Request裏面的Query中輸入的SQL語句是正確的。

 

JMeter 用戶手冊中關於配置通過JDBC對數據庫性能進行測試的部分如下:

http://jakarta.apache.org/jmeter/usermanual/build-db-test-plan.html

 

另外,我做了兩個 Test Plan,一個是 for Oracle 的,一個是 for MySQL 的,你可以點擊下面的鏈接下載。

 

JMeter Test Plan for Oracle

JMeter Test Plan for MySQL

MySQL JDBCDriver (下載後需要自己把擴展名改爲 .jar 然後放到 JMeter 的 lib 目錄下)

 

 

 

JMeter是Apache組織的開放源代碼項目,它是功能和性能測試的工具,100%的用java實現,最新的版本是1.9.1,大家可以到http://jakarta.apache.org/jmeter/index.html下載源代碼和查看相關文檔。

1 JMeter作用領域

JMeter 可以用於測試靜態或者動態資源的性能(文件、Servlets、Perl腳本、java對象、數據庫和查詢、ftp服務器或者其他的資源)。JMeter 用於模擬在服務器、網絡或者其他對象上附加高負載以測試他們提供服務的受壓能力,或者分析他們提供的服務在不同負載條件下的總性能情況。你可以用 JMeter提供的圖形化界面分析性能指標或者在高負載情況下測試服務器/腳本/對象的行爲。

2 使用JMeter測試Web應用

接下來的章節裏,作者將詳細的演示如何使用JMeter來測試Web應用的完整過程。

2.1 測試環境

作者使用了Tomcat作爲Web服務器進行測試,被測試的內容是一個jsp文件和一個servlet,jsp文件調用JavaBean、打印相關信息,servlet接受用戶參數、調用javabean、輸出相關信息。詳細的內容請參考作者提供的JMeter.war的內容。

2.2 安裝啓動JMeter

大家可以到通過http://apache.linuxforum.net/dist/jakarta/jmeter/binaries/jakarta-jmeter-1.9.1.zip下載JMeter的release版本,然後將下載的.zip文件解壓縮到C:/JMeter(後面的文章中將使用%JMeter%來引用這個目錄)目錄下。現在,請使用%JMeter%/bin下面的jmeter.bat批處理文件來啓動JMeter的可視化界面,下面的工作都將在這個可視化界面界面上進行操作。下面的圖片是JMeter的可視化界面的屏幕截圖。

圖一: JMeter打開時的屏幕截圖

2.3 建立測試計劃(Test Plan)

測試計劃描述了執行測試過程中JMeter的執行過程和步驟,一個完整的測試計劃包括一個或者多個線程組(Thread Groups)、邏輯控制(Logic Controller)、實例產生控制器(Sample Generating Controllers)、偵聽器(Listener)、定時器(Timer)、比較(Assertions)、配置元素(Config Elements)。打開JMeter時,它已經建立一個默認的測試計劃,一個JMeter應用的實例只能建立或者打開一個測試計劃。現在我們開始填充一個測試計劃的內容,這個測試計劃向一個jsp文件和一個servlet發出請求,我們需要JMeter模擬五個請求者(也就是五個線程),每個請求者連續請求兩次,下面的章節介紹了詳細的操作步驟。

2.4 增加負載信息設置

這一步,我們將向測試計劃中增加相關負載設置,是Jmeter知道我們需要模擬五個請求者,每個請求者在測試過程中連續請求兩次。詳細步驟如下:

1. 選中可視化界面中左邊樹的Test Plan節點,單擊右鍵,選擇Add'Thread Group,界面右邊將會出現他的設置信息框。

2. Thread Group有三個和負載信息相關的參數:

Number of Threads: 設置發送請求的用戶數目

Ramp-up period: 每個請求發生的總時間間隔,單位是秒。比如你的請求數目是5,而這個參數是10,那麼每個請求之間的間隔就是10/5,也就是2秒

Loop Count: 請求發生的重複次數,如果選擇後面的forever(默認),那麼 請求將一直繼續,如果不選擇forever,而在輸入框中輸入數字,那麼請求將重複指定的次數,如果輸入0,那麼請求將執行一次。

根據我們演示例子的設計,我們應該將Number ofThreads設置爲5,Ramp-up period設置爲0(也就是同時併發請求),不選中forever,在Loop Count後面的輸入框中輸入2,設置後的屏幕截圖如下:

圖二:設置好參數的Thread Group。

2.5 增加默認Http屬性(可選)

實際的測試工作往往是針對同一個服務器上Web應用展開的,所以Jmeter提供了這樣一種設置, 在默認Http屬性設置需要被測試服務器的相關屬性,以後的http請求設置中就可以忽略這些相同參數的設置,減少設置參數錄入的時間。我們這裏將採用這種屬性。你可以通過下面的步驟來設置默認http屬性:

1. 選中可視化界面中左邊樹的Test Plan節點,單擊右鍵,選擇Add'config element'httprequest defaults,界面右邊將會出現他的設置信息框。

2. 默認http屬性的主要參數說明如下:

protocal:發送測試請求時使用的協議

server name or ip:被測試服務器的ip地址或者名字

path: 默認的起始位置。比如將path設置爲/jmeter,那麼所有的http請求的url中都將增加/jmeter路徑。

port number: 服務器提供服務的端口號

我們的測試計劃將針對本機的Web服務器上的Web應用進行測試,所以protocal應該是http,ip使用localhost,因爲這個web應用發佈的context路徑是/jmeter,所以這裏的path設置爲/jmeter,因爲使用Tomcat服務器,所以port number是8080。設置後的屏幕截圖如下:

圖三: 測試計劃中使用的默認Http參數

2.6 增加Http請求

現在我們需要增加http請求了,他也是我們測試的內容主體部分。你可以通過下面的步驟來增加性的http請求:

1. 選中可視化界面中左邊樹的Thread Group節點,單擊右鍵,選擇Add'sampler'httprequest,界面右邊將會出現他的設置信息框。

2. 他的參數和2.5中介紹的http屬性差不多,增加的屬性中有發送http時方法的選擇,你可以選擇爲get或者post。

我們現在增加兩個http 請求,因爲我們設置了默認的http屬性,所以和默認http屬性中相同的屬性不再重複設置。設置後的屏幕截圖如下:

圖四:設置好的jsp測試請求

圖五:設置好的Servlet測試請求(帶參數)

2.7 增加Listener

增加listener是爲了記錄測試信息並且可以使用Jmeter提供的可視化界面查看測試結果,裏面有好幾種結果分析方式可供選擇,你可以根據自己習慣的分析方式選擇不同的結果顯示方式,我們這裏使用表格的形式來查看和分析測試結果。你可以通過下面的步驟來增加listener:

1. 選中可視化界面中左邊樹的Test Plan節點,單擊右鍵,選擇Add'listener'view resultin table,界面右邊將會出現他的設置信息和結果顯示框。

2. 你可以設置界面上面的filename屬性設置將測試結果保存到某個文件中界面下面將使用表格顯示測試結果,表格的第一列sampleno顯示請求執行的順序和編號,url顯示請求發送的目標,sample-ms列顯示這個請求完成耗費的時間,最後的success列顯示改請求是否成功執行。界面的最下面你還可以看到一些統計信息,最關心的應該是Average吧,也就是相應的平均時間。

2.8 開始執行測試計劃

現在你可以通過單擊菜單欄run -> Start開始執行測試計劃了。下面這兩個圖是作者第一次、第二次執行該測試計劃的結果圖:

圖六:第一次執行後的結果顯示

圖七:第二次執行的結果顯示

大家可以看到第一次執行時的幾個大時間值均來自於jsprequest,這可以通過下面的理由進行解釋:jsp執行前都需要被編譯成.class文件。所以第二次的結果纔是正常的結果。

3 總結

JMeter用於進行供能或者性能測試,通過使用JMeter提供的供能,我們可以可視化的制定測試計劃:包括規定使用什麼樣的負載、測試什麼內容、傳入的參數,同時,他提供了好多種圖形化的測試結果顯示方式,使我們能夠簡單的開始測試工作和分析測試結果。

本文中,作者根據自己的使用經驗,詳細演示瞭如何使用JMeter來進行Web測試的全部過程,簡單的介紹了JMeter提供測試結果的圖形化顯示界面中相關參數的含義。希望能夠幫助大家學會使用JMeter的基本知識,同時,大家可以參考這個過程和JMeter的幫助文檔來實現對java對象、數據庫等的測試過程。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章