Jmeter簡單玩一把
- 2019 年 11 月 3 日
- 筆記
jmeter作為瀏覽器與web服務器之間的代理,可以捕獲瀏覽器的請求和web服務器的響應,通過線程來模擬真實用戶對web服務器的訪問壓力。基本原理是建立一個線程池,多線程運行取樣器產生大量負載,在運行過程中通過斷言來驗證結果的正確性,可以通過監聽來記錄測試結果。
下載安裝
http://jmeter.apache.org/download_jmeter.cgi


目錄介紹

起步使用
點擊~/bin/jmeter.bat
後台啟動進程,並且提示通過命令執行方式【jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder】

顯示:

創建線程組
在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/HTTPS請求
參數說明:
Ø 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
單位毫秒。
參數化小試
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文件中的數據,循環次數才可以

參數文件使用小指導
編寫內容

獲取結果

顯示結果:

Html報告
如果想生成html報告可以參考,如下命令生成即可:
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder
Bean Shell小說明
一、在造數據時候,需要獲取結果到保存到本地 有兩種方式:第一種直接通過獲取結果保存到本地,第二種通過數據庫導出 今天介紹第一種,通過jmeter中正則表達式獲取: 步驟一:

第二步:

第三步

參考代碼
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 |
查看結果樹 |
小結
以上是Jmeter小用介紹。其實沒什麼都是常用命令。
Linux 啟動參考命令
#!/bin/bash #jmeter kill and start echo -e '