一、Jmeter簡(jiǎn)介
- Apache JMeter是Apache組織開發(fā)的一款開源軟件,是典型的純Java開發(fā)的壓力測(cè)試工具。
- 最初用于測(cè)試Web應(yīng)用程序或FTP應(yīng)用程序。但后來擴(kuò)展到其他測(cè)試領(lǐng)域。 它可以用于測(cè)試靜態(tài)和動(dòng)態(tài)資源,例如靜態(tài)文件、Java 小服務(wù)程序、CGI 腳本、Java 對(duì)象、數(shù)據(jù)庫(kù)、FTP 服務(wù)器, 等等。
- JMeter 可以用于對(duì)服務(wù)器、網(wǎng)絡(luò)或?qū)ο竽M巨大的負(fù)載,來自不同壓力類別下測(cè)試它們的強(qiáng)度和分析整體性能。
- JMeter能夠?qū)?yīng)用程序做功能/回歸測(cè)試,通過創(chuàng)建帶有斷言的腳本來驗(yàn)證程序返回了是否為期望的結(jié)果。為了最大限度的靈活性,JMeter允許使用正則表達(dá)式創(chuàng)建斷言
- 開源 :JMeter完全免費(fèi),允許開發(fā)人員使用源代碼進(jìn)行開發(fā)
- 友好的GUI :JMeter非常易于使用,并且不需要時(shí)間來熟悉它
- 獨(dú)立于平臺(tái) :JMeter是100%純Java桌面應(yīng)用程序。 所以它可以在多個(gè)平臺(tái)上運(yùn)行
- 完整的多線程框架, 支持多線程組并發(fā)(如:多場(chǎng)景混合并發(fā))
- 可視化測(cè)試結(jié)果:測(cè)試結(jié)果可以以不同的格式顯示,如圖表,表格,樹和日志文件
- 易于安裝 : 您只需復(fù)制并運(yùn)行* .bat文件即可運(yùn)行JMeter。 無需安裝。 高度可擴(kuò)展 :您可以編寫自己的測(cè)試。 JMeter還支持可視化插件,允許您擴(kuò)展測(cè)試 多種測(cè)試策略 :JMeter支持許多測(cè)試策略,如負(fù)載測(cè)試 ,分布式測(cè)試和功能測(cè)試 。 模擬 :JMeter可以使用并發(fā)線程模擬多個(gè)用戶,對(duì)正在測(cè)試的Web應(yīng)用程序造成沉重負(fù)擔(dān) 支持多協(xié)議 :JMeter不僅支持Web應(yīng)用程序測(cè)試,還評(píng)估數(shù)據(jù)庫(kù)服務(wù)器性能。 JMeter支 持所有基本協(xié)議,如HTTP,JDBC,LDAP,SOAP,JMS和FTP 錄制和回放 : 在瀏覽器上記錄用戶活動(dòng),并使用JMeter在Web應(yīng)用程序中模擬它們 腳本測(cè)試 :Jmeter可以與groovy, Bean Shell和Selenium集成進(jìn)行自動(dòng)化測(cè)試。
- 創(chuàng)建對(duì)目標(biāo)服務(wù)器的請(qǐng)求—>服務(wù)器響應(yīng)—–>保存所有響應(yīng)–—>收集和計(jì)算統(tǒng)計(jì)信息
—–>生成不同格式的測(cè)試報(bào)告
- jmeter模擬多個(gè)用戶向目標(biāo)服務(wù)器發(fā)送請(qǐng)求,并返回性能結(jié)果
以WEB性能測(cè)試為例:jmeter可以作為web服務(wù)器與瀏覽器之間的代理網(wǎng)關(guān),以便捕獲瀏覽器的請(qǐng)求和web服務(wù)器的響應(yīng),如此就可以很容易地生成性能測(cè)試腳本。有了性能測(cè)試腳本,jmeter就可以通過線程來模擬真實(shí)用戶對(duì)web服務(wù)器的訪問壓力。這與LoadRunner的工作原理基本一致(向服務(wù)器提交請(qǐng)求;從服務(wù)器獲取請(qǐng)求返回的結(jié)果)
- 性能測(cè)試(性能測(cè)試):支持HTTP、FTP服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器(通過JDBC)
- 接口測(cè)試:支持HTTP服務(wù)端接口測(cè)試
- 功能測(cè)試:利用badboy錄制測(cè)試腳本,可以快速的形成測(cè)試腳本
- 回歸測(cè)試:利用插件架構(gòu)的優(yōu)勢(shì),可以用于功能和接口的回歸測(cè)試
二、JMeter下載安裝
1、安裝環(huán)境要求
- Java版本:JMeter要求充分滿足JVM1.3或更高。
- 操作系統(tǒng):JMeter可以在當(dāng)前任何一個(gè)已經(jīng)部署了Java的操作系統(tǒng)上運(yùn)行,如:
Unix(Solaris,Linux,etc) 、 Windows(98,NT,2000,XP,WIN8)
2、JDK下載、安裝
- 官網(wǎng)下載jdk,地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
- 安裝jdk,下載完成后,雙擊安裝即可
- JDK環(huán)境變量配置
右鍵計(jì)算機(jī)屬性->高級(jí)系統(tǒng)設(shè)置->系統(tǒng)屬性->高級(jí)->環(huán)境變量->添加如下的系統(tǒng)變量:
- 變量名:JAVA_HOME
變量值:D:Program FilesJavajdk1.8.0_92【jdk安裝路徑】
- 變量名:CLASSPATH
變量值: .;%JAVA_HOME%libdt.jar;%JAVA_HOME%libools.jar;
- 最后在系統(tǒng)變量“Path”的變量值加上%JAVA_HOME%/bin,記得在前面加上;號(hào)
- 驗(yàn)證jdk
運(yùn)行cmd->輸入java -version->顯示java版本就表示jdk安裝成功
3、JMeter下載安裝
- Jmeter官網(wǎng)地址:http://jmeter.apache.org/download_jmeter.cgi
- 下載解壓Jmeter安裝包,JMeter解壓之后即可使用,無需安裝。
4、JMeter環(huán)境配置
- 新增:變量名:JMETER_HOME
變量值:E:apache-jmeter-4.0 (就是jmeter保存的路徑,即jmeter解壓路徑)
如:JMETER_HOME=D:apache-jmetesapache-jmeter-4.0
- 修改:變量名: CLASSPATH
變量值:
;%JMETER_HOME%/lib/ext/ApacheJMeter_core.jar;%JMETER_HOME%/lib/jorphan.jar;%JMETER_HOME%/lib/logkit-2.0.jar
- 修改系統(tǒng)變量path,后面加上%JMETER_HOME%bin
- 驗(yàn)證配置:
- 在cmd輸入jmeter 可以直接打開,即配置成功
5、Jmeter 的Bin目錄下的幾個(gè)重要文件
- jmeter.bat:windows下啟動(dòng)文件jmeter.sh:Linux下啟動(dòng)文件jmeter.log:Jmeter運(yùn)行日志文件jmeter.properties:Jmeter配置文件jmeter-server.bat:windows下啟動(dòng)負(fù)載生成器服務(wù)文件jmeter-server:Linux下啟動(dòng)負(fù)載生成器文件
6、啟動(dòng)Jmeter
- 第一種方法:直接在CMD輸入jmeter啟動(dòng)第二種方法:雙擊Jmeter解壓路徑的bin目錄下面的【jmeter.bat】即可啟動(dòng)
三、JMeter組件介紹 (JMeter常用組件)
1、測(cè)試計(jì)劃(Test Plan)
- JMeter中的”測(cè)試計(jì)劃”,是測(cè)試的起點(diǎn),同時(shí)也是其他所有組件的容器,存儲(chǔ)所有元素以及運(yùn)行和測(cè)試所需的相應(yīng)設(shè)置(實(shí)際上是一個(gè)或一組測(cè)試用例)??梢詫ⅰ本€程組”(Thread Group)理解為一個(gè)測(cè)試用例,在一個(gè)測(cè)試計(jì)劃中可以有多個(gè)測(cè)試線程組。最簡(jiǎn)單的測(cè)試用例包括:測(cè)試計(jì)劃、線程組、取樣器、監(jiān)聽器。
- 頁(yè)面元素介紹:名稱:你可以為你的測(cè)試計(jì)劃取一個(gè)有意義的名字注釋:對(duì)測(cè)試計(jì)劃的注釋用戶定義的變量:可以設(shè)置針對(duì)一些全局的值,定義為變量,共所有線程使用,在用到此變量的時(shí)候直接用${變量名}引用即可,例如變量名=url,值=http://www.badu.com,在需要時(shí),直接用${url}就可以
- (1、添加:可以添加一條記錄,名稱:定義變量的名稱,供后續(xù)調(diào)用時(shí)使用;值:定義變量的值,根據(jù)需要可直接修改變量的值;
- (2、Add from clipboard:添加來自于剪切板中的信息;
- (3、刪除:選擇不需要的變量,可以進(jìn)行刪除;
- (4、Up和Down:移動(dòng)變量的位置;
- (5、Detail:有記錄時(shí),可以選擇點(diǎn)擊Detail查看詳情,并修改名稱和值
- 獨(dú)立運(yùn)行每個(gè)線程組:
- 未勾選時(shí):有多個(gè)線程組時(shí),其隨機(jī)啟動(dòng)執(zhí)行;
- 勾選后:多個(gè)線程組時(shí),等待前一個(gè)線程組執(zhí)行完成后才開始下一個(gè)線程組 ;
- Run tearDown Thread Groups after shutdown of main threads:
- 在主線程因錯(cuò)誤結(jié)束執(zhí)行時(shí),如果勾選此選項(xiàng),會(huì)執(zhí)行tearDown線程組;如果不勾選,就不會(huì)執(zhí)行tearDown線程組;
- 函數(shù)測(cè)試模式:只有當(dāng)你需要記錄每個(gè)請(qǐng)求從服務(wù)器取得的數(shù)據(jù)到文件時(shí)才需要選擇函數(shù)測(cè)試模式。選擇這個(gè)選項(xiàng)很影響性能。在調(diào)試腳本的時(shí)候,可以開啟,但是在壓測(cè)數(shù)量時(shí)建議關(guān)閉。添加目錄或jar包到ClassPath(add directory or jar to classpath):需要調(diào)用的外部jar包可以在這里進(jìn)行添加設(shè)置。如:向類路徑即%JMETER-HOME%BIN中添加目錄及jar包
- (1、瀏覽可以點(diǎn)擊選擇;
- (2、選擇其中一條可以點(diǎn)擊刪除;
- (3、點(diǎn)擊清除時(shí)可以清除里面所有的記錄;
注:什么是元素?
JMeter的不同組件稱為Elements。 每個(gè)元素都是為特定目的而設(shè)計(jì)的。
2、線程組(Threads)
- “線程組”是線程的集合。 每個(gè)線程代表一個(gè)用戶(每個(gè)線程模擬一個(gè)到服務(wù)器的真實(shí)用戶請(qǐng)求)。
- 線程組控件:設(shè)置每個(gè)組的線程數(shù)
例如,如果將線程數(shù)設(shè)置為100; JMeter將創(chuàng)建并模擬100個(gè)用戶對(duì)被測(cè)服務(wù)器的請(qǐng)求
- 線程組是任何一個(gè)測(cè)試計(jì)劃的開始點(diǎn)。每個(gè)測(cè)試需求的必備組件,JMeter 的每個(gè)任務(wù)都是用線程來處理的,
所有的控制器和取樣器都是在某個(gè)線程組下;
- 但有些配置元件,如:監(jiān)聽器,可能會(huì)被直接放到測(cè)試計(jì)劃目錄下。
- 訪問路徑:【測(cè)試計(jì)劃】-【線程】-【線程組】
- 頁(yè)面元素介紹:名稱:為線程組起名字線程數(shù):請(qǐng)求并發(fā)的數(shù)量(一般我們用來表示多少個(gè)用戶,即我們測(cè)試時(shí)的用戶數(shù)量)Ramp-Up Period(in seconds):在多少秒內(nèi)創(chuàng)建“線程數(shù)”中定義的所有線程。設(shè)置的1000個(gè)用戶,如果設(shè)置為1000秒,那么系統(tǒng)將會(huì)在1000秒結(jié)束前啟動(dòng)這1000個(gè)用戶, 如果設(shè)置為0秒,則表示立即啟動(dòng)所有用戶。每秒并發(fā)數(shù) = 線程數(shù)/RUP, 設(shè)為0,則立即啟動(dòng)所有線程循環(huán)次數(shù):當(dāng)前線程組中的測(cè)試腳本循環(huán)運(yùn)行次數(shù)(如果選擇后面的“永久”,那么請(qǐng)求將一直繼續(xù),直到強(qiáng)制停止.如果不選擇“永久”,而在輸入框中輸入數(shù)字,那么請(qǐng)求將重復(fù)指定的次數(shù),如果是0,會(huì)出現(xiàn)問題)調(diào)度器配置-持續(xù)時(shí)間:測(cè)試計(jì)劃持續(xù)多長(zhǎng)時(shí)間,表示腳本持續(xù)運(yùn)行的時(shí)間,以秒為單位,比如如果你要讓用戶持續(xù)不斷登錄1個(gè)小時(shí),你可以在文本框中填寫3600。調(diào)度器配置-啟動(dòng)延遲:測(cè)試計(jì)劃延遲多長(zhǎng)時(shí)間啟動(dòng) Action to be taken after a Sampler error:用于設(shè)置出現(xiàn)錯(cuò)誤后程序如何運(yùn)行,操作如下
- continue:忽略錯(cuò)誤繼續(xù)進(jìn)行
- Start Next Tread Loop:開始下一個(gè)線程
- Stop Thread:停止當(dāng)前線程
- Stop Test:當(dāng)前采樣結(jié)束后,停止整個(gè)測(cè)試
- Stop Test Now:立刻停止整個(gè)測(cè)試
3、邏輯控制器(Logic controller)
- 邏輯控制器確定執(zhí)行用戶請(qǐng)求的順序
邏輯控制器允許在線程中定義處理請(qǐng)求的順序。它允許控制“何時(shí)”將用戶請(qǐng)求發(fā)送到Web服務(wù)器。例如,可以使用隨機(jī)控制器隨機(jī)向服務(wù)器發(fā)送HTTP請(qǐng)求
- 邏輯控制器可以組織取樣器做出復(fù)雜的測(cè)試用的HTTP請(qǐng)求,以此滿足測(cè)試需要。
例如:我們?cè)谑锗]件時(shí),只需要登錄一次郵箱既可查看多封郵件。如果這個(gè)場(chǎng)景我們?cè)贘meter中實(shí)現(xiàn),我們需要控制登錄的次數(shù),如何實(shí)現(xiàn)呢?Jmeter邏輯控制器中的僅一次控制器就可以完成。當(dāng)然了,控制器不只是這一個(gè),還有很多其他的控制器來完成我們的各種需求。
- 控制器的訪問路徑:【測(cè)試計(jì)劃】-【線程組】-【邏輯控制器】
- 循環(huán)控制器:循環(huán)控制器使用戶請(qǐng)求運(yùn)行指定的次數(shù)或永久運(yùn)行循環(huán)控制器示例:
除了為“線程組”指定的循環(huán)值之外,循環(huán)控制器使取樣器運(yùn)行一定次數(shù)。例如,如果你
將一個(gè)HTTP請(qǐng)求添加到循環(huán)控制器,循環(huán)計(jì)數(shù)為50
將“線程組”循環(huán)計(jì)數(shù)配置為2
然后,JMeter將發(fā)送總共50 * 2 = 100個(gè)HTTP請(qǐng)求。
- 配置線程組
- 添加線程組:向網(wǎng)絡(luò)服務(wù)器baidu.com發(fā)出一個(gè)用戶請(qǐng)求并運(yùn)行2次。
- 配置循環(huán)控制器
- 將值50添加到循環(huán)計(jì)數(shù)字段,如下圖所示。它將向web服務(wù)器baidu.com發(fā)出一個(gè)用戶請(qǐng)求,運(yùn)行50 次,
除了循環(huán)值= 2,你為上面的線程組指定。所以JMeter將發(fā)送總共2 * 50 = 100個(gè)HTTP請(qǐng)求。
- JMeter將一個(gè)用戶請(qǐng)求(發(fā)送100次)模擬到Web服務(wù)器http://www.baidu.com/。在100次發(fā)送用戶
- 請(qǐng)求后停止測(cè)試。
又如:線程組中設(shè)置循環(huán)次數(shù)3,循環(huán)控制器中設(shè)置循環(huán)測(cè)試2,
即:線程組的循環(huán)與循環(huán)控制器為父子關(guān)系,且循環(huán)控制器只對(duì)子請(qǐng)求有效
注:錄制腳本的循環(huán)按循環(huán)控制器中的調(diào)協(xié)循環(huán)
- 僅一次控制器:
作為循環(huán)控制器的子節(jié)點(diǎn),僅一次控制器在每循環(huán)的第一次迭代時(shí)均會(huì)被執(zhí)行
- 隨機(jī)控制器:隨機(jī)控制器使所有用戶請(qǐng)求在每個(gè)循環(huán)周期中以隨機(jī)順序運(yùn)行。例如,您按以下順序向網(wǎng)站http://www.baidu.com提出了3個(gè)用戶請(qǐng)求:
HTTP請(qǐng)求、FTP請(qǐng)求、JDBC請(qǐng)求
這3個(gè)請(qǐng)求應(yīng)該運(yùn)行5次; JMeter將向baidu服務(wù)器發(fā)送總共5個(gè)用戶請(qǐng)求。
按順序,按以下順序依次發(fā)送請(qǐng)求:HTTP請(qǐng)求 – > FTP請(qǐng)求 – > JDBC請(qǐng)求,對(duì)于每個(gè)循環(huán)按隨機(jī)順序,請(qǐng)求隨機(jī)發(fā)送,F(xiàn)TP請(qǐng)求 – > HTTP請(qǐng)求 – > JDBC請(qǐng)求 或 JDBC請(qǐng)求 – > FTP請(qǐng)求 – > HTTP請(qǐng)求等
4、配置元件(Config element)
- 配置元件,設(shè)置默認(rèn)值和變量供以后取樣器使用。同其名字一樣,只是配置一些默認(rèn)的屬性和信息,供取樣器獲取所需要的各種配置信息,它不向服務(wù)器發(fā)送任何的請(qǐng)求。
- 配置元件僅對(duì)其所在的測(cè)試樹分支有效。
- 例如,HTTP請(qǐng)求默認(rèn)值設(shè)置了服務(wù)器的名稱,那么它所在的測(cè)試分支內(nèi)的HTTP請(qǐng)求的服務(wù)器名稱都是這個(gè)服務(wù)器,HTTP請(qǐng)求僅設(shè)置路徑就可以訪問網(wǎng)頁(yè)了。
- 性能測(cè)試中為了模擬大量用戶操作我們往往需要做參數(shù)化,Jmeter的參數(shù)化可以通過配置元件來完成,
比如CVS Data Set Config,它可以幫助我們從文件中讀取測(cè)試數(shù)據(jù)。另外Jmeter也提供了眾多的函數(shù)來幫我們生成動(dòng)態(tài)數(shù)據(jù)。
- 當(dāng)然配置元件的作用不僅于此,它還可以用來記錄服務(wù)器的返回?cái)?shù)據(jù),比如HTTP Cache Manager(HTTP
緩存管理器),自動(dòng)記錄服務(wù)器返回的Cache信息。簡(jiǎn)單說就是它為取樣器提供預(yù)備數(shù)據(jù),然后由取樣器
發(fā)出請(qǐng)求。
- 常用的配置如下圖框中所示元件:
- CSV數(shù)據(jù)集配置:
- 假設(shè)要為使用不同憑據(jù)登錄的100個(gè)用戶測(cè)試網(wǎng)站。 您不需要記錄腳本100次! 您可以參數(shù)化腳本以輸
入不同的登錄憑據(jù)。 該登錄信息(例如,用戶名,密碼)可以存儲(chǔ)在文本文件中。 JMeter有一個(gè)元素,允許您從該文本文件中讀取不同的參數(shù)。 它是“CSV數(shù)據(jù)集配置”,用于從文件中讀取行,并將它們拆分為變量。
這是CSV數(shù)據(jù)的示例。 這是一個(gè)文本文件,其中包含用于登錄目標(biāo)網(wǎng)站的用戶和密碼
- HTTP Cookie管理器
- 例子:使用瀏覽器(Firefox,IE …等)瀏覽www.baidu.com,使用到的用戶名和密碼登錄,用戶名 和
密碼將作為cookie存儲(chǔ)在計(jì)算機(jī)中。下次訪問www.baidu.com時(shí) ,無需再次登錄,因?yàn)樵跒g覽器將使用您的Cookie作為用戶數(shù)據(jù)登錄。
- HTTP Cookie管理器也具有與Web瀏覽器相同的功能。 如果您有HTTP請(qǐng)求并且響應(yīng)包含cookie,則
Cookie管理器會(huì)自動(dòng)存儲(chǔ)該cookie,并將其用于將來對(duì)該特定網(wǎng)站的所有請(qǐng)求。
- HTTP默認(rèn)請(qǐng)求
此元素允許您設(shè)置HTTP請(qǐng)求控制器使用的默認(rèn)值
- 例如:
- 您正在向服務(wù)器google.com發(fā)送100個(gè)HTTP請(qǐng)求,您必須為所有這100個(gè)請(qǐng)求手動(dòng)輸入
server name = google.com
- 相反,您可以使用“服務(wù)器名稱或IP”字段= google.com添加單個(gè)HTTP請(qǐng)求默認(rèn)值無需鍵入100次!
PS:在執(zhí)行順序方面有個(gè)例外,配置元件”用戶定義的變量”無論它處于測(cè)試樹的哪個(gè)位置,總是在測(cè)試的初始階段執(zhí)行。所以個(gè)人建議把它放在線程組的開始部分。
5、定時(shí)器(Timer)(固定定時(shí)器:思考時(shí)間)
- 默認(rèn)情況下,JMeter發(fā)送請(qǐng)求而不會(huì)在每個(gè)請(qǐng)求之間暫停 。 在這種情況下,JMeter可能會(huì)在很短的時(shí)間內(nèi)發(fā)出太多請(qǐng)求,從而壓垮您的測(cè)試服務(wù)器。
- 在現(xiàn)實(shí)生活中,訪問者不會(huì)同時(shí)到達(dá)網(wǎng)站,而是以不同的時(shí)間間隔到達(dá)網(wǎng)站。 因此,Timer將有助于模擬實(shí)時(shí)行為,在線程發(fā)出的每個(gè)請(qǐng)求之間延遲 。從而解決服務(wù)器過載問題。
- 為了足夠真實(shí)地模擬用戶負(fù)載,我們有時(shí)會(huì)需要模擬這些請(qǐng)求在同一時(shí)刻發(fā)送,就好像把大家集合在一條起跑線上,然后一聲令下,同時(shí)起跑。那么我們此時(shí)需要一個(gè)集合的功能,Jmeter中可以通過定時(shí)器來完成這個(gè)需求。
- 當(dāng)然了,定時(shí)器不只有這個(gè)功能,定時(shí)器種類有很多。
- 訪問路徑:【測(cè)試計(jì)劃】-【線程組】-【定時(shí)器】
- 固定定時(shí)器:
- 固定定時(shí)器(Constant Timer):會(huì)在每個(gè)用戶請(qǐng)求延遲相同的時(shí)間。
- 例:,使用Constant Timer在用戶請(qǐng)求baidu.com之間設(shè)置固定延遲 :
JMeter向http://www.baidu.com創(chuàng)建一個(gè)用戶請(qǐng)求100次
每個(gè)用戶請(qǐng)求之間的延遲為5000毫秒
- 用View Results in Table看結(jié)果比較明了
- 同步定時(shí)器(Synchronizing Timer)
- 這個(gè)定時(shí)器和loadrunner當(dāng)中的集合點(diǎn)(rendezvous point)作用相似,其作用是:阻塞線程,直到指定的 線程數(shù)量到達(dá)后,再一起釋放,可以瞬間產(chǎn)生很大的壓力
- Number of Simulated Users to Group by:模擬用戶的數(shù)量,即指定同時(shí)釋放的線程數(shù)數(shù)量
- Timeout in milliseconds:超時(shí)時(shí)間,即超時(shí)多少毫秒后同時(shí)釋放指定的線程數(shù)
6、前置處理器(Per processors)
- 在測(cè)試腳本開發(fā)過程中,我們?cè)谡?qǐng)求發(fā)送前可能會(huì)做一些環(huán)境或者參數(shù)的準(zhǔn)備工作,那么我們可以在前置處理器中來完成這些工作。比如我們?cè)趯?duì)數(shù)據(jù)庫(kù)進(jìn)行操作前需要先建立一個(gè)數(shù)據(jù)庫(kù)連接,那么前置處理器就可以完成這個(gè)功能。前置處理器訪問的路徑:【測(cè)試計(jì)劃】-【前置處理器】
7、取樣器(Samples)
- Sampler(取樣器)主要的執(zhí)行組件。線程組如何知道需要進(jìn)行哪種類型的請(qǐng)求(HTTP,F(xiàn)TP等)呢?答案是取樣器。用戶請(qǐng)求可以是FTP請(qǐng)求,HTTP請(qǐng)求,JDBC請(qǐng)求……等取樣器用來模擬用戶操作,向服務(wù)器(被測(cè)系統(tǒng))發(fā)出http請(qǐng)求、webservice請(qǐng)求或者java請(qǐng)求等。我們可以把http請(qǐng)求元件看成是一個(gè)沒有界面的瀏覽器,它可以發(fā)送http請(qǐng)求,接收服務(wù)器響應(yīng)的數(shù)據(jù)(我們主要用HTTP請(qǐng)求)。每一個(gè)取樣器都可以被監(jiān)聽器監(jiān)聽,并生成測(cè)試結(jié)果。通常情況下,取樣器會(huì)按照其在測(cè)試樹中的順序去執(zhí)行,但是也會(huì)根據(jù)邏輯控制器來改變運(yùn)行的次數(shù)和順序。
- 取樣器的訪問路徑:【測(cè)試計(jì)劃】-【線程組】-【Sampler】
- FTP request
- 假設(shè)您想要對(duì)FTP服務(wù)器進(jìn)行性能測(cè)試。 您可以在JMeter中使用FTP請(qǐng)求采樣器來執(zhí)行此任務(wù)。 此控制器允許
您將FTP“下載文件”或“上載文件”請(qǐng)求發(fā)送到FTP服務(wù)器。
- 例如,如果要從測(cè)試的FTP服務(wù)器下載文件“Test.txt”,則需要在JMeter中配置一些參數(shù),如下圖所示
JMeter將FTP命令發(fā)送到FTP服務(wù)器ftp.example.com ,然后從該服務(wù)器下載文件Test.txt。
- HTTP request
- 此取樣器允許您將HTTP/HTTPS請(qǐng)求發(fā)送到Web服務(wù)器。
- JDBC請(qǐng)求:
- 此取樣器允許您執(zhí)行數(shù)據(jù)庫(kù)性能測(cè)試 。 它將JDBC請(qǐng)求(SQL查詢)發(fā)送到數(shù)據(jù)庫(kù)。
- 例如,數(shù)據(jù)庫(kù)服務(wù)器具有存儲(chǔ)在表名test_tbl中的字段test_result。 您想從數(shù)據(jù)庫(kù)服務(wù)器查詢此數(shù)據(jù);
您可以配置JMeter將SQL查詢發(fā)送到此服務(wù)器以檢索數(shù)據(jù)。
- SMTP 取樣器:
如果要測(cè)試郵件服務(wù)器,可以使用SMTP采樣器。 此采樣器用于使用SMTP協(xié)議發(fā)送電子郵件
8、后置處理器(post processors)
- 后置處理器一般放在取樣器之后,專門用來處理請(qǐng)求后服務(wù)器響應(yīng)的返回結(jié)果的元件。比如一個(gè)web應(yīng)用程序,我們登錄后會(huì)返回一個(gè)sessionID,這個(gè)sessinID在登錄之后的業(yè)務(wù)操作過程中會(huì)作為驗(yàn)證條件,驗(yàn)證用戶是否合法登錄了。我們利用取樣器模擬這個(gè)請(qǐng)求時(shí)就需要帶上這個(gè)屬性,那么如何獲取呢?首先我們要知道這個(gè)sessionID從哪來?它是由服務(wù)器返回的。接著我們要獲取它,用什么工具獲取呢?Jmeter幫我們提供了元件,比如正則表達(dá)式提取器,它支持正則表達(dá)式的方式提取數(shù)據(jù)。又比如,XPath Extractor:可以提取響應(yīng)數(shù)據(jù)中通過給定XPath 值獲得的數(shù)據(jù);正則表達(dá)式提取器:可以利用正則表達(dá)式方便的提取測(cè)試時(shí)所需的數(shù)據(jù),用以參數(shù)傳遞和斷言等。訪問路徑:【測(cè)試計(jì)劃】-【后置處理器】
9、斷言(Assertions)
- 斷言,用來判斷取樣器是否正常工作,判斷請(qǐng)求響應(yīng)是否正確,驗(yàn)證結(jié)果是否正確。
用過LR的讀者應(yīng)該會(huì)知道檢查點(diǎn)這個(gè)功能,可以幫助我們來判斷請(qǐng)求是否成功返回且是否符合要求,在Jmeter中我們不叫檢查點(diǎn),我們叫斷言,接觸過selenium的也會(huì)懂這個(gè)概念。就是用一個(gè)預(yù)設(shè)的結(jié)果(值、表達(dá)式、時(shí)間長(zhǎng)短等條件)與實(shí)際結(jié)果匹配,匹配到則成功,反之失敗。
- 使用斷言的目的:在request的返回層面增加一層判斷機(jī)制;因?yàn)閞equest成功了,并不代表結(jié)果一定正確使用斷言的方法:
- 在選擇的Sampler下添加對(duì)應(yīng)的斷言(因?yàn)椴煌愋偷臄嘌詸z查的內(nèi)容不同);配置好響應(yīng)的檢查內(nèi)容添加一個(gè)斷言結(jié)果的監(jiān)聽器(從監(jiān)聽器中添加),通過“斷言結(jié)果”可以看到是否通過斷言;對(duì)于一次請(qǐng)求,如果通過的話,斷言結(jié)果中只會(huì)打印一行請(qǐng)求的名稱; 如果失敗,則除了請(qǐng)求的名稱外,還會(huì)有一行失敗的原因(不同類型的斷言,結(jié)果不同)。
- PS:一個(gè)Sampler可以添加多個(gè)斷言,根據(jù)你的檢查需求來添加相應(yīng)的斷言,當(dāng)Sampler下所有的斷言都通過了,那么才算request成功斷言訪問路徑:【測(cè)試計(jì)劃】-【斷言】
- “響應(yīng)斷言“允許您添加模式字符串以與服務(wù)器響應(yīng)的各個(gè)字段進(jìn)行比較。
- 例如,您向網(wǎng)站http://www.baidu.com發(fā)送用戶請(qǐng)求并獲取服務(wù)器響應(yīng)。 您可以使用Response Assertion來驗(yàn)證服務(wù)器響應(yīng)是否包含預(yù)期的模式字符串(例如“OK”)。
APPly to:適用范圍
Main sample and sub-samples:作用于父節(jié)點(diǎn)取樣器及對(duì)應(yīng)子節(jié)點(diǎn)取樣器
Main sample only:僅作用于父節(jié)點(diǎn)取樣器
Sub-samples only:僅作用于子節(jié)點(diǎn)取樣器
JMeter Variable:作用于jmeter變量(輸入框內(nèi)可輸入jmeter的變量名稱)
要測(cè)試的響應(yīng)字段:要檢查的項(xiàng)
響應(yīng)報(bào)文
Documeng(text):測(cè)試文件
URL樣本
響應(yīng)代碼
響應(yīng)信息
Response Headers:響應(yīng)頭部
Ignore status:忽略返回的響應(yīng)報(bào)文狀態(tài)碼
模式匹配規(guī)則:
包括:返回結(jié)果包括你指定的內(nèi)容
匹配:(好像跟Equals查不多,弄不明白有什么區(qū)別)
Equals:返回結(jié)果與你指定結(jié)果一致
Substring:返回結(jié)果是指定結(jié)果的字串
否:不進(jìn)行匹配
要測(cè)試的模式:即填寫你指定的結(jié)果(可填寫多個(gè)),按鈕【添加】、【刪除】是進(jìn)行指定內(nèi)容的管理
10、監(jiān)聽器(Listener)
- Jmeter的測(cè)試結(jié)果需要添加監(jiān)聽器來搜集,監(jiān)聽器主要用于收集整理測(cè)試結(jié)果,并將測(cè)試結(jié)果數(shù)據(jù)進(jìn)行處理并展示出來??梢灾付ǜ袷缴蒟ML、CSV等形式的文件。查看結(jié)果樹,用表格查看結(jié)果,圖形結(jié)果…聚合報(bào)告等,都是我們經(jīng)常會(huì)用到的元件。
- Jmeter的監(jiān)聽器有兩個(gè)任務(wù)。
- 添加結(jié)果監(jiān)聽,并且可以保存測(cè)試結(jié)果到文件,這些結(jié)果數(shù)據(jù)可以供再次分享使用。
- 展示結(jié)果,Jmeter可以以表格及圖形的形式展現(xiàn)結(jié)果,方便測(cè)試人員分析測(cè)試結(jié)果。
- 【取樣器】、【斷言】、【監(jiān)聽器】組合在一起就可以幫我們完成發(fā)送請(qǐng)求、驗(yàn)證結(jié)果及記錄結(jié)果三項(xiàng)工作
- 監(jiān)聽器的訪問路徑是:【測(cè)試計(jì)劃】-【監(jiān)聽器】
- “圖形結(jié)果”偵聽器(Graph Results)
“圖形結(jié)果”偵聽器在圖形上顯示服務(wù)器響應(yīng)時(shí)間
- 查看結(jié)果樹
“查看結(jié)果樹”以基本HTML格式顯示用戶請(qǐng)求的結(jié)果(View Results Tree)
通過察看結(jié)果樹,我們可以看到每個(gè)請(qǐng)求的結(jié)果,其中紅色的是出錯(cuò)的請(qǐng)求,綠色的為通過。
Thread Name:線程組名稱
Sample Start: 啟動(dòng)開始時(shí)間
Load time:加載時(shí)長(zhǎng)
Latency:等待時(shí)長(zhǎng)
Size in bytes:發(fā)送的數(shù)據(jù)總大小
Headers size in bytes:發(fā)送數(shù)據(jù)的其余部分大小
Sample Count:發(fā)送統(tǒng)計(jì)
Error Count:交互錯(cuò)誤統(tǒng)計(jì)
Response code:返回碼
Response message:返回信息
Response headers:返回的頭部信息
這里綠色的就說明請(qǐng)求是通過的,返回值是200,如果出現(xiàn)紅色的 就說明請(qǐng)求失敗,這時(shí)候可以通過右邊的取樣器結(jié)果和響應(yīng)數(shù)據(jù)來查看結(jié)果。
- 表格偵聽器
用表格可看結(jié)果(View Results in Table)
四、組件執(zhí)行順序
在同一作用域名范圍內(nèi)(不考慮邏輯控制器),測(cè)試計(jì)劃中的元件按照如下順序執(zhí)行。(1)配置元件(config elements )(2)前置處理程序(Per-processors)(3)定時(shí)器(timers )(4)取樣器(Sampler)(5)后置處理程序(Post-processors) (除非Sampler 得到的返回結(jié)果為空)(6)斷言(Assertions)(除非Sampler 得到的返回結(jié)果為空)(7)監(jiān)聽器(Listeners)(除非Sampler 得到的返回結(jié)果為空)
問題
1、為什么要使用jmeter?他可以幫我們解決那些事情?
jmeter主要是做接口測(cè)試和性能測(cè)試,它支持的協(xié)議也不少,用來測(cè)試http,數(shù)據(jù)庫(kù)并發(fā)都是很方便快捷的工具,相對(duì)于lr來說更靈活與實(shí)用,等等
2、我們?cè)谑裁磿r(shí)候會(huì)使用jmeter?
· 在一個(gè)項(xiàng)目中我們可能前段還沒有開發(fā)完畢我們想看一下服務(wù)器的相應(yīng)數(shù)據(jù)。
· 比如我們校驗(yàn)數(shù)據(jù)庫(kù)有沒有做校驗(yàn),我們可以繞過前端
· 我們想看一下這個(gè)接口或者多個(gè)接口的并發(fā)量是多少,性能怎么樣
3、.誰在使用?為什么是他在使用?
一般使用者為開發(fā)人員或者測(cè)試人員。
開源免費(fèi),基于Java編寫,可集成到其他系統(tǒng)可拓展各個(gè)功能插件
支持接口測(cè)試,壓力測(cè)試等多種功能,支持錄制回放,入門簡(jiǎn)單
相較于自己編寫框架活其他開源工具,有較為完善的UI界面,便于接口調(diào)試
多平臺(tái)支持,可在Linux,Windows,Mac上運(yùn)行
4、使用jmeter需要了解什么?接口與接口之間的聯(lián)系怎么處理?
· 我們必須了解接口的工作原理
· 需要掌握http中的get和post請(qǐng)求原理
· 需要掌握請(qǐng)求頭,響應(yīng)頭,請(qǐng)求體個(gè)個(gè)字段代表什么意思,并且字段的返回值的各代的含義是什么?
· 響應(yīng)的狀態(tài)碼各代表什么含義·
· json是什么?
· 接口測(cè)試用例的設(shè)計(jì)方法,以及測(cè)試時(shí)點(diǎn)
接口之間的聯(lián)系:
接口與接口之間存在聯(lián)系,比如上個(gè)接口的返回值是下一個(gè)接口的入?yún)?,那我們就要在上個(gè)接口返回值賦值變量,供下一個(gè)接口調(diào)用。
5、在使用jmeter中我想要的預(yù)期結(jié)果和實(shí)際結(jié)果是怎樣對(duì)比的?
· 我們做所有的測(cè)試無非就是預(yù)期結(jié)果和實(shí)際結(jié)果作對(duì)比,如果預(yù)期結(jié)果和實(shí)際結(jié)果作對(duì)比,那么這個(gè)接口就是可用的,不相等那么這個(gè)接口就是有問題的。
·在jmeter中我們的用斷言做實(shí)際結(jié)果和預(yù)期結(jié)果的對(duì)比,它提供了許多斷言方法,其中最常用的就是響應(yīng)斷言,在后面我會(huì)專門的寫一下響應(yīng)斷言以及一些常用斷言的用法。
· 我們還需要知道在jmeter中我們斷言的內(nèi)容是啥?這點(diǎn)是很重要的
7、使用jmeter的是的我們的有哪些方面的提升,jmeter的主流方向是什么?
· 對(duì)整個(gè)前端與后端的一個(gè)相互傳輸數(shù)據(jù)原理有了進(jìn)一步了解
· 可以提高測(cè)試效率,可以提早的參與進(jìn)來,較早的發(fā)現(xiàn)問題,減少開發(fā)成本,縮短整個(gè)產(chǎn)品的上線周期,可以給測(cè)試流出充裕的時(shí)間,保證產(chǎn)品質(zhì)量。
·掌握了接口測(cè)試的測(cè)試點(diǎn),已及用例的設(shè)計(jì)方法。
jmeter測(cè)試的主流方向:
· 用于性能測(cè)試,壓力測(cè)試
· 接口測(cè)試