一.JMeter介紹
1.Apache JMeter是什么
Apache JMeter 是Apache組織的開放源代碼項(xiàng)目,是一個(gè)純Java桌面應(yīng)用,用于壓力測(cè)試和性能測(cè)量。它初被設(shè)計(jì)用于Web應(yīng)用測(cè)試但后來(lái)擴(kuò)展到其它測(cè)試領(lǐng)域。Apache JMeter可以用于對(duì)靜態(tài)的和動(dòng)態(tài)的資源(文件,Servlet,Perl腳本,Java對(duì)象,數(shù)據(jù)庫(kù)和查詢,F(xiàn)TP服務(wù)器或是其它資源)的性能進(jìn)行測(cè)試。JMeter可以用于在服務(wù)器,網(wǎng)絡(luò)或?qū)ο竽M繁重的負(fù)載來(lái)測(cè)試它們提供服務(wù)的受壓能力或者分析不同壓力條件下的總體性能情況。你可以使用JMeter提供的圖形化界面,分析性能指標(biāo)或者在高負(fù)載情況下測(cè)試你的服務(wù)器/腳本/對(duì)象。
2.Apache JMeter能做什么
1.能夠?qū)TTP和FTP服務(wù)器進(jìn)行壓力和性能測(cè)試,也可以對(duì)任何數(shù)據(jù)庫(kù)進(jìn)行同樣的測(cè)試
2.完全的可移植性和純Java
3.完全Swing的輕量級(jí)組件支持
4.完全多線程框架允許通過(guò)多個(gè)線程并發(fā)取樣和通過(guò)單獨(dú)的線程組對(duì)不同的功能同時(shí)取樣
5.精心的GUI設(shè)計(jì)允許快速操作和更精確的計(jì)時(shí)
6.緩存和離線分析/回放測(cè)試結(jié)果
7.高可擴(kuò)展性:
可鏈接的取樣器允許無(wú)限制的測(cè)試能力
各種負(fù)載統(tǒng)計(jì)表和可鏈接的計(jì)時(shí)器可供選擇
數(shù)據(jù)分析和可視化插件提供了很好的可擴(kuò)展性以及個(gè)性化
具有提供動(dòng)態(tài)輸入到測(cè)試的功能
支持腳本變成的取樣器
二.JMeter安裝
1.安裝環(huán)境
1.操作系統(tǒng):window xp 7 8
2.安裝包準(zhǔn)備:
新的JMeter下載地址
http://apache.dataguru.cn//JMeter/binaries/apache-JMeter-2.13.tgz
Jdk根據(jù)不同的操作系統(tǒng)選擇jdk版本
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
2.安裝過(guò)程
1.安裝JDK ,如我安裝的地址為:C:Program Files (x86)Javajdk1.8.0_45
2.設(shè)置環(huán)境變量:
i 在用戶變量中,新建變量名“JAVA_HOME”,變量值為:安裝JDK的目錄,如我的為:“C:Program Files (x86)Javajdk1.8.0_45;”
ii 再新建變量名為“CLASSPATH”,變量值為:
“.;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.jar;;”
iii 在系統(tǒng)變量的“Path”變量值后加上:“%JAVA_HOME%/bin;”
3.安裝JMeter,解壓“jakarta-JMeter-2.13.zip”到E盤根目錄下:“E:/jakarta-JMeter-2.13”
4.在系統(tǒng)的CMD命令提示符下輸入"java",能看到相應(yīng)幫助信息,說(shuō)明jdk安裝成功
5.運(yùn)行JMeter: 直接打開 E:/jakarta-JMeter-2.13/bin/JMeter.bat 即可
三.JMeter頁(yè)面和主要測(cè)試組件
測(cè)試計(jì)劃(Test Plan ):
用來(lái)描述一個(gè)性能測(cè)試,包含與本次性能測(cè)試所有相關(guān)的功能。也說(shuō)本的性能測(cè)試的所有內(nèi)容是于基于一個(gè)計(jì)劃的。
下面看一下一個(gè)計(jì)劃下面都有哪些主要的功能模塊(右鍵單擊“測(cè)試計(jì)劃”彈出菜單)。
線程 用戶(Threads Users)
雖然有三個(gè)添加線程組的選項(xiàng),名字不一樣, 創(chuàng)建之后,其界面是完全一樣的。之前的版本只有一個(gè)線程組的名字,F(xiàn)在多一個(gè)setUp theread Group 與terDown Thread Group
1) setup thread group
一種特殊類型的ThreadGroup的,可用于執(zhí)行預(yù)測(cè)試操作。這些線程的行為完全像一個(gè)正常的線程組元件。不同的是,這些類型的線程執(zhí)行測(cè)試前進(jìn)行定期線程組的執(zhí)行。
2) teardown thread group.
一種特殊類型的ThreadGroup的,可用于執(zhí)行測(cè)試后動(dòng)作。這些線程的行為完全像一個(gè)正常的線程組元件。不同的是,這些類型的線程執(zhí)行測(cè)試結(jié)束后執(zhí)行定期的線程組。
可能你還是不太理解他們與普通的線程組有什么不同。 如果您用過(guò)junit,想必你不會(huì)對(duì)setup ,teardown這2個(gè)字眼陌生。 即時(shí)沒(méi)用過(guò),也沒(méi)關(guān)系。 熟悉loadrunner的應(yīng)該知道,loadrunner的腳本除了action里是真正的腳本核心內(nèi)容,還有初始化“環(huán)境”的初始化腳本和測(cè)試完畢后對(duì)應(yīng)的清除信息的腳本塊。 那么這里 setup thread group 和 teardown thread group 是分別指這兩部分。 其實(shí)從本質(zhì)上來(lái)看,他們并沒(méi)有什么不同。
3) thread group(線程組).
這個(gè)是我們通常添加運(yùn)行的線程。通俗的講一個(gè)線程組,,可以看做一個(gè)虛擬用戶組,線程組中的每個(gè)線程都可以理解為一個(gè)虛擬用戶。線程組中包含的線程數(shù)量在測(cè)試執(zhí)行過(guò)程中是不會(huì)發(fā)生改變的。
測(cè)試片段(Test Fragment)
測(cè)試片段是在2.5版本之后新加的一個(gè)選項(xiàng)。
測(cè)試片段元素是控制器上的一個(gè)種特殊的線程組,它在測(cè)試樹上與線程組處于一個(gè)層級(jí)。它與線程組有所不同,因?yàn)樗槐粓?zhí)行,除非它是一個(gè)模塊控制器或者是被控制器所引用時(shí)才會(huì)被執(zhí)行。
取樣器(Sampler)
取樣器(Sample)是性能測(cè)試中向服務(wù)器發(fā)送請(qǐng)求,記錄響應(yīng)信息,記錄響應(yīng)時(shí)間的小單元,JMeter 原生支持多種不同的sampler ,如 HTTP Request Sampler 、 FTP Request Sample 、TCP Request Sample 、JDBC Request Sampler 等,每一種不同類型的 sampler 可以根據(jù)設(shè)置的參數(shù)向服務(wù)器發(fā)出不同類型的請(qǐng)求。
邏輯控制器(Logic Controller)
邏輯控制器,包括兩類元件,一類是用于控制test plan 中 sampler 節(jié)點(diǎn)發(fā)送請(qǐng)求的邏輯順序的控制器,常用的有 如果(If)控制器 、switch Controller 、Runtime Controller、循環(huán)控制器等。另一類是用來(lái)組織可控制 sampler 來(lái)節(jié)點(diǎn)的,如 事務(wù)控制器、吞吐量控制器。
配置元件(Config Element)
配置元件(config element)用于提供對(duì)靜態(tài)數(shù)據(jù)配置的支持。CSV Data Set config 可以將本地?cái)?shù)據(jù)文件形成數(shù)據(jù)池(Data Pool),而對(duì)應(yīng)于HTTP Request Sampler和 TCP Request Sampler等類型的配制無(wú)件則可以修改Sampler的默認(rèn)數(shù)據(jù)。
定時(shí)器(Timer)
定時(shí)器(Timer)用于操作之間設(shè)置等待時(shí)間,等待時(shí)間是性能測(cè)試中常用的控制客戶端QPS的手端。類似于LoadRunner里面的“思考時(shí)間”。JMeter 定義了Bean Shell Timer、Constant Throughput Timer、固定定時(shí)器等不同類型的Timer。
前置處理器(Per Processors)
用于在實(shí)際的請(qǐng)求發(fā)出之前對(duì)即將發(fā)出的請(qǐng)求進(jìn)行特殊處理。例如,HTTP URL重寫修復(fù)符則可以實(shí)現(xiàn)URL重寫,當(dāng)RUL中有sessionID 一類的session信息時(shí),可以通過(guò)該處理器填充發(fā)出請(qǐng)求的實(shí)際的sessionID 。
后置處理器(Post Processors)
用于對(duì)Sampler 發(fā)出請(qǐng)求后得到的服務(wù)器響應(yīng)進(jìn)行處理。一般用來(lái)提取響應(yīng)中的特定數(shù)據(jù)(類似LoadRunner測(cè)試工具中的關(guān)聯(lián)概念)。例如,XPath Extractor 則可以用于提取響應(yīng)數(shù)據(jù)中通過(guò)給定XPath 值獲得的數(shù)據(jù)。
斷言(Assertions)
斷言用于檢查測(cè)試中得到的相應(yīng)數(shù)據(jù)等是否符合預(yù)期,斷言一般用來(lái)設(shè)置檢查點(diǎn),用以保證性能測(cè)試過(guò)程中的數(shù)據(jù)交互是否與預(yù)期一致。
監(jiān)聽(tīng)器(Listener)
這個(gè)監(jiān)聽(tīng)器可不是用來(lái)監(jiān)聽(tīng)系統(tǒng)資源的元件。它是用來(lái)對(duì)測(cè)試結(jié)果數(shù)據(jù)進(jìn)行處理和可視化展示的一系列元件。 圖行結(jié)果、查看結(jié)果樹、聚合報(bào)告。都是我們經(jīng)常用到的元件。
到此,我們已經(jīng)簡(jiǎn)單了解了JMeter的基本組成元件,后續(xù)我們通過(guò)設(shè)置參數(shù)和聚合報(bào)告來(lái)執(zhí)行一個(gè)簡(jiǎn)單的性能測(cè)試。