Jmeter (一)


Jmeter 簡介

  Apache JMeter 是 Apache 組織的開放源代碼項目,是一個純 Java 桌面應用,用於壓力測試和性能測試。它最初
被設計用於 Web 應用測試但后來擴展到其它測試領域。
 

Jmeter 功能

  • 能夠對 HTTP 和 FTP 服務器進行壓力和性能測試, 也可以對任何數據庫進行同樣的測試(通過 JDBC)。
  • 完全的可移植性和 100% 純 java。
  • 完全 Swing(Java 設計的 GUI 工具包)和輕量組件支持。
  • 完全多線程 框架允許通過多個線程並發取樣和通過單獨的線程組對不同的功能同時取樣。
  • 精心的 GUI 設計允許快速操作和更精確的計時。
  • 緩存和離線分析/回放測試結果。
 

Jmeter 接口測試

  Jmeter 接口測試的簡單操作包括做 http 腳本編輯(發 get/post 請求、cookie 設置、header 設置、權限認證)、
參數化、斷言、關聯和數據驅動等等。
 

Jmter 安裝啟動

下載安裝
說明
一般開放原代碼軟件都會有兩個版本發布: Source 和 Binary
• Source 是源代碼版,你需要自己編譯成可執行軟件。
• Binary 是可執行版,直接可以拿來用的,他已經給你編譯好的版本
• 下載后,解壓文件到任意目錄,避免在有空格的路徑安裝 JMeter。
• 環境依賴: java 環境,需要自行安裝配置好 JDK 環境變量
 

啟動軟件

  進入到 jmeter 的 bin 目錄,雙擊運行 JMeter.bat 即可啟動軟件,如下界面:

 

 

Jmeter 接口測試實踐

Jmeter 腳本編寫一般分五個步驟:
1. 添加線程組
2. 添加 http 請求
3. 在 http 請求中寫入接入 url、路徑、請求方式和參數
4. 添加查看結果樹
5. 調用接口、查看返回值
 

一、測試 API

http://httpbin.org
 

1.1 發送 Get 請求

請求 URL 如下:
http://httpbin.org/get
在 Jmeter 配置如下圖所示:
 
在查看結果樹選擇 Json Path Tester 如下圖所示可以看到返回結果:
 

 

 

1.2 、發送 POST 請求

請求 URL 如下
http://httpbin.org/post
Jmeter 配置如下圖所示:

 

1.3、查看響應結果

 

 

 

1.4、HTTP 請求默認值

  通過上面兩個請求我們發現,Web 服務器中的協議和服務器名稱或 IP 這兩個值都是一樣,每次重復輸入其實比較麻
煩,因此我們可以使用 HTTP 請求默認值來管理這些公共的配置數據。
 
添加步驟:線程組——添加——配置元件——HTTP 請求默認值 然后進行如下配置,並把該元件放置到請求前面。
 
經過請求默認值的配置后,后續我們增加新的請求,如果這兩項值是一樣的話,那么則無需再重復填入該值。
 

1.5、斷言設置

Jmeter 可以針對每一個請求響應進行斷言。
設置步驟:選中一個請求,如 http-get,然后右鍵選擇:添加——斷言——響應斷言。
 
各個匹配模式含義如下:
• 包括:響應內容包括需要匹配的內容即代表響應成功,支持正則表達式
• 匹配:響應內容要完全匹配需要匹配的內容即代表響應成功,大小寫不敏感,支持正則表達式。
• Equals:響應內容要完全等於需要匹配的內容才代表成功,大小寫敏感,需要匹配的內容是字符串正則表
達式
• Substring:返回結果包含指定結果的字串,但是 subString 不支持正則字符串
• 否:不進行匹配
• 或者
如下圖所示匹配返回的字符串是否包含 http://httpbin.org/get
 
如果斷言成功,則查看結果樹為綠色標志,如果斷言失敗則為紅色顯示,如下圖所示:
 

 

 

1.6、參數設置

Jmeter 支持通過 Query String Parameters 或者 Request body 請求體來傳遞參數。
Query String Parameters
如果希望在請求 URL 中添加參數,則可以在 Http 請求界面的 Parameters 選項里面添加參數。
該參數會通過 Query String Parameters 方式傳遞給服務器,也就是在 URL 中傳遞參數。 如下圖如所示設置參數:
 

 

 

1.7、Request body

在 Post 請求中參數一般在 body 中傳遞,Jmeter 也支持在 body 中傳遞參數。如傳遞 Json 格式的參數,在 Body
Data 編輯框輸入如下參數:
{"username":"huang"}
另外還需要指定參數的格式,因此需要添加 HTTP 信息頭管理器
添加步驟:選定請求——添加——配置元件——HTTP 信息頭管理器,然后在管理器里面添加參數類型 Content-Type :application/json  如下圖所示:

 

二、變量

在請求過程中,有時我們需要在請求中設置一些變量來測試不同的場景。
Jmeter 支持以下類型變量:
• 用戶自定義變量
• 函數生成變量
• BeanShell 變量
• 數據文件變量
 
 

2.1、用戶自定義變量

設置步驟: 選中請求——添加——前置處理器——用戶參數 設置變量名稱為 user,值為 huang

 

在請求時引用變量如下所示: 變量引用格式為:${user}
 

 

 

 

2.2、函數生成變量

Jmeter 有許多內置的函數,可以生成隨機數。創建步驟:點擊菜單欄選項——函數助手對話框——下拉選擇
__Random()函數 函數配置如下: 

 

 

2.3、BeanShell 變量

什么是 Bean Shell?
• BeanShell 是一種完全符合 Java 語法規范的腳本語言,並且又擁有自己的一些語法和方法;
• BeanShell 是一種松散類型的腳本語言(這點和 JS 類似);
• BeanShell 是用 Java 寫成的,一個小型的、免費的、嵌入式的 Java 源代碼解釋器,具有對象腳本語言特性,非
常精簡。
• BeanShell 執行標准 Java 語句和表達式,另外包括一些腳本命令和語法。 官網: http://www.BeanShell.org/
 
Jmeter 有哪些 Bean Shell?
• 定時器: BeanShell Timer
• 前置處理器:BeanShell PreProcessor
• 采樣器: BeanShell Sampler
• 后置處理器:BeanShell PostProcessor
• 斷言: BeanShell 斷言
• 監聽器: BeanShell Listener
 
Bean Shell 常用內置變量
JMeter 在它的 BeanShell 中內置了變量,用戶可以通過這些變量與 JMeter 進行交互,其中主要的變量及其使用
方法如下:
vars - (JMeterVariables):操作jmeter變量,這個變量實際引用了JMeter線程中的局部變量容器(本質上是Map),
它是測試用例與 BeanShell 交互的橋梁,常用方法:
//定義 jmeter 變量
vars.put(String key,String value);
//從 jmeter 中獲取變量
vars.get(String key);
log:寫入信息到 jmeber.log 文件,使用方法: 
log.info(“hello huang!”);

 

BeanShell 實踐案例
1.創建請求名為 beanshell_test 的 Http 請求,請求地址為:http://httpbin.org/get 同時設置傳遞的參數為 beanshell_user

 

2.創建 BeanShell PreProcessor 變量設置如下所示: 

 

 

 

 

3.最后運行結果可以看到,設置的變量已經生效
 

 

 

2.4、CSV 數據文件變量

CSV 數據文件變量是指從外部 csv 文件讀取數據出來作為變量。
設置步驟: 選擇請求——添加——配置元件——CSV 數據文件設置
創建 csv 文件(最好不用用記事本創建,推薦用 Nodepad++)文件編碼為 UTF-8 文件內容如下:user_data.csv
huang,8888
CSV 數據文件設置如下:

 

 

在 Post 請求中引用變量數據如下:
 

 

運行之后在查看結果樹中請求選項欄可以看到獲取的變量數據。

 

 

三、CSV 參數化

針對之前的 POST 接口進行如下參數遍歷測試:
接口如下:
http://httpbin.org/post
發送參數:user_datas.csv

zhangsan,123
lisi,6666
wangwu,999
mazi,2222

在之前的 csv 數據文件設置需要需改配置如下:表示把所有數據讀取一遍,且不重復。

 ❖ Filename --- 參數項文件

❖ File Encoding --- 文件的編譯方法,一般為空
❖ Vaiable Names --- 文件中各列所表示的參數項;各參數項之間利用逗號分隔;參數項的名稱應該與HTTP Request 中的參數項一致。
❖ Delimiter --- 如文件中使用的是逗號分隔,則填寫逗號;如使用的是 TAB,則填寫\t;
❖ Recycle on EOF? --- True=當讀取文件到結尾時,再重頭讀取文件,False=當讀取文件到結尾時,停止讀取文件
❖ Stop thread on EOF? --- 當 Recycle on EOF?一項為 False 時起效;True=當讀取文件到結尾時,停止進程
 
 
接口請求名稱格式更改為:http-csv-post-${user} 方便我們后續查看數據遍歷情況。
最后修改線程組的線程數量,因為數據中有 4 組數據,所以設置為 4.
 
運行查看結果如下: 

 

 

四、正則匹配

問題思考
接口測試過程中經常需要接口之間關聯調用,比如獲取上一個接口的返回值,作為另一個接口的請求參數,那么該如何從處理呢?
這里需要使用 Jmeter 的正則表達式提取器,通過對響應的數據來提取指定的數據。
 
操作案例
從請求 http-get 響應數據中匹配隨機數 num 的值,然后創建請求 get-num 來引用 num 的作為請求參數。
設置步驟:
選中請求——添加——后置處理器——正則表達式提取器
根據 http-get 的響應,提取返回值中的 host 配置如下:
 
 

 

 

正則表達式配置表
• 引用名稱:請求要引用的變量名稱,如填寫 result_host,則可用${result_host}引用它。
• 正則表達式:匹配需要的內容。
• 模板:用$num$引用起來,如果在正則表達式中有多個匹配數據,num 表示匹配到的第幾個值給變量。如:$1$表示匹配到的第 1 個值存儲在變量中。
• 匹配數字:0 代表隨機取值,1 代表全部取值,
• 缺省值:如果參數沒有取得到值,那默認給一個值讓它取。
 
案例中正則表達式說明
• () :括起來的部分就是要提取的。
. :匹配任何字符串。
• + :一次或多次。
• ?:在找到第一個匹配項后停止。
  相關資料: 正則表達式教程 
 
新建一個請求 get-host,在新的請求中將 http-get 返回的數據作為參數傳遞,如下圖所示:
 

 

 查看結果如下圖:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM