posts - 97,  comments - 5,  trackbacks - 0
          @import url(http://www.aygfsteel.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
          出于學(xué)習(xí)熱情,翻譯總結(jié)Emily H. Halili的《Apache JMeter》一書的部分內(nèi)容。《轉(zhuǎn)載》

           

          JMeter的簡介

          可以肯定的是,JMeter至少符合以下幾條自動測試標準:

          • 零購置成本--直接從http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi下載得到。
          • 學(xué)習(xí)曲線平滑--只需要基本的html和正則表達式知識。
          • 功能全面--不僅只能測試web應(yīng)用。
          • 架構(gòu)可伸縮--其組件被設(shè)計為可通過合并完成大規(guī)模測試。測試可以在多臺主機上同時運行。
          • API可擴展--API開放,并可由用戶擴展編程。
          • 技術(shù)支持良好--在線用戶指南、用戶論壇、網(wǎng)絡(luò)文章也包括這本書。

          本章引導(dǎo)您開始第一次的JMeter試用。將向您介紹JMeterm同時使您對它的能力有一個整體的認識。除此之外,還會帶您認識JMeter的操作界面,讓你親身感受到幾個重要的JMeter組件。

           

           讓我們開始...
          JMeter是一個桌面應(yīng)用,被設(shè)計為用于測試c/s結(jié)構(gòu)的應(yīng)用程序,如web應(yīng)用或FTP應(yīng)用。是到目前為止,一個使用得最廣泛的開源測試工具。它是由 純java編寫的,通過其API可以對它進行擴展。JMeter位于c/s中的客戶端工作,它可以測試服務(wù)器的響應(yīng)時間,CPU負載,內(nèi)存占用和資源的使 用。

           

           絕大多數(shù)的JMeter測試腳本或測試計劃都涉及到創(chuàng)建一個循環(huán),按照預(yù)先定義的時間間隔和線程組來模擬向服務(wù)器發(fā)出請求。這些測試腳本可以定制和擴展。一個基本的JMeter測試計劃應(yīng)該至少包括三個部分:線程組,監(jiān)聽器,采樣器。
          線程組用來模擬一組用戶(用戶數(shù)至少一個)。
          采樣器使請求發(fā)往目標服務(wù)器。
          監(jiān)聽器捕獲每個請求后收到的響應(yīng)數(shù)據(jù)。

           

          通過界面認識它
          一個典型的測試計劃由一個或多個線程組,邏輯控制器,監(jiān)聽器,定時器,斷言和配置等元素組成。
          線程組:一個線程模擬一個用戶。所有的測試計劃的元素都必須放在一個線程組元素下。
          監(jiān)聽器:監(jiān)視JMeter運行測試用例時接收到的數(shù)據(jù)。
          控制器:其邏輯可以自定義,如讓檢驗員告訴JMeter向服務(wù)器發(fā)出請求。
          定時器:設(shè)定一個線程發(fā)出的兩次請求間的間隔時長。
          斷言:測試返回的結(jié)果是否是期望的值。
          配置:與檢驗員相關(guān),可以增加和修改請求。

           

          以下為界面截屏圖。

           

           


          JMeter界面上有兩個面板,一旦JMeter投入運行,你可以看到它們。測試計劃和工作區(qū)面板,如下圖所示。一個測試計劃描述了JMeter投入運行后的測試步驟。工作區(qū)提供臨時的數(shù)據(jù)存放空間。工作區(qū)數(shù)據(jù)與測試計劃分開存放。


           

           

          左邊的面板以樹形顯示了我們測試計劃,其中節(jié)點的添加和刪除可以通過右擊節(jié)點進行。右邊的面板顯示了每個節(jié)點的詳細配置。


           
           

          下面是由一個線程組和其它一些元素組成的一個測試計劃例子。

           
           
           

          在我們使用JMeter進行性能測試時,線程組是必選元素。這個元素可以通過模擬多個用戶對服務(wù)器進行壓力測試。你甚至可以對測試進行的時間進行預(yù)設(shè),下圖是線程組的詳細顯示。


           
           

          另一方面,同樣一個測試計劃可以擴展成為包括功能或回歸測試。如下圖所示添加Assertion(斷言)元素。



           
           


           正式開始使用...

           安裝JMeter
          你需要首先從以下網(wǎng)址下載最新發(fā)布的版本http://jakarta.apache.org/site/downloads/index.html,下載完成后,解壓縮到你想要的目錄就完成了安裝。
          提醒:為了進行遠程測試請避免在壓縮時使用帶空格的目錄名。

          設(shè)置環(huán)境變量
          首先機器上建議安裝jdk1.4或更高版本。并設(shè)置JAVA_HOME環(huán)境變量。

           

          運行JMeter
          在你的JMeter的安裝目錄下有bin目錄。在windows系統(tǒng)中,運行jmeter.bat。如果你運行在unix系統(tǒng)中,你需要運行jmeter。
          在這個過程中,JMeter會自動在它的lib目錄或lib/ext目錄中找所需要的jar包。因此,如果將來您自己開發(fā)了JMeter的組件,你也需要把它們拷貝到JMeter的lib/exit目錄中。
          如果你運行JMeter在代理或防火墻的后面,你需要提供服務(wù)器名和端口號,用命令行的參數(shù)指定。
          例如
          jmeter -H 129.198.1.1 -P 8000 -u someusername -a someuserpassword -N localhost

           

           

          測試計劃

           JMeter的測試計劃封裝了你需要手動編寫的測試腳本。
          什么是測試計劃?
          測試計劃定義了如何進行測試的框架。最簡單的測試計劃包括以下元素:
          線程組:用于指定運行線程的個數(shù)和坡道期,循環(huán)次數(shù)。每個線程模擬一個用戶,坡道期指定創(chuàng)建所有線程的時間。例如指定5個線程和10秒的坡道期,表示每個線程的創(chuàng)建時間為2秒。循環(huán)次數(shù)定義了測試重復(fù)的次數(shù)。而且可以指定開始和結(jié)束的具體時間。

          采樣器:用于發(fā)出http/ftp/soap/xml/jdbc/ldap請求到服務(wù)器。

          監(jiān)聽器:用于后處理請求數(shù)據(jù)。例如你可以保存數(shù)據(jù)到文件或者以圖表顯示。

           

          開始運行JMeter,測試計劃就會出現(xiàn)工作區(qū)左邊的面板窗口中。



            

          具體描述如下:
          User Defined Variables:你可以定義靜態(tài)變量,它們是允許你在測試中重復(fù)提取的值,如服務(wù)器名,端口號等。例如你要測試一個www.example-jmeter.net的應(yīng)用,你可以定義一個"server"變量,那么測試腳本中的"${server}"就會該值替代。

          Functional Test Mode:它會記錄下從服務(wù)器返回的數(shù)據(jù)。如果你要進行壓力測試,請不要選擇它因為它會影響結(jié)果。
          Run each Thread Group separately:單獨運行每個線程組。如果您有二個或更多的線程組在你的測試計劃中。選中該項,表示JMeter會順序地運行它們,否則會并發(fā)運行它們。

          Add directory or jar to classpath:如果你自己擴展了JMeter組件,可以使用該項添加jar包。記住需要重啟后才能生效。另外,你也可以直接把jar包拷貝到 JMeter/lib目錄下。或者通過編輯JMeter.properties文件來包含額外的jar,如"#user.classpath=.. /classes;../jars/jar1.jar,這樣可以避免出現(xiàn)路徑中包含空格引發(fā)的問題。

           

          測試計劃的組成
          測試計劃必須由至少一個線程組組成。每個線程組中都可以包含一個或多個以下組合:
          采樣器,邏輯控制器,配置,監(jiān)聽器和定時器。每個采樣器能夠關(guān)聯(lián)一個或多個預(yù)處理元素,后處理元素和斷言元素。讓我們更進一步了解它們。

           

          線程組
          線程組是測試計劃的入口,它包含所有其它的JMeter元素,一個線程組控制所有由JMeter創(chuàng)建的仿真線程,它們模擬多用戶請求。
          線程組代表著一組執(zhí)行特定測試用例的用戶,在線程組的控制面板里,顯示在下圖。如果有多個線程組那么它們會彼此獨立地執(zhí)行。

           

          詳細描述如下:
          Action to be taken after a Sampler error:一旦采樣器在測試過程中報錯,你可以作出以下的選擇:Continue繼續(xù)進行下測試,stop Thread停止當(dāng)前測試的線程,Stop Test完成停止測試,便于進行錯誤原因的查看。
          Number of Threads:模擬用戶的人數(shù)或者是web應(yīng)用的連接數(shù)。
          Ramp-Up Period:定義JMeter創(chuàng)建所有測試線程的時長。例如設(shè)定線程數(shù)為10,坡道期為60秒,那么每個線程會以6秒/個的速度連續(xù)創(chuàng)建。在60秒以 后,所有的線程將會投入運行。比較好的策略是將你的坡道期設(shè)置得足夠長以避免在測試一開始就造成很大的工作負載,但不要過長,你可以一開始將坡道期設(shè)置為 等于要創(chuàng)建的線程數(shù),稍后根據(jù)情況進行調(diào)整。
          Loop Count:定義測試執(zhí)行的次數(shù),默認情況下,測試僅執(zhí)行一次。點擊Forever選項框那么測試會一直重復(fù)執(zhí)行直到你手動停止它。
          Scheduler Configuration:1.9之后的版本具有該項,允許你設(shè)定測試的開始和結(jié)束時間。只有時間到達開始時間,測試才會真正開始。在每個測試循環(huán)之 后,除非結(jié)束時間到了,測試將會繼續(xù)下去一直到達loop count的上限。startup delay用于設(shè)定JMeter在第一個測試線程啟動前的開始等待時間,duration用于設(shè)定整個測試的進行時間。前者用于覆蓋start time的設(shè)定,后者覆蓋end time的設(shè)定。

           

           

          控制器
          JMeter有兩類控制器:
          1.Samplers:允許發(fā)送特定類型的請求給服務(wù)器。稍后我們會發(fā)送http請求給服務(wù)器,所以我們會選用Http Rquest采集器。可以通過Configuration元素給采集器進行設(shè)定。

          2.Logic Controllers:允許自定義何時發(fā)出請求的邏輯。例如你可以用Random Controllers來向服務(wù)器隨機發(fā)出http請求。

           

          采集器
          JMeter采集器允許你定義發(fā)往服務(wù)器的請求,模擬一個用戶通過網(wǎng)頁向服務(wù)器發(fā)出的請求。每個采集器生成結(jié)果包含以下一些,如性能、延遲時間、呑吐量 等。默認情況下,JMeter會按照采樣器出現(xiàn)在測試計劃樹中的順序發(fā)送請求命令。當(dāng)然,為了處理的采樣的順序可以使用邏輯控制器進一步定制。這將在后面 的“邏輯控制器”中進一步解釋 。

          您可以自定義每個采樣器通過設(shè)置其屬性,或者您也可以添加配置元素。在這本書中,因為我們將發(fā)出許多HTTP請求到相同的服務(wù)器,我們可以使用默認配置元素,它預(yù)先定義了發(fā)送的http請求。


          一個http請求的采樣器面板顯示如下:


           

           
          如果你希望JMeter進行驗證,你可以添加Assertion元素,關(guān)于Assertion的更多內(nèi)容,后面再詳細介紹。
          在一個Http請求采樣器面板中的響應(yīng)Assertion顯示如下:

           

           

           以下是JMeter提供的所有采樣器列表:

          HTTP Request
          FTP Request
          JDBC Request
          Java Request
          SOAP/XML-RPC Request
          WebService (SOAP) Request
          LDAP Request
          LDAP Extended Request
          Access Log Sampler
          BeanShell Sampler
          BSF Sampler
          TCP Sampler
          JMS Publisher
          JMS Subscriber
          JMS Point-to-Point
          JUnit Request
          Mail Reader Sampler
          Test Action

           


          邏輯控制器:用于定義采樣器的執(zhí)行順序。一個邏輯控制器的子元素有:采樣器、配置,其它邏輯控制器。JMeter可能會隨機選取(使用隨機控制器) ,重復(fù)(使用回路控制器) ,交換(使用交錯控制器)等。

          幾個邏輯控制器可以結(jié)合起來,實現(xiàn)不同的結(jié)果。
          一個循環(huán)控制器的面板顯示如下:
          以下列出JMeter提供的所有的邏輯控制器:
          Simple Controller
          Loop Controller
          Once Only Controller
          Interleave Controller
          Random Controller
          Random Order Controller
          Throughput Controller
          Runtime Controller
          If Controller
          While Controller
          Switch Controller
          ForEach Controller
          Module Controller
          Include Controller
          Transaction Controller
          Recording Controller
          監(jiān)聽器
          顯示采集器的結(jié)果為表、圖、樹或者日志文本。僅顯示定義在監(jiān)聽器下的元素的數(shù)據(jù)。
          每種監(jiān)聽器以自己的方式來顯示數(shù)據(jù),例如為了顯示圖,可以使用"Aggregate Report"監(jiān)聽器。"Aggregate Report"或"Summary Report"監(jiān)聽器顯示表。所有的監(jiān)聽器都會把數(shù)據(jù)寫到輸出文件,擴展名為jtl。
          一個Aggregate Graph監(jiān)聽器的面板顯示如下:


           
          所有監(jiān)聽器的公共屬性:
          Configure button:用于選擇寫到文件中的信息,保存為xml或cvs格式,擴展名為jtl,其中cvs格式使得文件較小。一旦選擇,Save Configuration Window將會出現(xiàn)。


          Browser button:如果你想讀或者顯示以前保存的結(jié)果。
          一個監(jiān)聽器會耗費相當(dāng)多的內(nèi)存,如果它關(guān)聯(lián)多少個采集器。JMeter會變慢,如果你選擇激活多個監(jiān)聽器。因此盡量選擇合適的監(jiān)聽器來使用。
          一個減少內(nèi)存占用的方法是用CSV默認的格式來保存數(shù)據(jù),并且使用Simple data Writer監(jiān)聽器。
          你可以改變默認的格式為xml,通過編輯jmeter.properties。將jmeter.save.saveservice.output_format=csv,改為xml即可。
          以下為所有的監(jiān)聽器列表:
          Sample Result Save Configuration
          Graph Full Results
          Graph Results
          Spline Visualizer
          Assertion Results
          View Results Tree
          Aggregate Report
          View Results in Table
          Simple Data Writer
          Monitor Results
          Distribution Graph (alpha)
          Aggregate Graph
          Mailer Visualizer
          BeanShell Listener
          Summary Report
          定時器
          定時器組件是可選組件,它會引起JMeter暫停,因為默認情況下JMeter會在一個請求結(jié)束后馬上發(fā)出下一個請求,這樣能會造成服務(wù)器過載。通過添加定時器會降低服務(wù)器崩潰的危險。這項功能在進行功能性測試時非常有用。
          不管怎樣,你需要小心在一個測試計劃中添加了過多的定時器。JMeter會在兩次請求間暫停可使用的所有定時器指定時間的總和。
          Constant Timer控制面板如下:


           
          以下是所有JMeter提供的定時器列表:
          Constant Timer
          Gaussian Random Timer
          Uniform Random Timer
          Constant Throughput Timer
          Synchronizing Timer
          BeanShell Timer
          Assertions斷言:允許你針對響應(yīng)添加驗證條件。它們被添加為采集器的子元素。在進行功能性測試時特別有用。在性能測試中可以用它來保證你收到了響應(yīng)數(shù)據(jù)。不包含內(nèi)容的錯誤或遺失的部分,因為這可能會影響有效性的測試。
          你可以利用類似Perl的正則表達式來創(chuàng)建斷言。用這來判斷應(yīng)用返回的值是否是你所期望的。
          讓我們來看一下這樣的場景,在一個Http請求的采樣器中,你請求一個頁面,如果返回"Login Successful"字符串表示訪問成功,你可使用Response Assertion來判斷響應(yīng)中是否具有該字符串。如下圖所示:


          與Assertions相關(guān)的監(jiān)聽器有"View Result in Table", "View Result Tree", "Aggregate Report","Summary Report"監(jiān)聽器,前三種監(jiān)聽器將會詳細顯示Assertions結(jié)果,而后者只是簡要顯示失敗的比例。
          以下是一個Assertion Results面板顯示:

           
          以下是所有JMeter提供的Assertion的列表:
          Response Assertion
          Duration Assertion
          Size Assertion
          XML Assertion
          BeanShell Assertion
          MD5Hex Assertion
          HTML Assertion
          XPath Assertion
          XML Schema Assertion
          配置元素
          配置元素允許你創(chuàng)建默認的變量在采樣器中使用。用于修改采樣器發(fā)出的請求內(nèi)容。
          它們只能被同一范圍內(nèi)的采樣器訪問,并且先于采樣器被執(zhí)行。
          以下是HTTP Request Defaults 面板,如圖:


           
          Request Default 1可以被Request1和Request3采樣器訪問,因為它是父節(jié)點,而Request Default2只能被Request1訪問,Request Default3只能被Request3訪問。
          以下是JMeter提供的所有配置元素列表:
          CSV Data Set Config
          FTP Request Defaults
          HTTP Authorization Manager
          HTTP Cookie Manager
          HTTP Proxy Server
          HTTP Request Defaults
          HTTP Header Manager
          Java Request Defaults
          JDBC Connection Configuration
          Login Config Element
          LDAP Request Defaults
          LDAP Extended Request Defaults
          TCP Sampler Config
          User Defined Variables
          Simple Config Element
          Pre-Processor Elements
          預(yù)先處理允許你修改范圍內(nèi)的采樣器。他們經(jīng)常用于在運行之前修改請求的設(shè)置,或者更新不能從響應(yīng)文本中獲取的變量。
          以下是JMeter提供的預(yù)先處理元素。
          HTML Link Parser
          HTTP URL Re-writing Modifier
          HTML Parameter Mask
          HTTP User Parameter Modifier
          User Parameters
          Counter
          BeanShell PreProcessor
          Post-Processor Elements
          后處理元素在采樣器發(fā)出請求后執(zhí)行。一種好的做法是將其做為采樣器的子元素,以保證它只在特定的采樣器運行后執(zhí)行,而不是全部的采樣器。該元素一般用于處理響應(yīng)數(shù)據(jù),例如,提取稍后要用到的變量值。
          以下是JMeter提供的全部后處理元素。
          Regular Expression Extractor
          XPath Extractor
          Result Status Action Handler
          Save Responses to a file
          Generate Summary Results
          BeanShell PostProcessor
          構(gòu)建一個用于測試web站點的測試計劃
          本節(jié)描述如何創(chuàng)建一個基本的網(wǎng)站測試計劃。我們稍后會對該計劃進行擴展以進行性能測試(第5章)和功能測試(第6章)。
          以下是基本的測試計劃所需要的元素:
          Thread Group
          HTTP Request (Sampler)
          HTTP Request Default (Configuration Element)
          Summary Report (Listener)
          我們可以按照以下的步驟來進行:
          • 添加用戶
          • 添加和配置默認的HTTP Request
          • 添加HTTP Request
          • 添加監(jiān)聽器顯示、存放測試結(jié)果
          • 保存和運行測試計劃
           
          首先,運行JMeter(雙擊JMeter.bat在jmeter/bin目錄中),你可以看到默認的界面,包括測試計劃和工作區(qū)。
          添加用戶
          1.右擊Test Plan圖標在左邊窗格,然后選擇add|Thread Group。


           右邊的將顯示Thread Group的控制面板。


          2.將Thread Group更名為My Users.
          3.設(shè)定為一次連接和一個用戶。
          4.更變Ramp-Up Period(坡道期)為0,意味著用戶將會馬上開始測試。如果還有其他的用戶,那就意味著所有的用戶立即開始測試。
          設(shè)定之后圖如下:

           
          接下來做其它的步驟。
          添加默認的HTTP Request
          1.右擊My Users元素,選擇Add | Config Element | HTTP Request Defaults。
          2.選擇后顯示它的控制臺界面。
          3.重命名為My URL。
          4.在服務(wù)器名或IP地址欄中輸入www.mocksite.net或其它你想用的網(wǎng)址。其余不動。設(shè)置HTTP Request Default Element會引起在My Users中的所有請求采樣器訪問同一個服務(wù)器。
          顯示如下:


           
          添加HTTP Requests
          在這一步,我們將向服務(wù)做兩個模擬的請求:默認的頁面和另一個頁面。JMeter會以它們在測試計劃樹中出現(xiàn)的次序來執(zhí)行,我們首先添加默認頁面的請求。
          1.右擊My Users線程元素,選擇Add | Sampler | HTTP Request.
          2.選擇HTTP Request從左邊窗格,并做以下修改:
          a. Name欄:Home Page
          b. Web Server:這個信息已經(jīng)在HTTP Request Defaults中設(shè)置。在這里不需要修改,除非你需要重定向到另一個不同的路徑。
          c. Path欄:/
          因為我們已經(jīng)在HTTP Request Default元素中指定Server name,我們就不必再指定其它內(nèi)容。
          完成后如圖:


          3.添加其它HTTP Request元素在Home Page元素之下。
          a. Name欄:Sample Page
          b. Path欄:/sample.html(或你自己知道的url)
          因為我們已經(jīng)在HTTP Request Default element指定了服務(wù)器名www.mocksite.com,該path就會添加在其后形成完整路徑。
          以下為完成圖:

           
          添加監(jiān)聽器
          最后,我們添加一個簡單的監(jiān)聽器,Aggregate Report。這個元素將存放所有http請求的結(jié)果,并以表格形式輸出。
          1.選擇My Users元素并Add | Listener | Aggregate Report。
          2.在Write All Data to a File:在Filename欄中輸出目錄名或用browse按鈕選擇,并輸入輸出文件名。
          以下為完成圖:


           
          保存和運行測試計劃
          JMeter要求我們在運行之前保存測試計劃。
          1.選擇Save Test Plan從File菜單。JMeter允許你只保存一部分,通過選擇分支。
          2.在Save as中輸入文件名,例如輸入My Users。擴展名為.jmx。
          3.從run 菜單選擇運行。
          以下為Aggregate Report Element和Control Panel運行結(jié)果。注意右上角有小的方框,旁邊的數(shù)字顯示激活的線程數(shù)和總線程數(shù)。


           
          以下為運行測試計劃之后的界面。右上角方框為灰色,只顯示總線程數(shù),你也可以手動停止測試,通過選擇Stop從Run菜單。


           
          報表列解釋如下:
          Label—例子的標簽
          # Samples—URL的樣本數(shù)量
          Average—平均時間
          Median—The time in the middle of a set of results
          90% Line—The maximum time taken for the fastest 90% of the samples
          Min—The lowest time for the samples
          Max—The longest time for the samples
          Error %—Percent of requests with errors or failures
          Throughput—Throughput measured in requests per unit of time
          Kb/sec—The throughput measured in Kilobytes per second


          天貓 軟件自動化測試開發(fā)

          posted on 2015-03-31 09:46 zouhui 閱讀(555) 評論(0)  編輯  收藏 所屬分類: 2.軟件測試 性能自動化
          <2015年3月>
          22232425262728
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          常用鏈接

          留言簿(2)

          隨筆分類(94)

          隨筆檔案(94)

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 邯郸市| 曲松县| 修水县| 堆龙德庆县| 余庆县| 南靖县| 称多县| 清远市| 磴口县| 峨眉山市| 大港区| 樟树市| 沽源县| 金山区| 深圳市| 玉林市| 屏边| 涪陵区| 隆昌县| 会宁县| 罗城| 中西区| 芷江| 东安县| 丰城市| 芮城县| 疏附县| 沙雅县| 内黄县| 铜山县| 湛江市| 景德镇市| 达拉特旗| 辉南县| 渝中区| 克山县| 儋州市| 甘肃省| 青海省| 武城县| 玉溪市|