聊一聊Jmeter的參數化


背景

前面一篇講了 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 包,記得要在測試計划里面添加一下!

寫在最后

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


免責聲明!

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



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