Apache JMeter--網站自動測試與性能測評

From:http://bdql.iteye.com/blog/291987html

 

出於學習熱情,翻譯總結Emily H. Halili的《Apache JMeter》一書的部份內容。java

JMeter的簡介web

能夠確定的是,JMeter至少符合如下幾條自動測試標準:正則表達式

  • 零購置成本--直接從http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi下載獲得。
  • 學習曲線平滑--只須要基本的html和正則表達式知識。
  • 功能全面--不只只能測試web應用。
  • 架構可伸縮--其組件被設計爲可經過合併完成大規模測試。測試能夠在多臺主機上同時運行。
  • API可擴展--API開放,並可由用戶擴展編程。
  • 技術支持良好--在線用戶指南、用戶論壇、網絡文章也包括這本書。

本章引導您開始第一次的JMeter試用。將向您介紹JMeterm同時使您對它的能力有一個總體的認識。除此以外,還會帶您認識JMeter的操做界面,讓你親身感覺到幾個重要的JMeter組件。apache

讓咱們開始...
JMeter是一個桌面應用,被設計爲用於測試c/s結構的應用程序,如web應用或FTP應用。是到目前爲止,一個使用得最普遍的開源測試工具。它是由純java編寫的,經過其API能夠對它進行擴展。JMeter位於c/s中的客戶端工做,它能夠測試服務器的響應時間,CPU負載,內存佔用和資源的使用。編程

絕大多數的JMeter測試腳本或測試計劃都涉及到建立一個循環,按照預先定義的時間間隔和線程組來模擬向服務器發出請求。這些測試腳本能夠定製和擴展。一個基本的JMeter測試計劃應該至少包括三個部分:線程組,監聽器,採樣器。
線程組用來模擬一組用戶(用戶數至少一個)。
採樣器使請求發往目標服務器。
監聽器捕獲每一個請求後收到的響應數據。windows

經過界面認識它
一個典型的測試計劃由一個或多個線程組,邏輯控制器,監聽器,定時器,斷言和配置等元素組成。
線程組:一個線程模擬一個用戶。全部的測試計劃的元素都必須放在一個線程組元素下。
監聽器:監視JMeter運行測試用例時接收到的數據。
控制器:其邏輯能夠自定義,如讓檢驗員告訴JMeter向服務器發出請求。
定時器:設定一個線程發出的兩次請求間的間隔時長。
斷言:測試返回的結果是不是指望的值。
配置:與檢驗員相關,能夠增長和修改請求。服務器

如下爲界面截屏圖。
clip_p_w_picpath001網絡

JMeter界面上有兩個面板,一旦JMeter投入運行,你能夠看到它們。測試計劃和工做區面板,以下圖所示。一個測試計劃描述了JMeter投入運行後的測試步驟。工做區提供臨時的數據存放空間。工做區數據與測試計劃分開存放。架構

clip_p_w_picpath002

左邊的面板以樹形顯示了咱們測試計劃,其中節點的添加和刪除能夠經過右擊節點進行。右邊的面板顯示了每一個節點的詳細配置。

clip_p_w_picpath003

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

clip_p_w_picpath004

在咱們使用JMeter進行性能測試時,線程組是必選元素。這個元素能夠經過模擬多個用戶對服務器進行壓力測試。你甚至能夠對測試進行的時間進行預設,下圖是線程組的詳細顯示。

clip_p_w_picpath005

另外一方面,一樣一個測試計劃能夠擴展成爲包括功能或迴歸測試。以下圖所示添加Assertion(斷言)元素。

clip_p_w_picpath006

正式開始使用...

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

設置環境變量
首先機器上建議安裝jdk1.4或更高版本。並設置JAVA_HOME環境變量。

 

運行JMeter
在你的JMeter的安裝目錄下有bin目錄。在windows系統中,運行jmeter.bat。若是你運行在unix系統中,你須要運行jmeter。
在這個過程當中,JMeter會自動在它的lib目錄或lib/ext目錄中找所須要的jar包。所以,若是未來您本身開發了JMeter的組件,你也須要把它們拷貝到JMeter的lib/exit目錄中。
若是你運行JMeter在代理或防火牆的後面,你須要提供服務器名和端口號,用命令行的參數指定。
例如
jmeter -H 129.198.1.1 -P 8000 -u someusername -a someuserpassword -N localhost

 

 

測試計劃

JMeter的測試計劃封裝了你須要手動編寫的測試腳本。
什麼是測試計劃?
測試計劃定義瞭如何進行測試的框架。最簡單的測試計劃包括如下元素:
線程組:用於指定運行線程的個數和坡道期,循環次數。每一個線程模擬一個用戶,坡道期指定建立全部線程的時間。例如指定5個線程和10秒的坡道期,表示每一個線程的建立時間爲2秒。循環次數定義了測試重複的次數。並且能夠指定開始和結束的具體時間。

採樣器:用於發出http/ftp/soap/xml/jdbc/ldap請求到服務器。

監聽器:用於後處理請求數據。例如你能夠保存數據到文件或者以圖表顯示。

 

開始運行JMeter,測試計劃就會出現工做區左邊的面板窗口中。


clip_p_w_picpath007

具體描述以下:
User Defined Variables:你能夠定義靜態變量,它們是容許你在測試中重複提取的值,如服務器名,端口號等。例如你要測試一個www.example-jmeter.net的應用,你能夠定義一個"server"變量,那麼測試腳本中的"${server}"就會該值替代。

Functional Test Mode:它會記錄下從服務器返回的數據。若是你要進行壓力測試,請不要選擇它由於它會影響結果。
Run each Thread Group separately:單獨運行每一個線程組。若是您有二個或更多的線程組在你的測試計劃中。選中該項,表示JMeter會順序地運行它們,不然會併發運行它們。

Add directory or jar to classpath:若是你本身擴展了JMeter組件,可使用該項添加jar包。記住須要重啓後才能生效。另外,你也能夠直接把jar包拷貝到JMeter/lib目錄下。或者經過編輯JMeter.properties文件來包含額外的jar,如"#user.classpath=../classes;../jars/jar1.jar,這樣能夠避免出現路徑中包含空格引起的問題。

 

測試計劃的組成
測試計劃必須由至少一個線程組組成。每一個線程組中均可以包含一個或多個如下組合:
採樣器,邏輯控制器,配置,監聽器和定時器。每一個採樣器可以關聯一個或多個預處理元素,後處理元素和斷言元素。讓咱們更進一步瞭解它們。

 

線程組
線程組是測試計劃的入口,它包含全部其它的JMeter元素,一個線程組控制全部由JMeter建立的仿真線程,它們模擬多用戶請求。
線程組表明着一組執行特定測試用例的用戶,在線程組的控制面板裏,顯示在下圖。若是有多個線程組那麼它們會彼此獨立地執行。

clip_p_w_picpath008

 

詳細描述以下:
Action to be taken after a Sampler error:一旦採樣器在測試過程當中報錯,你能夠做出如下的選擇:Continue繼續進行下測試,stop Thread中止當前測試的線程,Stop Test完成中止測試,便於進行錯誤緣由的查看。
Number of Threads:模擬用戶的人數或者是web應用的鏈接數。
Ramp-Up Period:定義JMeter創 建全部測試線程的時長。例如設定線程數爲10,坡道期爲60秒,那麼每一個線程會以6秒/個的速度連續建立。在60秒之後,全部的線程將會投入運行。比較好 的策略是將你的坡道期設置得足夠長以免在測試一開始就形成很大的工做負載,但不要過長,你能夠一開始將坡道期設置爲等於要建立的線程數,稍後根據狀況進行調整。
Loop Count:定義測試執行的次數,默認狀況下,測試僅執行一次。點擊Forever選項框那麼測試會一直重複執行直到你手動中止它。
Scheduler Configuration:1.9以後的版本具備該項,容許你設定測試的開始和結束時間。只有時間到達開始時間,測試纔會真正開始。在每一個測試循環之 後,除非結束時間到了,測試將會繼續下去一直到達loop count的上限。startup delay用於設定JMeter在第一個測試線程啓動前的開始等待時間,duration用於設定整個測試的進行時間。前者用於覆蓋start time的設定,後者覆蓋end time的設定。

 

 

控制器
JMeter有兩類控制器:
1.Samplers:容許發送特定類型的請求給服務器。稍後咱們會發送http請求給服務器,因此咱們會選用Http Rquest採集器。能夠經過Configuration元素給採集器進行設定。

2.Logic Controllers:容許自定義什麼時候發出請求的邏輯。例如你能夠用Random Controllers來向服務器隨機發出http請求。

 

採集器
JMeter採集器容許你定義發往服務器的請求,模擬一個用戶經過網頁向服務器發出的請求。每一個採集器生成結果包含如下一些,如性能、延遲時間、呑吐量等。默認狀況下,JMeter會按照採樣器出如今測試計劃樹中的順序發送請求命令。固然,爲了處理的採樣的順序可使用邏輯控制器進一步定製。這將在後面的「邏輯控制器」中進一步解釋 。

您能夠自定義每一個採樣器經過設置其屬性,或者您也能夠添加配置元素。在這本書中,由於咱們將發出許多HTTP請求到相同的服務器,咱們可使用默認配置元素,它預先定義了發送的http請求。


一個http請求的採樣器面板顯示以下:

clip_p_w_picpath009


若是你但願JMeter進行驗證,你能夠添加Assertion元素,關於Assertion的更多內容,後面再詳細介紹。
在一個Http請求採樣器面板中的響應Assertion顯示以下:


clip_p_w_picpath010

如下是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

 


邏輯控制器:用於定義採樣器的執行順序。一個邏輯控制器的子元素有:採樣器、配置,其它邏輯控制器。JMeter可能會隨機選取(使用隨機控制器) ,重複(使用迴路控制器) ,交換(使用交錯控制器)等。

幾個邏輯控制器能夠結合起來,實現不一樣的結果。

一個循環控制器的面板顯示以下:

clip_p_w_picpath011

如下列出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

監聽器
顯示採集器的結果爲表、圖、樹或者日誌文本。僅顯示定義在監聽器下的元素的數據。
每種監聽器以本身的方式來顯示數據,例如爲了顯示圖,可使用"Aggregate Report"監聽器。"Aggregate Report"或"Summary Report"監聽器顯示錶。全部的監聽器都會把數據寫到輸出文件,擴展名爲jtl。
一個Aggregate Graph監聽器的面板顯示以下:


clip_p_w_picpath012

全部監聽器的公共屬性:
Configure button:用於選擇寫到文件中的信息,保存爲xml或cvs格式,擴展名爲jtl,其中cvs格式使得文件較小。一旦選擇,Save Configuration Window將會出現。


clip_p_w_picpath013

Browser button:若是你想讀或者顯示之前保存的結果。
一個監聽器會耗費至關多的內存,若是它關聯多少個採集器。JMeter會變慢,若是你選擇激活多個監聽器。所以儘可能選擇合適的監聽器來使用。
一個減小內存佔用的方法是用CSV默認的格式來保存數據,而且使用Simple data Writer監聽器。
你能夠改變默認的格式爲xml,經過編輯jmeter.properties。將jmeter.save.saveservice.output_format=csv,改成xml便可。

如下爲全部的監聽器列表:

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會在一個請求結束後立刻發出下一個請求,這樣能會形成服務器過載。經過添加定時器會下降服務器崩潰的危險。這項功能在進行功能性測試時很是有用。
無論怎樣,你須要當心在一個測試計劃中添加了過多的定時器。JMeter會在兩次請求間暫停可以使用的全部定時器指定時間的總和。

Constant Timer控制面板以下:


clip_p_w_picpath014

如下是全部JMeter提供的定時器列表:
Constant Timer
Gaussian Random Timer
Uniform Random Timer
Constant Throughput Timer
Synchronizing Timer
BeanShell Timer

Assertions斷言:容許你針對響應添加驗證條件。它們被添加爲採集器的子元素。在進行功能性測試時特別有用。在性能測試中能夠用它來保證你收到了響應數據。不包含內容的錯誤或遺失的部分,由於這可能會影響有效性的測試。
你能夠利用相似Perl的正則表達式來建立斷言。用這來判斷應用返回的值是不是你所指望的。

讓咱們來看一下這樣的場景,在一個Http請求的採樣器中,你請求一個頁面,若是返回"Login Successful"字符串表示訪問成功,你可以使用Response Assertion來判斷響應中是否具備該字符串。以下圖所示:
clip_p_w_picpath015

與Assertions相關的監聽器有"View Result in Table", "View Result Tree", "Aggregate Report","Summary Report"監聽器,前三種監聽器將會詳細顯示Assertions結果,然後者只是簡要顯示失敗的比例。
如下是一個Assertion Results面板顯示:

clip_p_w_picpath016

如下是全部JMeter提供的Assertion的列表:

Response Assertion
Duration Assertion
Size Assertion
XML Assertion
BeanShell Assertion
MD5Hex Assertion
HTML Assertion
XPath Assertion
XML Schema Assertion

配置元素
配置元素容許你建立默認的變量在採樣器中使用。用於修改採樣器發出的請求內容。
它們只能被同一範圍內的採樣器訪問,而且先於採樣器被執行。
如下是HTTP Request Defaults 面板,如圖:
clip_p_w_picpath017

Request Default 1能夠被Request1和Request3採樣器訪問,由於它是父節點,而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
預先處理容許你修改範圍內的採樣器。他們常常用於在運行以前修改請求的設置,或者更新不能從響應文本中獲取的變量。
如下是JMeter提供的預先處理元素。
HTML Link Parser
HTTP URL Re-writing Modifier
HTML Parameter Mask
HTTP User Parameter Modifier
User Parameters
Counter
BeanShell PreProcessor

Post-Processor Elements
後處理元素在採樣器發出請求後執行。一種好的作法是將其作爲採樣器的子元素,以保證它只在特定的採樣器運行後執行,而不是所有的採樣器。該元素通常用於處理響應數據,例如,提取稍後要用到的變量值。
如下是JMeter提供的所有後處理元素。
Regular Expression Extractor
XPath Extractor
Result Status Action Handler
Save Responses to a file
Generate Summary Results
BeanShell PostProcessor

構建一個用於測試web站點的測試計劃
本節描述如何建立一個基本的網站測試計劃。咱們稍後會對該計劃進行擴展以進行性能測試(第5章)和功能測試(第6章)。
如下是基本的測試計劃所須要的元素:
Thread Group
HTTP Request (Sampler)
HTTP Request Default (Configuration Element)
Summary Report (Listener)

咱們能夠按照如下的步驟來進行:

  • 添加用戶
  • 添加和配置默認的HTTP Request
  • 添加HTTP Request
  • 添加監聽器顯示、存放測試結果
  • 保存和運行測試計劃

 

首先,運行JMeter(雙擊JMeter.bat在jmeter/bin目錄中),你能夠看到默認的界面,包括測試計劃和工做區。

添加用戶
1.右擊Test Plan圖標在左邊窗格,而後選擇add|Thread Group。
clip_p_w_picpath018
右邊的將顯示Thread Group的控制面板。
clip_p_w_picpath019
2.將Thread Group改名爲My Users.
3.設定爲一次鏈接和一個用戶。
4.更變Ramp-Up Period(坡道期)爲0,意味着用戶將會立刻開始測試。若是還有其餘的用戶,那就意味着全部的用戶當即開始測試。

設定以後圖以下:

clip_p_w_picpath020

接下來作其它的步驟。
添加默認的HTTP Request
1.右擊My Users元素,選擇Add | Config Element | HTTP Request Defaults。
2.選擇後顯示它的控制檯界面。
3.重命名爲My URL。
4.在服務器名或IP地址欄中輸入www.mocksite.net或其它你想用的網址。其他不動。設置HTTP Request Default Element會引發在My Users中的全部請求採樣器訪問同一個服務器。
顯示以下:
clip_p_w_picpath021

添加HTTP Requests
在這一步,咱們將向服務作兩個模擬的請求:默認的頁面和另外一個頁面。JMeter會以它們在測試計劃樹中出現的次序來執行,咱們首先添加默認頁面的請求。
1.右擊My Users線程元素,選擇Add | Sampler | HTTP Request.
2.選擇HTTP Request從左邊窗格,並作如下修改:
a. Name欄:Home Page
b. Web Server:這個信息已經在HTTP Request Defaults中設置。在這裏不須要修改,除非你須要重定向到另外一個不一樣的路徑。
c. Path欄:/
由於咱們已經在HTTP Request Default元素中指定Server name,咱們就沒必要再指定其它內容。
完成後如圖:
clip_p_w_picpath022

3.添加其它HTTP Request元素在Home Page元素之下。
a. Name欄:Sample Page
b. Path欄:/sample.html(或你本身知道的url)
由於咱們已經在HTTP Request Default element指定了服務器名www.mocksite.com,該path就會添加在其後造成完整路徑。
如下爲完成圖:

clip_p_w_picpath023

添加監聽器
最後,咱們添加一個簡單的監聽器,Aggregate Report。這個元素將存放全部http請求的結果,並以表格形式輸出。
1.選擇My Users元素並Add | Listener | Aggregate Report。
2.在Write All Data to a File:在Filename欄中輸出目錄名或用browse按鈕選擇,並輸入輸出文件名。
如下爲完成圖:
clip_p_w_picpath024

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

如下爲運行測試計劃以後的界面。右上角方框爲灰色,只顯示總線程數,你也能夠手動中止測試,經過選擇Stop從Run菜單。


clip_p_w_picpath026

報表列解釋以下: Label—例子的標籤 # Samples—URL的樣本數量 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

相關文章
相關標籤/搜索