Jmeter學習概要

Jmeter學習概要

  1. Jmeter簡介

Apache Jmeter是一個100%的純java桌面應用,用於壓力測試和性能測試。Jmeter最早是爲了測試Tomcat的前身JServ的執行效率而誕生的,主要是針對web的壓力和性能測試,但後來擴展到其他測試領域。從下面的圖中我們可以看到:Jmeter可以用於測試FTP、HTTP、RPC、JUNIT、JMS、LDAP、WebService(Soap) Request以及Mail和JDBC(數據庫壓力測試)

另外,JMeter能夠對應用程序做衰退測試,通過創建帶有斷言的腳本來驗證你的程序返回了你期望的結果。爲了最大限度的靈活性,JMeter允許使用正則表達式創建斷言。在知道如何具體使用之前,先說一下JMeter 的主要測試組件:

1. 測試計劃是使用 JMeter 進行測試的起點,它是其它 JMeter 測試元件的容器。

2. 線程組代表一定數量的併發用戶,它可以用來模擬併發用戶發送請求。實際的請求內容在Sampler中定義,它被線程組包含。

3. 監聽器負責收集測試結果,同時也被告知了結果顯示的方式。

4. 邏輯控制器可以自定義JMeter發送請求的行爲邏輯,它與Sampler結合使用可以模擬複雜的請求序列。

5. 斷言可以用來判斷請求響應的結果是否如用戶所期望的。它可以用來隔離問題域,即在確保功能正確的前提下執行壓力測試。這個限制對於有效的測試是非常有用的。

6. 配置元件維護Sampler需要的配置信息,並根據實際的需要會修改請求的內容。

7. 前置處理器和後置處理器負責在生成請求之前和之後完成工作。前置處理器常常用來修改請求的設置,後置處理器則常常用來處理響應的數據。

8. 定時器負責定義請求之間的延遲間隔。

好了,簡單介紹就到這裏!下面是一些有關Jmeter的學習文檔和資料的網站

Jmeter官方網站:http://jakarta.apache.org/jmeter/

Jmeter中文網站(目前只是部分翻譯):http://www.bonoy.com/jmeter/

  1. Jmeter的安裝與配置
    1. JMeter 的安裝

       JMeter 的安裝非常簡單,從官方網站上下載,解壓之後即可使用。運行命令在%JMETER_HOME%/bin 下,對於 Windows 用戶來說,命令是 jmeter.bat(同時會啓動一個dos窗口顯示一些日誌信息)和jmeterw.cmd,建議從jmeter.bat啓動要更好些,因爲在Jmeter運行的過程中可以在dos窗口看到一些錯誤日誌信息。運行前請檢查JMeter 的文檔,查看是否具備相關的運行條件。對於最新版(即2.2),需要JDK的版本要求是JDK 1.4.2。

    1. Jmeter的配置

       Jmeter的主要配置文件jmeter.properties,需要根據不同的測試目的對配置文件做不同的設置。

       1. #language=de  Jmeter啓動後窗口中所使用的語言,默認情況下該行是被註釋掉的,因爲在Jmeter啓動的時候會根據操作系統的語言設置自行設定。對windows中文操作系統來說在Jmeter啓動後就是中文界面,如果你想設定爲其他語言,將該行註釋去掉,在等號後面設定你想設定的語言。

       2. xml.parser=org.apache.xerces.parsers.SAXParser  xml文件解析器的設定,這個是Jmeter默認的,解析所需要的jar包在%JMETER_HOME%\lib下,你可以設置爲你熟悉的xml文件解析方式,當然首先你要將所需要的jar包拷貝到%JMETER_HOME%\lib目錄下。

       3. SSL configuration  對於數字化校園項目來說,由於使用了數字安全證書,所以在對軟件進行測試前,必須設置此項(下面所指定的java類在%JAVA_HOME%\jre\lib\jsse.jar內,如果你使用的jdk爲1.4.2,那設置好環境變量就可以了,將%JAVA_HOME%\jre\bin加入到環境變量的path中,將%JAVA_HOME%\jre\lib加入到環境變量的classpath中)

ssl.provider=com.sun.net.ssl.internal.ssl.Provider

ssl.pkgs=com.sun.net.ssl.internal.www.protocol

在生成數字安全證書的時候會生成一個.keystore文件,需要在此指定一下

javax.net.ssl.keyStore=H:/tools/jmeter/jakarta-jmeter-2.2/testPlan/configs/.keystore

在生成數字安全證書的時候會有一個密碼,默認爲changeit

#The password to your keystore

javax.net.ssl.keyStorePassword=changeit

最好將下面這行的註釋去掉,這樣如果我們的配置有什麼問題可以在日誌文件中記錄的更清楚些

javax.net.debug=all

       4. #log_level.jmeter=INFO   Jmeter日誌記錄級別,將該行改爲log_level.jmeter=DEBUG這樣可以記錄更加詳細的日誌信息。

       還有一些其他的設置如:CSVRead configuration、WML Parser configuration等在這就不一一詳細說明了(我也還沒搞清楚)。

  1. Jmeter的應用

       下載下來的Jmeter解壓後,裏面有使用幫助文檔(在docs目錄下),還有使用樣例(在printable_docs\demos目錄下),其自帶的測試樣例都很簡單,要想測試複雜的項目還需要自己去摸索。

       Jmeter通常被用於測試web服務的壓力和性能,因此下面將以一個實際的web測試爲例進行詳細講解,裏面會講到變量和正則表達式的使用,相信只要掌握了變量和正則表達式的使用(還有Jmeter自帶的函數也要靈活掌握),再複雜的測試用例或測試腳本都不在話下。

下面以“天津武警醫學院的教學管理系統”爲例來具體講解

A. 編寫測試計劃或測試腳本(後面還會介紹如何利用工具來錄製測試腳本)

1.1 啓動Jmeter,啓動後窗口內顯示的幾乎都式中文,感覺還不錯,然後添加一個線程組,如下

在剛開始編寫測試腳本時,應將線程數設的少一些爲好,如下

然後新建一個文件夾,保存一下測試腳本,如下

1.2 在該線程組裏面添加一個“用戶定義的變量”測試組件,名稱:default variables,變量名與值分別如下

userList          userlist/jwUser.dat[f1] 

userPass          userlist/jwUserPass.dat[f2] 

serverConfig      configs/server.csv[f3] 

在jakarta-jmeter-2.2\bin目錄下新建userlist文件夾,然後在userlist內新建jwUser.dat與jwUserPass.dat文件,然後在這兩個文件中分別寫入登錄系統的用戶名和密碼,注意要每行一個且一一對應,如:我的jwUser.dat文件內容爲

jwadmin

1001300

jwUserPass.dat文件內容爲

123[f4] 

321[f5] 

1.3 在你所保存的測試腳本(如我的H:\tools\jmeter\jakarta-jmeter-2.2\testPlan\ jwgl.jmx)的同級目錄下新建configs文件夾(H:\tools\jmeter\jakarta-jmeter-2.2\testPlan\configs),然後新建server.csv[f6] 文件,並且把在生成證書的時候生成的 .keystore文件也放在這,修改jmeter.properties文件

javax.net.ssl.keyStore=H:/tools/jmeter/jakarta-jmeter-2.2/testPlan/configs/.keystore

server.csv文件內容如下(bkjw.wjyxy.mtn   cas.wjyxy.mtn)

1.4 再加一個“用戶定義的變量”組件,名稱:commandline variables

變量名稱和值分別如下

userList         ${__property(userList,,${userList})}[f7] 

userPass        ${__property(userPass,,${userPass})}

serverConfig     ${__property(serverConfig,,${serverConfig})}

1.5 加入一個“HTTP信息頭管理器”,名稱和值爲User-Agent  Mozilla/4.0 (compatible; MSIE 5.5; Windows 98),這個對於測試uPortal門戶尤其重要

1.6 加入一個“HTTP Cookie 管理器”,這個沒什麼設置,將每次反覆清楚cookies選中即可

1.7 加入一個“僅一次控制器”,然後在“僅一次控制器”的節點下添加“CSV Data Set Config”用於讀取csv文件到變量,filename: ${serverConfig},variable names: jwglHost,casHost,注意該文件讀取的方式是一行一行的讀取的,且可以循環讀取,當然也可以用它來存放我們的登錄用戶名和密碼

1.8 加入一個“http請求默認值”,服務器名稱和ip爲${jwglHost}(注意這裏就是變量的使用方法),這個就是我們在上一步從csv文件讀取出來存放到jwglHost變量中的,協議爲http 如下

1.9 加入一個“僅一次控制器”,並在其下加入一個“用戶參數”組件,名稱:userid,用戶_1:${_StringFromFile(${userList})};名稱:userpass,用戶_1:${_StringFromFile(${userPass})},這裏是從我們上面已經定義的屬性對象中讀取值,爲登錄做準備。

2.0 加一個“簡單控制器”,然後在其下加一個“http請求”,服務器名稱或ip爲${casHost},即cas服務器的地址,這個請求的是cas的登錄頁面,注意協議爲https,方法爲:Post

2.1 在getlt的http請求節點下加一個“正則表達式提取器”,引用名稱:LoginTicket、正則表達式:name="lt" value="(.*?)"、模版:$1$、匹配數字:1。注意此時我們還沒有登錄,之所以要先訪問這個/login的目的式爲了提取出cas登錄頁面裏的<input type="hidden" name="lt" value="LT-1604-fLK9C0s3tVHthNnmzxZn" />中隨機生成的value值,用於下一步的真正登錄,沒有那個值你將永遠無法通過cas認證,如果說表單裏面還有其他隱藏文本域,那也應該取出其值以用於下一步登錄時使用。 那個值是通過正則表達式提取出來的。

2.2 在${casHost}的 http請求下加一“正則表達式提取器”,用於提取登錄後,服務器傳給客戶端的ticket(證書編號),引用名稱:ServiceTicket、正則表達式:ticket=(ST-[0-9]+-.*)",${casHost}的 http請求方法爲POST

 

 

2.3 加一個“http請求”,名稱:jw_menu.jsp、服務器或ip:${jwglHost}、協議:http、,方法爲:Post路徑:/menu.jsp,這就是我真正要測試的web請求。

2.4 加一個“相應斷言”,用於測試是否得到我們想要的menu.jsp頁面,在要測試的模式裏面填寫:歡迎您,這樣如果返回的是menu.jsp且裏面包含“歡迎您”,則說明成功登錄且得到了我們想要的結果。

 

 

2.5 最後再加上監聽器裏面的:第二個圖形結果、用表格查看結果、查看結果樹,將測試結果以不同的形式表示

2.6 到這以後不要忘了註銷我們的登錄,加一個“http請求”, 注意要將這個請求放在所有http請求的最後,路徑:/logout.jsp,因爲我們的註銷代碼寫在/logout.jsp頁面上。

  1. Jmeter的使用總結

A. 當你通過以上步驟後,說明你的測試腳本基本完成,你可以根據你的需要在簡單控制器的後面加上其他http請求,用於測試不同的功能,同時加大併發線程組內的線程個數,然後根據不同的線程個數將測試結果寫入測試報告。

如:我要測試“課程總庫管理”這個功能,那我再加一個“http請求”,名稱:課程總庫管理、路徑:/queryCourseAction.do,因爲這個查詢頁面需要兩個參數:departmentID和queryButton,所以我們要增加兩個同請求一起發送的參數以及參數值,提交給queryCourseAction取處理

B. 還有最重要的一點要說明的是:Jmeter是一個java的桌面軟件,而不是瀏覽器,所以他並不能對返回結果內的js腳本自動自行,這樣我們必須要先修改cas登錄頁面上存在的一個問題,這個問題在goServer.jsp頁面裏面,有下面這麼一段代碼需要修改一下,將裏面用腳本跳轉的功能去掉,而改用jsp腳本(response.sendRedirect(service);)來跳轉,只有這樣,才能夠保證我們在登錄cas後正常跳轉到bkjw.wjyxy.mtn/menu.jsp頁面。否則後面的測試都無法進行

<%

 if (!safari)

 {

        %>

              <SCRIPT LANGUAGE="JavaScript">

              <!--

                     window.location.href="<%=service%>";

              //-->

              </SCRIPT>

        <%

       //response.sendRedirect(service);

 }

 %>

C. 對以web測試毫無疑問最重要的就是如何登錄,爲了不讓大家再走我已經走過的誤區,下面再用一個登錄的例子來說明登錄是怎麼一回事情,下面是我用Jmeter登錄“天津武警醫學院論壇”的實例

1.1 首先有“HTTP請求默認值”,服務器名或ip爲:portal.wjyxy.mtn,“HTTP信息頭管理器”,“ HTTP Cookie 管理器”,“簡單控制器”,兩個“HTTP請求”

 

1.2 對用於登錄的http請求,最重要的地方就是路徑:/mvnforum/mvnforum/loginprocess,loginprocess其實這就是我們在瀏覽器裏的登錄頁面填寫好用戶名和密碼後,提交給loginprocess去處理(服務器端處理登錄的 javabean),所以請求路徑不是login.jsp或其他頁面,而是真正處理登錄的javabean或action,同時提交登錄參數,包括隱藏文本域的值也要一併在下面填寫好後提交。

       我剛開始的時候一直將路徑寫成:mvnforum/mvnforum/login,並填寫好用戶名密碼及隱藏文本域的值後,怎麼也登錄不上,後來查看了登錄頁面的源碼後發現:<form action="loginprocess" method="post" name="submitform">,原來真正處理登錄的是loginprocess,所以當我把路徑改爲mvnforum/mvnforum/loginprocess後馬上就登錄上了。

D. 還有一點,那就是“http請求”的窗口上的“方式”,其中有:GET/POST等值,根據實際情況,通常需要傳參數的都選擇POST方式。

E. Jmeter提供的函數,下面是函數助手窗口,對於每個函數的具體使用可以查Jmeter提供的幫助文檔。


 [f1]用於保存登錄用的用戶名的文件

 [f2]用於保存登錄用的用戶密碼的文件

 [f3]保存服務器域名的文件

 [f4]jwadmin用戶的密碼

 [f5]1001300用戶的密碼

 [f6]這個文件其實可以不要,這裏要這文件主要是爲了後面要講解一種在jmeter中讀取csv文件的方式

 [f7]通過Jmeter提供的函數--property將我們前面定義的文件對象讀取到屬性對象中

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