聊一聊Jmeter的引數化

Catcher8發表於2021-05-01

背景

前面一篇講了 JMeter 的一個最簡單的例子,這篇聊一下 JMeter 的引數化。

在開始之前先來一個單元測試的例子,感受一下引數化。

上面是一個用 xUnit 寫的單元測試,這個單元測試就是一個引數化的例子:

模擬了不同的輸入,呼叫同一個方法,得到了不同的輸出。

對某一個場景,要驗證不同的輸入得到不同的輸出是非常有用的。

在 JMeter 裡面就可以通過引數化來實現這個效果。

JMeter 的引數化有很多種方法,本文主要是介紹基於 CSV Data Set Config 的引數化。

在這篇文章裡面,會通過一個簡單的場景來了解 JMeter 引數化的使用,以及自定義 jar 包的使用。

場景

這裡用一個大家最熟悉的登入場景做為例子。

登入最重要的就是使用者名稱和密碼這兩個內容,這裡會有兩種結果,登入成功和登入失敗。

在這個場景下,假設我們的介面定義是這樣的

POST http://localhost:8532/run?sign=sssss&appkey=aaaaa
Content-Type: application/json

{
   "userName":"catcherwong",
   "password":"xxxxx"
}
  • sign 的值是簽名,用來驗證引數是否被修改,這裡是不校驗的,所以隨便生成一個隨機數就可以了。
  • appKey 是定義的另一個引數,這裡也不做校驗的,也是隨機定義即可。

這個介面,會有兩種返回

登入失敗的, code 會是 1, msg就是錯誤資訊。

{"code":1,"msg":"使用者名稱或密碼錯誤"}

登入成功的, code 會是 0。

{"code":0,"msg":"ok","data":{"token":"626b97f78d794f4da927bc09ae6be245"}}

針對這個場景,簡單起見,只考慮 code 的值來判斷登入是否成功。

準備資料

場景有了,介面也有了,再下一步就是準備要用的資料了。

這裡是用 CSV 檔案來做為資料來源,所以我們把介面要用到的引數放進去。

準備了20條資料,第一列是使用者名稱,第二列是密碼,第三列是appkey,第四列是結果,表明用前面三列資料去呼叫登入介面,應該成功還是失敗。

然後線上程組裡面新增一個 CSV 的配置原件。

在裡面最主要的配置是 檔案路徑變數名

檔案路徑沒什麼好說的,就是 csv 檔案所在的具體路徑。

可以看到上面的 csv 檔案,我們是沒有定義頭部的,放的直接是資料,所以每一列資料代表什麼需要有一個標識。

這裡的變數名可以認為就是給準備的每一列資料起個別名,便於後面的使用,示例這裡是有4個的,每一個都是用英文逗號隔開。

配置HTTP請求

其中 name, pwd 和 appKey 這三個變數是前面已經定義好了的,所以這裡可以直接用 ${xx} 的方式去使用。

sign 這個引數是沒有定義的,所以要加一個 BeanShell PreProcessor 來處理一下。

到這裡,請求已經配置好了,下面就是要判斷登入是不是成功的了。

斷言

斷言這裡是要判斷返回的 JSON 結構裡面的 code 值是不是和 csv 檔案裡面定義的一樣。

所以這裡選擇的還是 JSON Assertion

要把期望值調整成變數名,這樣它才會根據不同的入參判斷不同的結果,上圖的例子是 ${login_res}

新增結果樹,調整執行緒組的迴圈次數為20,再執行這個執行緒組,就可以看到對應的結果了。

可以看到的是,20條資料都跑了一次,所有的用例都是可以過的。

但是這裡有一個問題,密碼是明文傳輸的!!!

這個是大忌,絕對不允許的,正常都會加密或雜湊之後再傳輸。所以這裡要做一個優化。

也就引入了,自定義 jar 包的使用。

自定義jar包調整

首先我們需要寫一些 JAVA 程式碼來編譯成一個 jar 包。

這裡老黃是直接寫好了,直接用就可以了。

調整一下 BeanShell PreProcessor ,如下圖所示:

首先是先引入自定義 jar 包,其次是從 vars 裡面拿到明文密碼,然後是呼叫 jar 包裡面的 getPwd 的方法對密碼進行處理,最後再把處理好之後的密碼放到一個新變數 ePwd 裡面。

由於之前的 sign 引數是寫死的123,這裡也改成呼叫 jar 包裡面的 getSign 方法來生成。

由於密碼引數換了一個變數,所以要調整一下 HTTP 請求。

最後再次執行,可以看到 密碼不再是明文了,sign值也不再是固定的了。

自定義的 jar 包,記得要在測試計劃裡面新增一下!

寫在最後

引數化是一個很有用的功能,可以讓我們的引數動起來。

相關文章