效能工具之 JMeter 快速入門

語言: CN / TW / HK

小知識,大挑戰!本文正在參與“程式設計師必備小知識”創作活動。

一、前言

JMeter 作為瀏覽器與web伺服器之間的代理,可以捕獲瀏覽器的請求和 web 伺服器的響應,通過執行緒來模擬真實使用者對 web 伺服器的訪問壓力。基本原理是建立一個執行緒池,多執行緒執行取樣器產生大量負載,在執行過程中通過斷言來驗證結果的正確性,可以通過監聽來記錄測試結果。

二、下載安裝

下載地址:http://jmeter.apache.org/download_jmeter.cgi

在這裡插入圖片描述 在這裡插入圖片描述

三、目錄介紹

在這裡插入圖片描述

四、快速使用

GUI 啟動點選:

bash ~/bin/jmeter.bat

後臺啟動程序,並且提示通過命令執行方式:

bash jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]

在這裡插入圖片描述 GUI 顯示: 在這裡插入圖片描述

五、建立執行緒組

在 TestPlan 位置點選右鍵選擇新建執行緒組如圖:

執行緒組是一系列執行緒的集合,每一個執行緒代表著一個正在使用應用程式的使用者。在 JMeter 中,每個執行緒意味著模擬一個真實使用者向伺服器發起請求。在 JMeter 中,執行緒組元件執行使用者設定執行緒數量、初始化方式等等配置。

在這裡插入圖片描述 成功顯示:

在這裡插入圖片描述 解釋說明:

作用:是一個測試計劃執行的開始點,裡面包含 sampler,controller 等等。 引數:

  • Name:執行緒組的名稱,可以隨意修改
  • Comments:備註資訊,記錄一些引數設定的原因和策略可填可不填
  • Action to be taken after a Sampler error:

執行緒內的取樣器失敗後,接下來採取的動作:

  • Continue:繼續執行接下來的操作
  • Start Next Thread Loop:執行下一個執行緒迴圈
  • Stop Thread:退出該執行緒,不在執行該執行緒的任何操作
  • Stop Test:等待該執行緒的取樣結束後,結束整個測試,不會立即停止
  • Stop Test Now:立即停止整個測試

Thread Properites:執行緒屬性

  • Number of Threads(users):執行緒數,也就是一共要啟動多少執行緒用來併發執行

  • Ramp-uo Period(in seconds):多長時間將上一步設定的執行緒數啟動完畢。設定不同的值可以驗證在不同併發的情況下驗證系統的效能

  • Loop Count:設定 sampler 迴圈的次數,勾上 Forever 後就會死迴圈一直執行

  • Scheduler:排程器,日程表。選上之後才能設定執行時間

  • Number of Threads * Loop Count 就是 Sampler 執行的次數,可以在 View Results Tree 中看到。

Scheduler Configuration:

  • Duration(seconnds):請求的執行時間(Loop Count 的 Forever 必須勾上才有效)

  • Startup delay(seconds):延遲時間,一般不用。但是如果想在指定的時間執行測試,可以用此配置。

  • setUp Thread Group、Thread Group 和 tearDown Thread Group3 種執行緒組都可以設定。 Thread Group中的執行規則

  • setUp、Thread Group 和 tearDown 序列執行

六、編寫 http 請求

在這裡插入圖片描述 成功顯示: 在這裡插入圖片描述 解釋:用來向伺服器傳送 HTTP(S) 請求

引數說明:

  • Name:元件名,可以修改
  • Comment:註釋資訊,可寫可不寫

Web Server:

  • Protocol[http]:不寫就是預設的 HTTP,可以根據實際情況指定
  • Server Name or IP:IP 或者域名,比如 cn.bing.com(不要加 http://,預設就帶;不能有路徑)

HTTP Request:

  • Port Number:HTTP 預設為 80,https 為 443
  • Path:/ 表示根目錄
  • Content encoding:內容編碼,如果請求有亂碼的話可以將其配置為 UTF-8 或者 ANSI

  • 配置項:預設值即可

  • Paramters:配置請求引數,比如新增 key--àvalue、編碼格式(url encode)、檔案型別
  • Body data:當選擇 body Data 時候並且輸入 Json 請求體後 Parameters 選項不能點選。【parameters and Body Data and Files Upload】不能同時選擇。
  • Files upload:上傳檔案,一般不用。

在這裡插入圖片描述 在這裡插入圖片描述

七、新增檢視結果樹

在這裡插入圖片描述

八、點選執行

在這裡插入圖片描述

九、顯示結果

在這裡插入圖片描述 說明:

檢視結果的常用方式

  • Text:預設的顯示方式,原始的 HTML 文字
  • HTML:以類似瀏覽器的格式檢視響應資料
  • RegExp Tester:支援正則用來做檢查點或者關聯使用;(在做關聯的時候可以在這裡做除錯是否寫得是否正確)
  • XPath Tester:xpath 方式提取內容;(在做關聯的時候可以在這裡做除錯是否寫得是否正確)
  • Scroll automatically:請求很多時可以自動滾屏

顯示資訊:

  • Sampler Result:本次請求的彙總資訊
  • 請求資訊:分為請求資料和請求頭
  • 響應資訊:分為響應資料和響應頭
  • Filename:可以將執行結果儲存到 Filename 指定的檔案中,注意:預設儲存在 JMeter 的 bin 目錄下。如果勾選了後面的 Errors,那麼只儲存錯誤資訊;如果勾選了 Success,那麼只儲存執行成功的資訊;都不勾選的話儲存所有的資訊
  • Browser:可以開啟之前儲存過的測試檔案,將測試資訊顯示到下面的 result 欄中。如果勾選了後面的 Errors,那麼只顯示錯誤資訊;如果勾選了 Success,那麼只顯示執行成功的資訊;都不勾選的話顯示所有的資訊

Sampler result 結果說明:

在這裡插入圖片描述

十、Summary RePort 展示

在這裡插入圖片描述 顯示結果: 在這裡插入圖片描述 解釋聚合報告標籤的含義:

  • Label:每個 JMeter 的 element 都有一個那麼屬性,這個顯示 name 屬性的值
  • sampler:表示在本次測試中一共發出請求數,11 個使用者,迴圈 1 次就是1

  • Average:平均響應時間,,預設情況下是單個 request 的平均響應時間,當使用了 transaction controller 時,也可以以transaction 為單位顯示平均響應時間
  • Median:中位數,50 %使用者的訪問時間在這個時間以下
  • 90% line:90%使用者的訪問時間在這個時間以下
  • min:最小響應時間
  • max:最大響應時間
  • error%:本次測試出現的錯誤數/總的請求數
  • Throughput:吞吐量,預設情況下表示每秒完成的請求數(Request per second)
  • KB/sec:每秒從伺服器接受到的資料量,相當於 LR 中 Throughput/sec 單位毫秒。

如果想生成 html 報告可以參考,如下命令生成即可:

bash jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder

十一、引數化小試

Jmeter 引數 CSV Data Set Config 用檔案做引數化 選擇配置原件中的 CSV Data Set Config

在這裡插入圖片描述

顯示:

在這裡插入圖片描述 引數說明:

  • Filename:檔案路徑。可以是相對路徑也可以是絕對路徑。可以是.txt檔案也可以是.csv檔案
  • File encoding:檔案編碼,預設問 ANSI,其它編碼根據實際情況配置
  • Variables Names(comma-delimited):變數名,表示將每一列賦值給一個變數,有多個列時同逗號分隔,後續通過${}引用
  • Ignore first line:忽略首行
  • Delimiter(use "\t" for tab):分隔符,預設為逗號
  • Allow quoted data?:資料是否帶引號,預設為false,如果資料中有引號的話就會把資料連同引號一起賦值給變數;如果為Flase的話就會把引號去掉
  • Recycle on EOF?:遇到檔案結束符是否再次迴圈,預設為True,也就是繼續從檔案開頭取值
  • Stop thread on EOF?:遇到檔案結束符是否結束執行緒,預設為False也就是不停止。注意:當【Recycle on EOF?】設定為True時,此項設定無效;當【Recycle on EOF?】設定為False,此項也設定為False,那麼到達檔案最後在引用變數就會變為 < EOF >
  • Sharing mode:共享模式。預設為 all threads,還支援 current thread group / current thread / edit

共享模式小結: - all treatds:csv 檔案中的資料是共享的,不管是執行緒數還是迴圈次數,都會觸發介面請求引數來使用 csv 檔案中不同行的變數資料

  • current thread group:線上程組內,執行緒數和迴圈次數都會觸發介面請求引數變化

  • current thread:迴圈了資料就會變化,執行緒數不能決定更新csv檔案中的資料,迴圈次數才可以

在這裡插入圖片描述

引數檔案使用: 1. 編寫內容

在這裡插入圖片描述

  1. 獲取結果

在這裡插入圖片描述 3. 顯示結果: 在這裡插入圖片描述

十二、BeanShell

在造資料時候,需要獲取結果到儲存到本地,有兩種方式: - 第一種直接通過獲取結果儲存到本地 - 第二種通過資料庫匯出

今天介紹第一種,通過 JMeter 中正則表示式獲取:

步驟一: 在這裡插入圖片描述 第二步: 在這裡插入圖片描述 第三步:

在這裡插入圖片描述 參考程式碼:

```bash FileOutputStream fps=new FileOutputStream("${outfile_online}",true); OutputStreamWriter osw=new OutputStreamWriter(fps); BufferedWriter bw=new BufferedWriter(osw);

bw.append("${mobile}\t${User}\t${User}\t${fd}\n");

if(bw!=null){bw.close();} if(osw!=null){osw.close();} if(fps!=null){fps.close();} ``` 第四步:

在這裡插入圖片描述 獲取結果: 在這裡插入圖片描述

十三、正則表示式 Regular Expression Extractor

在這裡插入圖片描述 簡單寫法: 在這裡插入圖片描述 正則表示式提取器說明:

  • Apply to:應用範圍
  • 要檢查的響應欄位:樣本資料來源。
  • 引用名稱:其他地方引用時的變數名稱,我這裡寫的 phone,可自定義設定,引用方法:${引用名稱}
  • 正則表示式:資料提取器,() 括號裡為你要獲取的的值。"phone":"( 相當於 LR 左邊界,)","name" 相當於 LR 右邊界。而括號裡 \d+ 為正則表示式,用來匹配所需要獲取的資料,何謂正則表示式文章末尾會附上說明
  • 模板: $$ 對應正則表示式提取器型別。-1 全部,0 隨機,1第一個2第二個,以此類推,若只有一個正則一般就填寫 $1$
  • 匹配數字:正則表示式匹配資料的所有結果可以看做一個數組,匹配數字即可看做是陣列的第幾個元素。-1 表示全部,0 隨機,1 第一個,2 第二個,以此類推。若只要獲取到匹配的第一個值,則填寫1
  • 預設值:匹配失敗時的預設值。可以不寫。若需用於後續邏輯判斷,可簡單寫為 ERROR。

十四、JMeter 常用快捷鍵參考

| 快捷鍵 | 功能 | 備註 | |:--------:|:-------------|:-------------| |Ctrl + C | 複製 | 可複製元件| | Ctrl + V | 貼上 | 可貼上元件| | Ctrl + Shift + C| 複製貼上當前元件到下一行 | | | Ctrl + R| 執行測試計劃 | | |Ctrl + E| 清空執行結果 | | |Ctrl + T| 啟用/禁用當前元件 | 可以多選 | | Ctrl + F| 全文搜尋 | 一般用來搜尋元件, 搜尋完成後可點選Search -> Reset Search恢復 | | Ctrl + -| 全部收起 | “-“為主鍵盤的減號 | |Ctrl + Shift + -| 全部展開 | “-“為主鍵盤的減號| | Ctrl + 0| 建立執行緒組 | | | Ctrl + 1| 新增HTTP請求 | | | Ctrl + 2| 正則表示式提取器 | | | Ctrl + 3| 響應斷言 | | | Ctrl + 4| 固定定時器 | | | Ctrl + 5| Test Action 5.0更改為Flow Control Action | JMeter流量控制動作 | | Ctrl + 6| JSR223 PostProcessor(後處理程式) | | | Ctrl + 7| JSR223 PreProcessor(前處理器)vars.put("key",value):將value存到jmeter變數key中,在後續請求中使用${“key”}進行引用。 | | | Ctrl + 8| Debug Sampler | | | Ctrl + 9| 檢視結果樹 | |

十五、Linux 快速啟動參考

參考程式碼: ```bash

!/bin/bash

jmeter kill and start

echo -e '\033[32m--------Jmeter---------------\033[0m' echo "kill 掉 jmeter-server 程序................... \n" kill -9 ps aux | grep jmeter | grep -v grep | awk '{print $2}' sleep 3 cd /root/tools/apache-jmeter-3.3/bin/ echo "啟動 jmeter-server" nohup ./jmeter-server & echo -e '\033[32m------------歡迎使用-----------------\033[0m' ```