1.? JMeter 測試計劃
測試計劃
使用?JMeter?進行測試的起點,是其它?JMeter?測試元件的容器。
線程組
代表一定數量的并發用戶,它可以用來模擬并發用戶發送請求。實際的請求內容在Sampler中定義,它被線程組包含??梢栽凇皽y試計劃->添加->線程組”來建立它,然后在線程組面板里有幾個輸入欄:線程數、Ramp-Up Period(in seconds)、循環次數,其中Ramp-Up Period(in seconds)表示在這時間內創建完所有的線程。如有8個線程,Ramp-Up = 200秒,那么線程的啟動時間間隔為200/8=25秒,這樣的好處是:一開始不會對服務器有太大的負載。線程組是為模擬并發負載而設計。
取樣器(Sampler)
模擬各種請求。所有實際的測試任務都由取樣器承擔,存在很多種請求。如:HTTP 、ftp請求等等。
監聽器
負責收集測試結果,同時也被告知了結果顯示的方式。功能是對取樣器的請求結果顯示、統計一些數據(吞吐量、KB/S……)等。
斷言
用于來判斷請求響應的結果是否如用戶所期望,是否正確。它可以用來隔離問題域,即在確保功能正確的前提下執行壓力測試。這個限制對于有效的測試是非常有用的。
定時器
負責定義請求(線程)之間的延遲間隔,模擬對服務器的連續請求。
邏輯控制器
允許自定義JMeter發送請求的行為邏輯,它與Sampler結合使用可以模擬復雜的請求序列。
配置元件
維護Sampler需要的配置信息,并根據實際的需要會修改請求的內容。
前置處理器和后置處理器
負責在生成請求之前和之后完成工作。前置處理器常常用來修改請求的設置,后置處理器則常常用來處理響應的數據。
2. ?聚合報告
聚合報告(Aggregate Report) 是?JMeter?常用的一個 監聽器。對聚合報告各項數據欄的理解如下:
Label
每個 JMeter 的 element(例如 HTTP Request)都有一個 Name 屬性,這里顯示的就是 Name 屬性的值
#Samples
表示你這次測試中一共發出了多少個請求,如果模擬10個用戶,每個用戶迭代10次,那么這里顯示100
Average
平均響應時間——默認情況下是單個 Request 的平均響應時間,當使用了 Transaction Controller 時,也可以以Transaction 為單位顯示平均響應時間
Median
中位數,也就是 50% 用戶的響應時間
90% Line
90% 用戶的響應時間
----------------------------------------------------------另一種說法
90% Line - 90% of the samples took no more than this time. The remaining samples at least as long as this.
“?90%?的樣品沒有超過這個時間,剩余的樣品至少只要這個?!保胓oogle翻譯的)
沒太理解是什么意思,于是,點擊詳細解釋。
90%?Line?(90?th?Percentile)?is?the?value?below?which?90%?of?the?samples?fall.?The?remaining?samples?too?at?least?as?long?as?the?value.?This?is?a?standard?statistical?measure.?See,?for?example:?Percentile?entry?at?Wikipedia.
英語太差,還是沒理解到底啥意思,不過最后提示我,用維基百科查一下什么是百分位數。
百分位數:統計學術語,如果將一組數據從大到小排序,并計算相應的累計百分位,則某一百分位所對應數據的值就稱為這一百分位的百分位數。可表示為:一組n個觀測值按數值大小排列如,處于p%位置的值稱第p百分位數。
假如:
有10個數:
1、2、3、4、5、6、7、8、9、10?? ?按由大到小將其排列。
求它的第90%百分位,也就是第9個數剛好是9?,那么他的90%Line?就是9?。
另一組數:
2、2.1、2.5、3、3.4、3.4、4、4、4、4、5、5、5、5.9、5.91、6.8、8、12、24、24.1???按由大到小將其排列。
求它的第90%百分位,第18個數是12?么,他的90%Line?就是12。
再來解釋90%Line
一組數由小到大進行排列,找到他的第90%個數(假如是12),那么這個數組中有90%的數將小于等于12?。
用在性能測試的響應時間也將非常有意義,也就是90%請求響應時間不會超過12?秒。
原創地址:http://www.cnblogs.com/fnng/archive/2013/02/26/2934317.html
----------------------------------------------------------另一種說法-----end
Note
關于 50% 和 90% 并發用戶數的含義,請參考下文
http://www.cnblogs.com/jackei/archive/2006/11/11/557972.html
Min
最小響應時間
Max
最大響應時間
Error%
本次測試中出現錯誤的請求的數量/請求的總數
Throughput(吞吐量)
默認情況下表示每秒完成的請求數(Request per Second),當使用了 Transaction Controller 時,也可以表示類似?LoadRunner?的 Transaction per Second 數
KB/Sec
每秒從服務器端接收到的數據量,相當于LoadRunner中的Throughput/Sec
3.? 圖形結果分析參數解析
樣本數目
總共發送到服務器的請求數。
最新樣本
代表時間的數字,是服務器響應最后一個請求的時間。
吞吐量
服務器每分鐘處理的請求數。
平均值
總運行時間除以發送到服務器的請求數。
中間值
代表時間的數字,有一半的服務器響應時間低于該值而另一半高于該值。
偏離
服務器響應時間變化、離散程度測量值的大小,或者,換句話說,就是數據的分布。
4.? Http請求的配置參數
名稱
本屬性用于標識一個取樣器,建議使用一個有意義的名稱。
注釋
對于測試沒有任何作用,僅用戶記錄用戶可讀的注釋信息。
服務器名稱或IP
HTTP請求發送的目標服務器名稱或IP地址。
端口號
目標服務器的端口號,默認值為80?。
協議
向目標服務器發送HTTP請求時的協議,可以是http或者是https?,默認值為http?。
方法
發送HTTP請求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。
Content?encoding
內容的編碼方式,默認值為iso8859
路徑
目標URL路徑(不包括服務器地址和端口)
自動重定向
如果選中該選項,當發送HTTP請求后得到的響應是302/301時,JMeter?自動重定向到新的頁面。
Use?keep?Alive
當該選項被選中時,jmeter?和目標服務器之間使用?Keep-Alive方式進行HTTP通信,默認選中。
Use?multipart/from-data?for?HTTP?POST
當發送HTTP?POST?請求時,使用Use?multipart/from-data方法發送,默認不選中。
同請求一起發送參數
在請求中發送URL參數,對于帶參數的URL?,jmeter提供了一個簡單的對參數化的方法。用戶可以將URL中所有參數設置在本表中,表中的每一行是一個參數值對(對應RUL中的?名稱1=值1)。
同請求一起發送文件
在請求中發送文件,通常,HTTP文件上傳行為可以通過這種方式模擬。
從HTML文件獲取所有有內含的資源
當該選項被選中時,jmeter在發出HTTP請求并獲得響應的HTML文件內容后,還對該HTML進行Parse?并獲取HTML中包含的所有資源(圖片、flash等),默認不選中,如果用戶只希望獲取頁面中的特定資源,可以在下方的Embedded?URLs?must?match?文本框中填入需要下載的特定資源表達式,這樣,只有能匹配指定正則表達式的URL指向資源會被下載。
用作監視器
此取樣器被當成監視器,在Monitor?Results?Listener?中可以直接看到基于該取樣器的圖形化統計信息。默認為不選中。
Save?response?as?MD5?hash
選中該項,在執行時僅記錄服務端響應數據的MD5值,而不記錄完整的響應數據。在需要進行數據量非常大的測試時,建議選中該項以減少取樣器記錄響應數據的開銷。
5.? Constant?Throughput?Timer?的主要屬性
名稱
定時器的名稱
Target?throughput(in?samples?per?minute)
目標吞吐量。注意這里是每分鐘發送的請求數。
Calculate?Throughput?based?on
有5個選項,分別是:
This?thread?only?:控制每個線程的吞吐量,選擇這種模式時,總的吞吐量為設置的?target?Throughput?乘以線程的數量。
All?active?threads?:?設置的target?Throughput?將分配在每個活躍線程上,每個活躍線程在上一次運行結束后等待合理的時間后再次運行?;钴S線程指同一時刻同時運行的線程。
All?active?threads?in?current?thread?group?:設置的target?Throughput將分配在當前線程組的每一個活躍線程上,當測試計劃中只有一個線程組時,該選項和All?active?threads選項的效果完全相同。
All?active?threads?(shared?):與All?active?threads?的選項基本相同,唯一的區別是,每個活躍線程都會在所有活躍線程上一次運行結束后等待合理的時間后再次運行。
All?active?threads?in?current?thread?group?(shared?):與All?active?threads?in?current?thread?group?基本相同,唯一的區別是,每個活躍線程都會在所有活躍線程的上一次運行結束后等待合理的時間后再次運行。
6.? JMeter常見問題
1. JMeter的工作原理是什么?
向服務器提交請求;從服務器取回請求返回的結果。
2. JMeter的作用?
JMeter可以用于測試靜態或者動態資源的性能(文件、Servlets、Perl腳本、java對象、數據庫和查詢、ftp服務器或者其他的資源)。JMeter用于模擬在服務器、網絡或者其他對象上附加高負載以測試他們提供服務的受壓能力,或者分析他們提供的服務在不同負載條件下的總性能情況。你可以用JMeter提供的圖形化界面分析性能指標或者在高負載情況下測試服務器/腳本/對象的行為。
3. 怎樣能看到jmeter提供的腳本范例?
在\JMeter\jakarta-jmeter-2.0.3\xdocs\demos目錄下。
4. 怎樣設置并發用戶數?
選中可視化界面中左邊樹的TestPlan節點,單擊右鍵,選擇Add-> Thread Group,其中Number of Threads參數用來設置發送請求的用戶數目。
5. JMeter的運行指示?
Jmeter在運行時,右上角有個單選框大小的小框框,運行是該框框為綠色,運行完畢后,該框框為白色。
6. User Parameters的作用是什么?
提高腳本可用性
7. 在result里會出現彩色字體的http response code,說明什么呢?
Http response code是http返回值,彩色字體較引人注目,可以使用戶迅速關注。象綠色的302就說明在這一步驟中,返回值取自本機的catch,而不是server。
8. 怎樣計算Ramp-up period時間?
Ramp-up period是指每個請求發生的總時間間隔,單位是秒。如果Number of Threads設置為5,而Ramp-up period是10,那么每個請求之間的間隔就是10/5,也就是2秒。Ramp-up period設置為0,就是同時并發請求。
9. Get和Post的區別?
他們是http協議的2種不同實現方式。Get是指server從Request URL取得所需參數。從result中的request中可以看到,get可以看到參數,但是post是主動向server發送參數,所以一般看不到這些參數的。
10. 哪些原因可能導致error的產生?
a. Http錯誤,包括不響應,結果找不到,數據錯誤等等;
b.?JMeter本身原因產生的錯誤。
11. 為什么Aggregate Report結果中的Total值不是真正的總和?
JMeter給結果中total的定義是并不完全指總和,為了方便使用,它的值表現了所在列的代表值,比如min值,它的total就是所在列的最小值。下圖就是total在各列所表示的意思。
12. JMeter的Thread Number是提供多個不同用戶并發的功能么?
不是,Thread Number僅僅是指并發數,如果需要實現多個不同用戶并發,我們應該采用其它方法,比如通過在jmeter外建立csv文件的方法來實現。
13. 同時并發請求時,若需要模擬不同的用戶同時向不同的server并發請求,怎樣實現呢?
方法很靈活,我們可以將不同的server在thread里面預先寫好?;蛘哳A先將固定的變量值寫入csv文件,這樣還可以方便修改。然后將文件添加到User Parameters。
14. User Parameter中的DUMMY是什么意思?
當其具體內容是${__CSVRead(${__property(user.dir)}${FILENAME},next())}時用來模擬讀文件的下一行。
15. 當測試對象在多server間跳轉時,應該怎樣處理?
程序運行時,有些http和隱函數會攜帶另外的server IP,我們可以從他們的返回值中獲取。
16. 為何測試對象是http和https混雜出現?
Https是加密協議,為了安全,一般不推薦使用http,但是有些地方,使用https過于復雜或者較難實現,會采用http協議。
17. Http和https的默認端口是什么?
Apache server (Http)的默認端口是80;
SSL (Https)的默認端口是443。
18. 為何在run時,有些頁面失敗,但是最后不影響結果?
原因較多,值得提及的一種是因為主流頁面與它不存在依賴關系,所以即使這樣的頁面出錯,也不會影響運行得到正常結果,但是這樣會影響到測試的結果以及分析結果。
19. 為什么腳本剛開始運行就有錯誤,其后來的腳本還可運行?
在Thread Group中有相關設置,如果選擇了continue,即使前面的腳本出現錯誤,整個thread仍會運行直到結束。選擇Stop Thread會結束當前thread;選擇Stop Test則會結束全部的thread。推薦選項是Stop Thread。
20. 在Regular expression_r Extractor會看到Template的值是$1$,這個值是什么意思呢?
$1$是指取第一個()里面的值。如果Regular expression_r的數值有多個,用這種方法可以避免不必要的麻煩。
21. Regular expression_r中的(.*)是什么意思?
那是一個正則表達式(regular expression_r)?!?’等同于sql語言中的’?’,表示可有可無。’*’表示0個或多個?!?)’表示需要取值。(.*)表達任意長度的字符串。
22. 在讀取Regular expression_r時要注意什么?
一定要保證所取數值的絕對唯一性。
23. 怎樣才能判斷什么樣的情況需要添加Regular expression_r Extractor?\
檢查Http Request中的Send Parameters,如果有某個參數是其前一個page中所沒有給出的,就要到原文件中查找,并添加Regular expression_r Extractor到其前一page的http request中。
24. 在自動獲取的腳本中有時會出現空的http request,是什么意思呢?
是因為在獲取腳本時有些錯誤,是腳本工具原因。在run時這種錯誤不參與運行的。
25. 在運行結果中為何有rate為N/A的情況出現?
可能因為JMeter自身問題造成,再次運行可以得到正確結果。
26. 常用http錯誤代碼有哪些?
400??? 無法解析此請求。
403??? 禁止訪問:訪問被拒絕。
404??? 找不到文件或目錄。
405??? 用于訪問該頁的HTTP動作未被許可。
410??? 文件已刪除。
500??? 服務器內部錯誤。
501??? 標題值指定的配置沒有執行。
502 ?? Web服務器作為網關或代理服務器時收到無效的響應。
27. Http request中的Send Parameters是指什么?
是指code中寫定的值和自定義變量中得到的值,就是在運行頁面時需要的參數。
28. Parameters在頁面中是不斷傳遞的么?
是的。參數再產生后會在頁面中一直傳遞到所需頁面。所以我們可以在動態參數產生時捕獲它,也可以在所需頁面的上一頁面捕獲。(但是這樣可能有錯誤,最好在產生頁面獲取)
29. 在使用JMeter測試時,是完全模擬用戶操作么?造成的結果也和用戶操作完全相同么?
是的。JMeter完全模擬用戶操作,所以操作記錄會全部寫入DB.在運行失敗時,可能會產生錯誤數據,這就取決于腳本檢查是否嚴謹,否則錯誤數據也會進入DB,給程序運行帶來很多麻煩。
30. 制作測試腳本
手工制作測試腳本,需要你知道請求的url和攜帶的參數等等,太花費時間,所以可以用badboy工具錄制腳本。這個工具雖然不是開源的,但是卻可以用來免費的錄制成.jmx的腳本,使用起來很方便。官方網站是:http://www.badboy.com.au/
31. 出現亂碼了?
在用JMeter發行HTTPRequest時,在請求參數中有中文時,發現存儲到DB中后,相應的字段是亂碼,明明在參數后面的Encode選項中打了V。后來發現badboy錄制腳本的時候并沒有記錄編碼方式,所以修改腳本,在Content encoding中設置正確的編碼方式就不會出現亂碼了。
32. JMeter的妙用---準備測試數據
要求性能測試開始前,先準備5W條數據。當然可以通過直接修改DB,但是如果這5W條數據涉及到很多表的關聯,甚至還要通過存儲過程的處理怎么辦,直接修改DB很容易出現錯誤的數據,要是在客戶的機器上弄錯,可就闖禍了。這時候想到了JMeter,它本來是用來模擬大量用戶并發請求的,現在用它來批量的生成數據吧。如果要求每條數據都不同,就要修改腳本,使用JMeter的函數來動態產生數據,比較常用的是CSVRead函數,記不住名的話Ctrl+F可以呼喚出函數助手。使用這個函數的時候需要注意幾點,首先是csv文件的編碼格式,使用ansi沒有問題,使用unicode時會使讀取的第一行數據出現錯誤;${__CSVRead(data.txt,0)}---讀取本行的第一列值??????????????????????????????????? ${__CSVRead(data.txt,1)}${__CSVRead(data.txt,next)}---讀取本行的第二列值,并把行標移動到下一行試驗證明JMeter應該做好了同步,在多線程環境下上面的調用方法沒有問題;最后,修改JMeter的線程數會加快數據生成的速度,原理是當并發線程在20左右的時候會達到最大的吞吐量(request/分),
所以應該設定線程數20左右。
33. JMeter中debug方法
JMeter提供了log函數輸出log,但是有時候并不好用,比如我想輸出某個函數的返回值看是不是正確的,${__log(${__CSVRead(data.txt,1)})}這樣的寫法是錯誤的,JMeter會拋出異常,該怎么辦呢?答案是巧用監聽器(Listener)來輸出想看到的數據,結果顯示為樹的那個監聽器,它可以讓你查看每個sampler的請求數據和響應數據,在請求數據中就有你想看到的信息。
34. 常用的功能
使用HTTP Cookie Manager或URL重寫實現同一線程內的多個請求共享Session。
把Login的請求放到只執行一次的控制器中,那么即使循環多次,Login也只請求一次。如果想讓多個線程在同一時刻同時請求,那么用Synchronizing Timer來做集合點。為了節省系統資源,使用非窗口模式運行JMeter(jmeter?-n -t test.jmx)如果模擬并發用戶過多,比如200線程,那么可以分散到多臺機器上運行Jmeter(比如4臺電腦,每臺50線程)
更多功能請參照使用手冊。
中文手冊(未完成)http://wiki.javascud.org/pages/viewpage.action?pageId=5566
35. 在winnt系統上,使用perfmon來幫助Jmeter采集服務器的系統資源數據,可以配置log輸出這些數據作為性能瓶頸分析時使用。
36. 置信區間
對數據進行更科學的分析,確定測試結果。類似于Jmeter聚合報告的90% Line給出的參考,而不能僅僅參考均值。
7. 工作中對“營銷活動管理系統”做的一次壓力測試結果分析
*****************************************************************************************************************************
前言
*****************************************************************************************************************************
1、測試過程中頁面響應時間與測試結果不一致。具體來說就是,操作過程中頁面響應時間過長,而測試結果卻顯示很短;
2、偏離值隨著測試樣本的增加而減?。úl較小,測試模塊單一的情況下);
3、測試樣本數分別為:5、10、15、20、50、100、150、200;
4、測試結果著重看Average和吞吐量(是否達到峰值應該具體參考服務器和系統的功能與非功能需求等酌情考慮);
5、ITSP門戶測試時,Average要求在1.5s以下;
6、測試過程中經常出現運行腳本錯誤的情況,一般在測試結果里不會看到;
*****************************************************************************************************************************
名詞解釋
*****************************************************************************************************************************
1、吞吐量:可以理解為服務器每分鐘處理的請求數量;吞吐率代表著單位時間內所能承受的壓力,是測試中一個重要的指標。
通過比較吞吐量,可以發現系統的運行狀態。當隨著并發數增加時,吞吐率是不斷增加的,當達到一個服務器極限后,再增加并發數,
吞吐率會急速下降,直至服務器崩潰。所以當達到臨界點(吞吐量最高點,負載和處理均衡時)為最大吞吐率,是系統在運行下的一
個理想閾值范圍。
2、Average:平均響應時間。默認情況下是單個 Request 的平均響應時間;
3、#Samples:表示本次測試中一共發出了多少個請求,如果模擬10個用戶,每個用戶迭代10次,那么這里顯示100;
4、Average:平均響應時間——默認情況下是單個 Request 的平均響應時間;
5、Median:中位數,也就是 50% 用戶的響應時間;
6、90% Line:90% 用戶的響應時間
7、Min:最小響應時間;
8、Max:最大響應時間;
9、Error%:本次測試中出現錯誤的請求的數量/請求的總數;
11、KB/Sec:每秒從服務器端接收到的數據量;
12、偏離: 服務器響應時間變化、離散程度測量值的大小,或者,換句話說,就是數據的分布。
********************************************************************************************************************************
部分計算公式
********************************************************************************************************************************
1、 吞吐量=完成的請求數/完成這些請求數所需要的時間;
2、 平均響應時間=所有響應時間的總和/完成的請求數;
3、 失敗率=失敗的個數/總數數;
4、 時間的計算方法是:通過timeStamp時間戳(發出的起始時間)相減而得
********************************************************************************************************************************
測試過程中的異常情況
********************************************************************************************************************************
****登錄測試****
1、頁面出現Error(Scripting Error: 語法錯誤 : line 1 char 1),測試結果出現Error,錯誤率33.33%;
2、200個并發時,Average達到1000ms左右;
****注銷測試****
1、Average在15個并發時急速提升至140ms左右,而5和10個并發時都是8ms左右;
2、200個并發時,Average達到132ms;
****修改密碼測試****
1、200個并發時,Average達到7ms;
****訂單轉化率測試****
1、70個并發時,Average達到1000ms左右;
2、100個并發時,Average達到1800ms左右;
3、150個并發時,Average達到3300ms左右,偏離值(1246)超過樣本數(1200);
4、200個并發時,Average達到5000ms左右;
****公共標簽墻測試****
1、70個并發時,Average達到1200ms左右;
2、100個并發時,Average達到1700ms左右;
3、150個并發時,Average達到3500ms左右;
4、200個并發時,Average達到5300ms左右;
****公共管理測試****
1、50個并發時,Average達到1200ms左右;
2、70個并發時,Average達到1600ms左右;
3、100個并發時,Average達到2500ms左右;
4、150個并發時,Average達到4000ms左右;
5、200個并發時,Average達到5700ms左右;
********************************************************************************************************************************
********************************************************************************************************************************
測試結果:
1、綜合分析Average初步得出系統合適的并發數為70個并發以下。
2、詳細結果見“圖形分析”和聚合報告。
********************************************************************************************************************************
********************************************************************************************************************************
參考網站
[1]http://www.51testing.com/?uid-128005-action-viewspace-itemid-84094;
[2] http://www.51testing.com/html/28/116228-238479.html;
[3] http://www.javaeye.com/topic/211216;
[4]http://dev2dev.bea.com.cn/techdoc/20060912878.html;
[5]http://www.cnblogs.com/jackei/archive/2006/11/11/557972.html;