JMeter性能測試-安裝與入門

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ā)者的應(yīng)用

解決方案是打開終端,復(fù)制下面的代碼并粘貼到終端惹谐。

$ sudo spctl --master-disable

上面的代碼執(zhí)行完成后持偏,系統(tǒng)偏好設(shè)置中的“安全與隱私”默認(rèn)已經(jīng)選擇允許“任何來源”了⊥章簦現(xiàn)在再次點擊bin目錄下的ApacheJMeter.jar文件,就可以打開Apache JMeter的圖形界面鸿秆,如下圖所示酌畜,我們還可以選擇自己喜歡的外觀風(fēng)格。

Apache JMeter 4.0 圖形界面

在上圖所示的JMeter圖形界面中卿叽,界面左側(cè)的區(qū)域叫工作臺∏虐現(xiàn)在工作臺上只有一個測試計劃,測試計劃是用來描述一個性能測試附帽,包含與本次性能測試所有相關(guān)的功能埠戳,也就說本次性能測試的所有內(nèi)容是于基于一個測試計劃的。

線程與用戶

通過右鍵單擊測試計劃彈出菜單蕉扮,可以添加線程與用戶整胃,即Threads(Users)。雖然Threads(Users)下有三個添加線程組的選項喳钟,但創(chuàng)建之后屁使,圖形界面是一樣的。

在JMeter中添加線程組

Threads(Users)下有setUp theread Group奔则、terDown Thread Group蛮寂、線程組三個選項。

  • setUp theread Group:用于執(zhí)行預(yù)測試操作易茬,也就是測試開始前定期執(zhí)行的線程組
  • 線程組:我們通常添加的線程組酬蹋,可以當(dāng)成是一個虛擬用戶組,線程組中的每個線程都可以理解成一個虛擬用戶
  • terDown Thread Group:用于執(zhí)行測試后操作抽莱,也就是測試結(jié)束后定期執(zhí)行的線程組

下面我們再詳細看看線程組的具體設(shè)置范抓。

JMeter中線程組的設(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ā)出不同類型的請求眼俊。

在JMeter中添加取樣器

在那么多取樣器中意狠,我們就以較為常見的HTTP請求為例。

JMeter中HTTP請求的設(shè)置

還是按上面的圖片疮胖,從上到下介紹每一個選項的作用环戈。

  • 名稱:標(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í)行窑业。

在JMeter中添加邏輯控制器

我們以登錄場景下經(jīng)常會使用到的僅一次控制器為例钦幔。

JMeter中僅一次控制器的設(shè)置

如上圖,在測試計劃執(zhí)行期間常柄,該控制器下的取樣器對每個線程只執(zhí)行一次鲤氢,登錄場景經(jīng)常會使用到這個控制器。

配置元件

JMeter中的配置元件可以用來初始化默認(rèn)值和變量西潘,以便后續(xù)取樣器使用卷玉,將在其作用域的初始化階段處理。

在JMeter中添加配置元件

我們以計數(shù)器為例喷市,計數(shù)器允許用戶創(chuàng)建一個計數(shù)器相种,可以在線程組中任何地方被引用。

JMeter中計數(shù)器的設(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)該隔多長時間。

在JMeter中添加定時器

同樣的妥衣,我們以Constant Throughput Timer這個固定吞吐量定時器為例子皂吮。Constant Throughput Timer可以讓JMeter以指定數(shù)字的吞吐量執(zhí)行,即指定TPS税手,只是這里要求指定每分鐘的執(zhí)行數(shù)蜂筹,而不是每秒。

JMeter中Constant Throughput Timer的設(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í)行之前用來修改取樣器的掸刊。

在JMeter中添加前置處理器

以用戶參數(shù)這個前置處理器為例乃摹,用戶參數(shù)列表中的參數(shù)取值可以在測試計劃執(zhí)行過程中發(fā)生變化禁漓。

JMeter中用戶參數(shù)的設(shè)置

如上圖所示,參數(shù)username和password分別有兩組不同的取值孵睬,通過界面右下方的四個按鈕播歼,可以向列表中增加參數(shù)、增加參數(shù)值掰读、刪除參數(shù)和刪除參數(shù)值秘狞。勾選每次迭代更新一次后,則參數(shù)的值在每個迭代中保持不變蹈集,在新的迭代開始時取下一個值烁试,如果不勾選,則參數(shù)值在每個在其作用域內(nèi)的取樣器發(fā)出請求時取下一個可用值拢肆。

后置處理器

后置處理器用于對取樣器發(fā)出請求后得到的服務(wù)器響應(yīng)進行處理减响。

在JMeter中添加后置處理器

我們以正則表達式提取器為例,正則表達式提取器在請求完成后郭怪,會從響應(yīng)數(shù)據(jù)中截取一部分字符串保存到變量中支示,以便下一個請求使用。

JMeter中正則表達式提取器的設(shè)置

如上圖所示鄙才,下面是各個參數(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ù)期一致罐脊。

在JMeter中添加斷言

我們以Compare Assertion這個比較斷言為例定嗓,Compare Assertion是一種比較特殊的斷言,針對斷言進行字符串替換時使用萍桌。

JMeter中Compare Assertion的設(shè)置

如上圖所示宵溅,我們看一下每一個設(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)常用到的烦绳。

在JMeter中添加監(jiān)聽器

我們以聚合報告為例,聚合報告會統(tǒng)計響應(yīng)信息并提供請求數(shù)配紫、平均值径密、最大值、最小值躺孝、錯誤率享扔、大約吞吐量和吞吐量等數(shù)據(jù)。

JMeter中聚合報告的設(shè)置

對于聚合報告植袍,我們主要看一下它統(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ù)或链。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市档押,隨后出現(xiàn)的幾起案子澳盐,更是在濱河造成了極大的恐慌祈纯,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件洞就,死亡現(xiàn)場離奇詭異盆繁,居然都是意外死亡,警方通過查閱死者的電腦和手機旬蟋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門油昂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人倾贰,你說我怎么就攤上這事〈艺悖” “怎么了安寺?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長首尼。 經(jīng)常有香客問我挑庶,道長,這世上最難降的妖魔是什么软能? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任迎捺,我火速辦了婚禮,結(jié)果婚禮上查排,老公的妹妹穿的比我還像新娘凳枝。我一直安慰自己,他們只是感情好跋核,可當(dāng)我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布岖瑰。 她就那樣靜靜地躺著,像睡著了一般砂代。 火紅的嫁衣襯著肌膚如雪蹋订。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天刻伊,我揣著相機與錄音辅辩,去河邊找鬼。 笑死娃圆,一個胖子當(dāng)著我的面吹牛玫锋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播讼呢,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼撩鹿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了悦屏?” 一聲冷哼從身側(cè)響起节沦,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤键思,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后甫贯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吼鳞,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年叫搁,在試婚紗的時候發(fā)現(xiàn)自己被綠了赔桌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡渴逻,死狀恐怖疾党,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情惨奕,我是刑警寧澤雪位,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站梨撞,受9級特大地震影響雹洗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜卧波,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一队伟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧幽勒,春花似錦、人聲如沸港令。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽顷霹。三九已至咪惠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間淋淀,已是汗流浹背遥昧。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留朵纷,地道東北人炭臭。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像袍辞,于是被迫代替她去往敵國和親鞋仍。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容