1. 程式人生 > 實用技巧 >Jmeter介面測試01

Jmeter介面測試01

Jmeter 簡介   Apache JMeter 是 Apache 組織的開放原始碼專案,是一個純 Java 桌面應用,用於壓力測試和效能測試。它最初 被設計用於 Web 應用測試但後來擴充套件到其它測試領域。 Jmeter 功能   • 能夠對 HTTP 和 FTP 伺服器進行壓力和效能測試, 也可以對任何資料庫進行同樣的測試(通過 JDBC)。   • 完全的可移植性和 100% 純 java。   • 完全 Swing(Java 設計的 GUI 工具包)和輕量元件支援。   • 完全多執行緒 框架允許通過多個執行緒併發取樣和通過單獨的執行緒組對不同的功能同時取樣。   • 精心的 GUI 設計允許快速操作和更精確的計時。   • 快取和離線分析/回放測試結果。 Jmeter 介面測試
  Jmeter 介面測試的簡單操作包括做 http 指令碼編輯(發 get/post 請求、cookie 設定、header 設定、許可權認證)、 引數化、斷言、關聯和資料驅動等等。 Jmter 安裝啟動 下載安裝   Jmeter 下載地址   Jmeter 官方文件 說明 一般開放原始碼軟體都會有兩個版本釋出: 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 傳送 Get 請求 請求 URL 如下:
http://httpbin.org/get
在 Jmeter 配置如下圖所示: 在檢視結果樹選擇 Json Path Tester 如下圖所示可以看到返回結果:

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

響應結果:

HTTP 請求預設值   通過上面兩個請求我們發現,Web 伺服器中的協議和伺服器名稱或 IP 這兩個值都是一樣,每次重複輸入其實比較麻 煩,因此我們可以使用 HTTP 請求預設值來管理這些公共的配置資料。 新增步驟:執行緒組——新增——配置元件——HTTP 請求預設值 然後進行如下配置,並把該元件放置到請求前面。 經過請求預設值的配置後,後續我們增加新的請求,如果這兩項值是一樣的話,那麼則無需再重複填入該值。 斷言設定 Jmeter 可以針對每一個請求響應進行斷言。 設定步驟:選中一個請求,如 http-get,然後右鍵選擇:新增——斷言——響應斷言。 各個匹配模式含義如下: • 包括:響應內容包括需要匹配的內容即代表響應成功,支援正則表示式 • 匹配:響應內容要完全匹配需要匹配的內容即代表響應成功,大小寫不敏感,支援正則表示式。 • Equals:響應內容要完全等於需要匹配的內容才代表成功,大小寫敏感,需要匹配的內容是字串正則表 達式 • Substring:返回結果包含指定結果的字串,但是 subString 不支援正則字串 • 否:不進行匹配 • 或者 如下圖所示匹配返回的字串是否包含 http://httpbin.org/get 如果斷言成功,則檢視結果樹為綠色標誌,如果斷言失敗則為紅色顯示,如下圖所示:

引數設定 Jmeter 支援通過 Query String Parameters 或者 Request body 請求體來傳遞引數。 Query String Parameters 如果希望在請求 URL 中新增引數,則可以在 Http 請求介面的 Parameters 選項裡面新增引數。 該引數會通過 QueryString Parameters 方式傳遞給伺服器,也就是在 URL 中傳遞引數。 如下圖如所示設定引數:

Request body 在 Post 請求中引數一般在 body 中傳遞,Jmeter 也支援在 body 中傳遞引數。如傳遞 Json 格式的引數,在 Body Data 編輯框輸入如下引數:
{"username":"51zxw"}
另外還需要指定引數的格式,因此需要新增 HTTP 資訊頭管理器 新增步驟:選定請求——新增——配置元件——HTTP 資訊頭管理器,然後在管理器裡面新增引數型別Content-Type :application/json 如下圖所示:

變數 在請求過程中,有時我們需要在請求中設定一些變數來測試不同的場景。 Jmeter 支援以下型別變數: • 使用者自定義變數 • 函式生成變數 • BeanShell 變數 • 資料檔案變數 使用者自定義變數 設定步驟: 選中請求——新增——前置處理器——使用者引數 設定變數名稱為 user,值為 huang

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

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

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.最後執行結果可以看到,設定的變數已經生效

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 資料檔案設定需要需改配置如下:表示把所有資料讀取一遍,且不重複。

介面請求名稱格式更改為:http-csv-post-${user} 方便我們後續檢視資料遍歷情況。 最後修改執行緒組的執行緒數量,因為資料中有 4 組資料,所以設定為 4. 執行檢視結果如下:

正則匹配 問題思考 介面測試過程中經常需要介面之間關聯呼叫,比如獲取上一個介面的返回值,作為另一個介面的請求引數,那麼該如何從處理呢? 這裡需要使用 Jmeter 的正則表示式提取器,通過對響應的資料來提取指定的資料。 操作案例 從請求 http-get 響應資料中匹配隨機數 num 的值,然後建立請求 get-num 來引用 num 的作為請求引數。 設定步驟: 選中請求——新增——後置處理器——正則表示式提取器 根據 http-get 的響應,提取返回值中的 host 配置如下:

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

檢視結果如下圖: