jmeter中的幾個重要測試指標釋義


一、基本概念

1、測試計划是使用jmeter進行測試的起點,它是其它jmeter測試元件的容器。

2、線程組:代表一定數量的並發用戶,它可以用來模擬並發用戶發送請求。實際的請求內容在Sample中定義,它被線程組包含。可以在“測試計划->添加->線程組”來建立它,然后在線程組面板離有幾個輸入欄:Number of Threads(users)、Ramp-Up Period(in seconds)、loop count、其中Ram-Up Period(in seconds)表示在這個時間內創建完所有的線程。如:有8哥線程,Ramp-Up=200秒,那么線程的啟動時間間隔為200/8=25秒,這樣的好處是:一開始不會對服務器有太大的負載,線程組是為模擬鬢發負載而設計的。

3、取樣器(Sampler):模擬各種請求。所有實際的測試任務都由取樣器承擔,存在很多請求。如:HTTP 、ftp請求等等。

4、監聽器:負責收集測試結果,同時耶被改制了結果顯示的方式。功能是對取樣器的請求結果顯示,統計一些數據(吞吐量、KB/S)等。

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

6、定時器:負責定義請求(線程)之間的延遲間隔,模擬對服務器的連續請求。

7、邏輯控制器:允許自定義jmeter發送請求的行為邏輯,它與Sampler結合使用可以模擬復雜的請求序列。

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

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

二、jmeter報告(轉載)

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

1、Aggregate Report 解析

Aggregate Report是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吞吐量——默認情況下表示每秒完成的請求數(Request per Second),當使用了 Transaction Controller 時,也可以表示類似 LoadRunner 的 Transaction per Second 數

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

2、基本知識:

1、吞吐量:是指在沒有幀丟失的情況下,設備能夠接受的最大速率。

2、存儲的最小單位是字節Byte,對於存儲單位,有以下幾個單位,GB、MB和KB,那么這三者之間的換算關系是:1GB=1024MB,1MB=1024KB,1KB=1024Bytes。

Bit:"位",稱為bit,也就是比特,有時候也成為位。一個字節位8位二進制表示。

Byte:“字節”,一個字節就是8比特。

3、Mbps(million bits per second 兆位/秒) 代表每秒傳輸1,000,000比特。該縮寫用來描述數據傳輸速度,例如:4Mbps=每秒鍾傳輸4M比特。數據傳輸速率的單位,字母b(bit)是比特和字母B(Byte)shi zijie 

4、吞吐量和帶寬的區分:吞吐量和帶寬是很容易搞混的一個詞,兩者的單位都是Mbps。我們先來看下兩者對應的英文,吞吐量:throughput;帶寬:Max net bitrate。當我們討論通信鏈路的帶寬時,一般是指鏈路上每秒所能傳送的比特數。我們可以說以太網的帶寬10Mbps。但是我們需要區分鏈路上的可用帶寬和實際鏈路鍾每秒所能傳送的比特數(吞吐量)。

  我們傾向於用“吞吐量”一次來表示一個系統的測試性能。這樣,因為實現受各種低效率因素的影響,所以由 一段帶寬為10Mbps的鏈路連接的一對節點可能只達到2Mbps的吞吐量。這樣就意味着,一個主機上的應用能夠以2Mbps的速度向另外的一個主機發送 數據。

5、方差和標准差都是用來描述一組數據的波動性的(集中還是分散)。標准差的平方就是方差。方差越大,數據的波動越大。

B/S架構的軟件,一般關注如下服務器性能指標

Avg Rps:平均每秒鍾的響應次數 = 總請求次數/秒數;

Avg time to last byte per tertian(mstes):平均每秒業務腳本的迭代次數;

Successful Rounds:成功的請求;

Failed Rounds:失敗的請求;

Hits Per Second:每秒點擊次數;

Successful Hits Per Second:每秒成功的點擊次數;

Failed Hits Per Second:每秒失敗的點擊數;

Attempted Connections:嘗試連接數;

Throughput:吞吐率

C/S架構的程序,一般軟件后台通常為數據庫,所以我們更注重數據庫的測試指標

User Connections:用戶連接數,也就是數據庫的連接數量;

Number of Deadlocks:數據庫死鎖;

Butter Cache Hit:數據庫Cache的命中情況。

在實際性能測試過程中,需要觀察的性能指標並不限於以上提到的這些,需要根據實際情況做出選擇和權衡,有些指標如cpu占用率/內存占用率/數據庫連接池,也有非常重要的參考意義

 

三.利用BadBoy生成測試計划(測試腳本)

badBoy可以非常容易的生成web的測試腳本。類似與LoadRunner的使用,輸入站點的URL,點擊Record開始錄制。File –> Export to Jmeter ,導出為Jmeter認識的測試腳本。

四.一個簡單的測試示例思路(目前自己思路,不斷改進)

a. 需要的“測試腳本”,對應web的應用使用badboy生成測試腳本。直接導入Jmeter,進行配置。

b.如圖

TestPlan :是整個Jmeter測試執行的容器。 
ThreadGroup :模擬請求,定義線程數、Ramp-Up Period、循環次數。 
Step1 :循環控制器 ,控制Sample的執行次數。 
Sample取樣器 :決定進行那種類型的測試,如http、ftp等。 
監聽器 :圖形結果、聚合報告。 
定時器 :Random類型,定義線程請求的延遲。

c.聚合報告的解釋

Label :各個模擬測試的名稱 
Samples :各個測試的樣本總數 
Average :每個請求的平均響應時間 
Median :中值,即50%請求的平均響應時間 
90%Line :90%請求的響應時間 
Min :最小響應時間 ,Max :最大的響應時間 
Error% :錯誤響應的概率。即無法響應的概率。 
ThroughPut :吞吐量 – 默認情況下表示每秒完成的請求數(Request per Second)。 
KB/Sec :每秒從服務器端接收到的數據量。

五.Jmeter常見問題 (轉載)

http://www.51testing.com/?uid-128005-action-viewspace-itemid-84094

說明:這些問答是從網上轉載的,自己修改了其中的一些內容,如果大家興趣,可以將大家在使用Jmeter的時候碰到的問題寫下來,我們一起補充到這個問答里面,共同努力完善jmeter的資料。

  1. JMeter的工作原理是什么? 
    向服務器提交請求;從服務器取回請求返回的結果。
  2. JMeter的作用? 
    JMeter可以用於測試靜態或者動態資源的性能(文件、Servlets、Perl腳本、Java對象、數據庫和 查詢、ftp服務器或者其他的資源)。JMeter用於模擬在服務器、網絡或者其他對象上附加高負載以測試他們提供服務的受壓能力,或者分析他們提供的服 務在不同負載條件下的總性能情況。你可以用JMeter提供的圖形化界面分析性能指標或者在高負載情況下測試服務器/腳本/對象的行為。
  3. 怎樣能看到jmeter提供的腳本范例? 
    在\JMeter\jakarta-jmeter-2.0.3\xdocs\demos目錄下。
  4. 怎樣設置並發用戶數? 
    選中可視化界面中左邊樹的Test Plan節點,單擊右鍵,選擇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里面預先寫好。或者預先將固定的變量值寫入csv文件,這樣還可以方便修改。然后將文件添加到User Parameters。
  14. User Parameter中的DUMMY是什么意思? 
    當其具體內容是 
    {__CSVRead({__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,給程序運行帶來很多麻煩。

六.Jmeter測試心得(轉載)

http://www.javaeye.com/topic/211216

企業應用開發過程中,性能測試是很重要的一個環節,在這個環節中Apache的JMeter以它開源、100%純Java、操作方便等優點發揮着很大的作用。 
經過一段時間的使用,多少有些心得和技巧,拿出來共享,希望能有些幫助。

1、制作測試腳本: 
手工制作測試腳本,需要你知道請求的url和攜帶的參數等等,太花費時間, 
所以可以用badboy工具錄制腳本。這個工具雖然不是開源的,但是卻可以用來免費的錄制成.jmx的腳本,使用起來很方便。 
官方網站是:http://www.badboy.com.au/

2、出現亂碼了? 
在用JMeter發行HTTPRequest時,在請求參數中有中文時,發現存儲到DB中后,相應的字段是亂碼, 
明明在參數后面的Encode選項中打了V。后來發現badboy錄制腳本的時候並沒有記錄編碼方式,所以修改腳本, 
在Content encoding中設置正確的編碼方式就不會出現亂碼了。

3、JMeter的妙用—准備測試數據: 
要求性能測試開始前,先准備5W條數據。當然可以通過直接修改DB,但是如果這5W條數據涉及到很多表的關聯, 
甚至還要通過存儲過程的處理怎么辦,直接修改DB很容易出現錯誤的數據,要是在客戶的機器上弄錯,可就闖禍了。 
這時候想到了JMeter,它本來是用來模擬大量用戶並發請求的,現在用它來批量的生成數據吧。 
如果要求每條數據都不同,就要修改腳本,使用JMeter的函數來動態產生數據,比較常用的是CSVRead函數, 
記不住名的話Ctrl+F可以呼喚出函數助手。使用這個函數的時候需要注意幾點,首先是csv文件的編碼格式, 
使用ansi沒有問題,使用unicode時會使讀取的第一行數據出現錯誤; 
{__CSVRead(data.txt,0)}—讀取本行的第一列值{__CSVRead(data.txt,0)}—讀取本行的第一列值{__CSVRead(data.txt,1)}${__CSVRead(data.txt,next)}—讀取本行的第二列值,並把行標移動到下一行 
試驗證明JMeter應該做好了同步,在多線程環境下上面的調用方法沒有問題; 
最后,修改JMeter的線程數會加快數據生成的速度,原理是當並發線程在20左右的時候會達到最大的吞吐量(request/分), 
所以應該設定線程數20左右。

4、JMeter中debug方法: 
JMeter提供了log函數輸出log,但是有時候並不好用,比如我想輸出某個函數的返回值看是不是正確的, 
{__log({__log({__CSVRead(data.txt,1)})}這樣的寫法是錯誤的,JMeter會拋出異常,該怎么辦呢? 
答案是巧用監聽器(Listener)來輸出想看到的數據,結果顯示為樹的那個監聽器, 
它可以讓你查看每個sampler的請求數據和響應數據,在請求數據中就有你想看到的信息。

5、常用的功能: 
1)使用HTTP Cookie Manager或URL重寫實現同一線程內的多個請求共享Session。 
2)把Login的請求放到只執行一次的控制器中,那么即使循環多次,Login也只請求一次。 
3)如果想讓多個線程在同一時刻同時請求,那么用Synchronizing Timer來做集合點。 
4)為了節省系統資源,使用非窗口模式運行JMeter(jmeter -n -t test.jmx) 
5)如果模擬並發用戶過多,比如200線程,那么可以分散到多台機器上運行Jmeter(比如4台電腦,每台50線程) 
更多功能請參照使用手冊 
中文手冊(未完成)http://wiki.javascud.org/pages/viewpage.action?pageId=5566

6、在winnt系統上,使用perfmon來幫助Jmeter采集服務器的系統資源數據,可以配置log輸出這些數據作為性能瓶頸分析時使用。

七.置信區間 http://java.chinaitlab.com/tools/355421.html 
對數據進行更科學的分析,確定測試結果。類似於Jmeter聚合報告的90% Line給出的參考,而不能僅僅參考均值。

記:熟悉Jmeter使用之后,自己更應該關注的是“測試實踐”,以及通過怎么樣的方法改進性能。

 

Throughput(吞吐量):按照常規理解網絡吞吐量表示在單位時間內通過網卡數據量之和,其中即包括本機網卡發送出去的數據量也包括本機網卡接收到的數據量。 一個100Mb(位)的雙工網卡,最大發送數據的速度是12.5M字節/s , 最大接收數據的速度是12.5M字節/s, 可以 同時 收發 數據。 
並發用戶數:是同時執行操作的用戶(線程數)。 
響應時間:從請求發出到收到響應花費的時間 。


QPS - Queries Per Second  每秒處理的查詢數(如果是數據庫,就相當於讀取)
TPS - Transactions Per Second  每秒處理的事務數(如果是數據庫,就相當於寫入、修改)
IOPS,每秒磁盤進行的I/O操作次數

例如對某個數據庫測試,分開兩次測QPS與TPS。
QPS(讀取)值總是高於TPS(寫、改),並且有倍率關系,因為:
1、數據庫對查詢可能有緩存。
2、機械硬盤或SSD硬盤的讀就是比寫快。 


————————————————
版權聲明:本文為CSDN博主「雨燕天涯狼」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zhang_xiao8wan8/article/details/45814985

轉載:https://www.cnblogs.com/insane-Mr-Li/p/10101283.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM