到Apache JMeter官網(wǎng)下載最新版本的JMeter Source壓縮包骗污,解壓到指定目錄下即可何暮。之后進入bin目錄买猖,點擊ApacheJMeter.jar文件即可打開Apache JMeter的圖形界面询筏。
如果是在Mac系統(tǒng)下膨蛮,可能會出現(xiàn)下圖所示錯誤叠纹,因為在最新的macOS Sierra系統(tǒng)下,系統(tǒng)偏好設(shè)置中的“安全與隱私”默認(rèn)已經(jīng)去除了允許“任何來源”App的選項敞葛,如果不開啟會直接影響到無法運行一些第三方應(yīng)用誉察。
解決方案是打開終端,復(fù)制下面的代碼并粘貼到終端惹谐。
$ sudo spctl --master-disable
上面的代碼執(zhí)行完成后持偏,系統(tǒng)偏好設(shè)置中的“安全與隱私”默認(rèn)已經(jīng)選擇允許“任何來源”了⊥章簦現(xiàn)在再次點擊bin目錄下的ApacheJMeter.jar文件,就可以打開Apache JMeter的圖形界面鸿秆,如下圖所示酌畜,我們還可以選擇自己喜歡的外觀風(fēng)格。
在上圖所示的JMeter圖形界面中卿叽,界面左側(cè)的區(qū)域叫工作臺∏虐現(xiàn)在工作臺上只有一個測試計劃,測試計劃是用來描述一個性能測試附帽,包含與本次性能測試所有相關(guān)的功能埠戳,也就說本次性能測試的所有內(nèi)容是于基于一個測試計劃的。
線程與用戶
通過右鍵單擊測試計劃彈出菜單蕉扮,可以添加線程與用戶整胃,即Threads(Users)。雖然Threads(Users)下有三個添加線程組的選項喳钟,但創(chuàng)建之后屁使,圖形界面是一樣的。
Threads(Users)下有setUp theread Group奔则、terDown Thread Group蛮寂、線程組三個選項。
- setUp theread Group:用于執(zhí)行預(yù)測試操作易茬,也就是測試開始前定期執(zhí)行的線程組
- 線程組:我們通常添加的線程組酬蹋,可以當(dāng)成是一個虛擬用戶組,線程組中的每個線程都可以理解成一個虛擬用戶
- terDown Thread Group:用于執(zhí)行測試后操作抽莱,也就是測試結(jié)束后定期執(zhí)行的線程組
下面我們再詳細看看線程組的具體設(shè)置范抓。
按上面的圖片,我們從上到下介紹每一個選項的作用食铐。
- 名稱:給線程組設(shè)置一個名稱
- 注釋:給線程組添加備注信息
- 在取樣器錯誤后要執(zhí)行的動作:在線程執(zhí)行過程中匕垫,出現(xiàn)錯誤失敗后要如何處理
- 繼續(xù):請求不會停止,繼續(xù)執(zhí)行
- Start Next Thread Loop:忽略線程當(dāng)前循環(huán)錯誤虐呻,執(zhí)行下一個循環(huán)
- 停止線程:停止當(dāng)前錯誤線程象泵,不影響其他線程執(zhí)行
- 停止測試:當(dāng)前執(zhí)行的線程全部執(zhí)行完畢后結(jié)束
- Stop Test Now:馬上停止全部線程
- 線程數(shù):虛擬用戶數(shù),一個虛擬用戶占用一個線程斟叼,需要多少用戶并發(fā)偶惠,就設(shè)置多少個線程數(shù)
- Ramp-Up Period(in seconds):設(shè)置的線程數(shù)需要多長時間全部啟動,比如線程數(shù)為100朗涩,準(zhǔn)備時長為10洲鸠,那么需要10秒啟動100個線程,也就是每秒啟動10個線程
- 循環(huán)次數(shù):每個線程發(fā)送請求的次數(shù),比如線程數(shù)為20扒腕,循環(huán)次數(shù)為100,那么每個線程發(fā)送100次請求萤悴,則總請求數(shù)為20*100=2000瘾腰。如果勾選了永遠,那么所有線程會一直發(fā)送請求覆履,一直到測試停止運行為止
- Delay Thread creation until needed:勾選后蹋盆,線程只會在合適的、需要用到的時候創(chuàng)建
- 調(diào)度器:勾選后硝全,可以設(shè)置本次測試的持續(xù)時間和啟動延遲時間
想要實現(xiàn)測試栖雾,除了設(shè)置線程組,還需要設(shè)置控制器伟众,在JMeter中有兩種類型的控制器:取樣器和邏輯控制器析藕,使用這些控制器可以驅(qū)動處理一個測試。
取樣器
通過右鍵單擊線程組彈出菜單凳厢,可以添加取樣器账胧,即Sampler。取樣器是性能測試中向服務(wù)器發(fā)送請求先紫,記錄響應(yīng)信息治泥,記錄響應(yīng)時間的最小單元。JMeter支持多種不同的取樣器遮精,如HTTP請求居夹、FTP請求、TCP取樣器本冲、JDBC Request准脂、Java請求等,每一種不同類型的取樣器可以根據(jù)設(shè)置的參數(shù)向服務(wù)器發(fā)出不同類型的請求眼俊。
在那么多取樣器中意狠,我們就以較為常見的HTTP請求為例。
還是按上面的圖片疮胖,從上到下介紹每一個選項的作用环戈。
- 名稱:標(biāo)識當(dāng)前取樣器,使用一個有意義的名稱
- 注釋:給當(dāng)前取樣器添加備注信息
- 協(xié)議:向目標(biāo)服務(wù)器發(fā)送HTTP請求時的協(xié)議澎灸,填寫http或https院塞,默認(rèn)為http
- 服務(wù)器名稱或IP:目標(biāo)服務(wù)器的域名或IP地址
- 端口號:目標(biāo)服務(wù)器的端口號,默認(rèn)為80
- 方法:發(fā)送HTTP請求的方法性昭,可選擇GET拦止、POST、HEAD等方法
- 路徑:目標(biāo)URL路徑,不包括服務(wù)器地址和端口
- Content encoding:內(nèi)容的編碼方式汹族,默認(rèn)為iso8859
- 自動重定向:勾選后萧求,當(dāng)發(fā)送HTTP請求后得到的響應(yīng)是302/301時,自動重定向到新的頁面
- 跟隨重定向:勾選后顶瞒,與自動重定向不同的是夸政,會記錄重定向過程中的所有請求響應(yīng),在查看結(jié)果樹時可以看到服務(wù)器返回的內(nèi)容榴徐,并對響應(yīng)的內(nèi)容做關(guān)聯(lián)
- Use KeepAlive:勾選后守问,和目標(biāo)服務(wù)器之間使用Keep-Alive方式進行HTTP通信
- Browser-compatible headers:勾選后,當(dāng)使用multipart/form-data時坑资,會只發(fā)送Content-Disposition標(biāo)頭
- 同請求一起發(fā)送參數(shù):在請求中發(fā)送URL參數(shù)耗帕,可以將URL中所有參數(shù)設(shè)置在本表中,表中的每一行是一個參數(shù)值對
以上就是HTTP請求取樣器的大部分內(nèi)容袱贮。
邏輯控制器
邏輯控制器可以控制取樣器的執(zhí)行順序仿便,因此,邏輯控制器需要與取樣器配合使用字柠,否則邏輯控制器就沒有什么意義探越。放在邏輯控制器下面的所有的取樣器都會當(dāng)做一個整體,執(zhí)行時也會一起被執(zhí)行窑业。
我們以登錄場景下經(jīng)常會使用到的僅一次控制器為例钦幔。
如上圖,在測試計劃執(zhí)行期間常柄,該控制器下的取樣器對每個線程只執(zhí)行一次鲤氢,登錄場景經(jīng)常會使用到這個控制器。
配置元件
JMeter中的配置元件可以用來初始化默認(rèn)值和變量西潘,以便后續(xù)取樣器使用卷玉,將在其作用域的初始化階段處理。
我們以計數(shù)器為例喷市,計數(shù)器允許用戶創(chuàng)建一個計數(shù)器相种,可以在線程組中任何地方被引用。
如上圖所示品姓,計數(shù)器界面有以下設(shè)置項寝并。
- Starting value:計數(shù)器的起始值,第一次迭代時會把該值賦給計數(shù)器
- 遞增:每次迭代后腹备,給計數(shù)器增加的值
- Maximum value:計數(shù)器的最大值衬潦,如果超過最大值,重新設(shè)置為起始值植酥,如果持續(xù)測試镀岛,建議不要設(shè)置最大值
- Number format:可選格式弦牡,比如000,格式化為001漂羊、002
- 引用名稱:用于控制在其它元素中引用該值驾锰,形式為$(reference_name}
- 與每用戶獨立的跟蹤計數(shù)器:不勾選時,即全局的的計數(shù)器走越,比如用戶#1獲取值為1稻据,用戶#2獲取值還是為1。勾選后买喧,即獨立的計數(shù)器,每個用戶有自己的值匆赃,比如用戶#1獲取值為1淤毛,#2獲取值為2
- Reset counter on each Thread Group Iteration:勾選與每用戶獨立的跟蹤計數(shù)器后,才可以選擇算柳。勾選后低淡,則每次線程組迭代,都會重置計數(shù)器的值瞬项,當(dāng)線程組是在一個循環(huán)控制器內(nèi)時比較有用
以上就是計數(shù)器配置元件的大部分內(nèi)容蔗蹋。
定時器
默認(rèn)情況下,Jmeter的線程在發(fā)送請求時沒有間歇囱淋,我們可以使用定時器來設(shè)置延遲與同步猪杭,以便設(shè)定請求之間應(yīng)該隔多長時間。
同樣的妥衣,我們以Constant Throughput Timer這個固定吞吐量定時器為例子皂吮。Constant Throughput Timer可以讓JMeter以指定數(shù)字的吞吐量執(zhí)行,即指定TPS税手,只是這里要求指定每分鐘的執(zhí)行數(shù)蜂筹,而不是每秒。
如上圖所示芦倒,下面我們認(rèn)識一下Constant Throughput Timer的設(shè)置選項艺挪。
- 名稱:定時器的描述性名稱
- 注釋:定時器的注釋信息
- Target throughput(in samples per minute):每分鐘的吞吐量
- Calculate Throughput based on:有以下選項可以選擇
- This thread only:控制每個線程的吞吐量,總吞吐量=設(shè)置的吞吐量*線程的數(shù)量
- All active threads:設(shè)置的吞吐量將分配在每個活躍線程上兵扬,每個活躍線程在上一次運行結(jié)束后等待合理的時間后再次運行麻裳,活躍線程是指同一時刻同時運行的線程
- All avtive threads(shared):與All active threads基本相同,不同的是,每個活躍線程都會在所有活躍線程上一次運行結(jié)束后等待合理的時間后再次運行
- All active threads in current thread group:設(shè)置的吞吐量將分配在當(dāng)前線程組的每一個活躍線程上,當(dāng)測試計劃中只有一個線程組時侧纯,該選項和All active threads選項的效果一樣
- All active threads in current thread group(shared):與All active threads in current thread group基本一樣蒸走,不同的是,每個活躍線程都會在所有活躍線程的上一次運行結(jié)束后等待合理的時間后再次運行
以上就是Constant Throughput Timer定時器的大部分內(nèi)容糕簿。
前置處理器
前置處理器用于在實際的請求發(fā)出之前對即將發(fā)出的請求進行特殊處理特占,即在取樣器執(zhí)行之前用來修改取樣器的掸刊。
以用戶參數(shù)這個前置處理器為例乃摹,用戶參數(shù)列表中的參數(shù)取值可以在測試計劃執(zhí)行過程中發(fā)生變化禁漓。
如上圖所示,參數(shù)username和password分別有兩組不同的取值孵睬,通過界面右下方的四個按鈕播歼,可以向列表中增加參數(shù)、增加參數(shù)值掰读、刪除參數(shù)和刪除參數(shù)值秘狞。勾選每次迭代更新一次后,則參數(shù)的值在每個迭代中保持不變蹈集,在新的迭代開始時取下一個值烁试,如果不勾選,則參數(shù)值在每個在其作用域內(nèi)的取樣器發(fā)出請求時取下一個可用值拢肆。
后置處理器
后置處理器用于對取樣器發(fā)出請求后得到的服務(wù)器響應(yīng)進行處理减响。
我們以正則表達式提取器為例,正則表達式提取器在請求完成后郭怪,會從響應(yīng)數(shù)據(jù)中截取一部分字符串保存到變量中支示,以便下一個請求使用。
如上圖所示鄙才,下面是各個參數(shù)值的含義颂鸿。
- Apply to:應(yīng)用的范圍
- Main sample and sub-samples:作用于父節(jié)點的取樣器及對應(yīng)子節(jié)點的取樣器
- Main sample only:僅作用于父節(jié)點的取樣器
- Sub-samples only:僅作用于子節(jié)點的取樣器
- JMeter Variable:作用于jmeter變量,輸入框內(nèi)可輸入jmeter的變量名稱
- 要檢查的響應(yīng)字段:樣本數(shù)據(jù)源
- 主體:響應(yīng)報文的主體
- Body(unescaped):響應(yīng)的主體內(nèi)容咒循,但是替換了所有的html轉(zhuǎn)義符
- Body as a Document:從不同類型的文件中提取文本据途,會影響性能
- 信息頭:響應(yīng)報文的信息頭
- Request Headers:請求報文的信息頭
- URL:統(tǒng)一資源定位符,即網(wǎng)絡(luò)上用來描述信息資源的字符串
- 響應(yīng)代碼:響應(yīng)狀態(tài)碼叙甸,比如200颖医、404等
- 響應(yīng)信息:就是響應(yīng)信息呀
- 引用名稱:在HTTP等請求中,引用此數(shù)據(jù)裆蒸,需要用到的名稱
- 正則表達式:用于將需要的數(shù)據(jù)提取出來的正則表達式
- 模板:表示使用提取到的第幾個值熔萧,$-1$表示取所有值,$0$表示隨機取值僚祷,$1$表示取第1個佛致,以此類推$n$表示取第n個
- 匹配數(shù)字(0代表隨機):0代表隨機取值,1代表全部取值
- 缺省值:如果正則表達式?jīng)]有搜找到值辙谜,則使用此缺省值
以上就是正則表達式提取器這個后置處理器的大部分內(nèi)容俺榆。
斷言
斷言用于檢查測試中得到的相應(yīng)數(shù)據(jù)等是否符合預(yù)期,斷言一般用來設(shè)置檢查點装哆,用以保證性能測試過程中的數(shù)據(jù)交互是否與預(yù)期一致罐脊。
我們以Compare Assertion這個比較斷言為例定嗓,Compare Assertion是一種比較特殊的斷言,針對斷言進行字符串替換時使用萍桌。
如上圖所示宵溅,我們看一下每一個設(shè)置的內(nèi)容。
- Compare Content:可以選擇比較的內(nèi)容類型上炎,True恃逻、False或自定義編輯
- Compare Time:比較時間,可以設(shè)定比較的時間藕施,單位為秒寇损,默認(rèn)為-1
- Regex String:要替換的字符串,可從斷言結(jié)果中選擇
- Substitutions:替換的字符串裳食,即替換結(jié)果
以上就是Compare Assertion這個斷言的大部分內(nèi)容润绵。
監(jiān)聽器
監(jiān)聽器可不是用來監(jiān)聽系統(tǒng)資源的,它是用來對測試結(jié)果數(shù)據(jù)進行處理和可視化展示的胞谈,圖形結(jié)果、察看結(jié)果樹憨愉、聚合報告等都是我們經(jīng)常用到的烦绳。
我們以聚合報告為例,聚合報告會統(tǒng)計響應(yīng)信息并提供請求數(shù)配紫、平均值径密、最大值、最小值躺孝、錯誤率享扔、大約吞吐量和吞吐量等數(shù)據(jù)。
對于聚合報告植袍,我們主要看一下它統(tǒng)計了那些數(shù)據(jù)惧眠。
- Label:每個部分的Name值,例如HTTP請求的Name
- Samples:發(fā)出請求數(shù)量
- Average:平均響應(yīng)時間于个,默認(rèn)是單個請求的平均響應(yīng)時間
- Median:中位數(shù)氛魁,也就是50%用戶的響應(yīng)時間
- 90%Line:90%用戶的響應(yīng)時間
- 95%Line:95%用戶的響應(yīng)時間
- 99%Line:99%用戶的響應(yīng)時間
- Min:最小響應(yīng)時間
- Max:最大響應(yīng)時間
- Error%:本次測試中出現(xiàn)錯誤的請求的數(shù)量/請求的總數(shù)
- Throughput:吞吐量,默認(rèn)情況下表示每秒完成的請求數(shù)
- KB/sec:每秒從服務(wù)器端接收到的數(shù)據(jù)量
到此為止厅篓,我們已經(jīng)簡單了解Jmeter的基本組成元件了秀存,我們以后的性能測試工作也就是使用這些元件來完成的,如果我們能靈活的使用Jmeter的這些元件羽氮,Jmeter就能完成各種各樣的測試任務(wù)或链。