項目A需要給項目B提供一個接口,這個接口加密了,現在需要測試這個接口,需要怎么編寫腳本呢?實現接口簽名的方式有兩種:BeanShell實現MD5加密和函數助手實現MD5加密,之前已經分享過了函數助手實現MD5加密,今天就來分享下BeanShell實現MD5加密。
一、接口信息
POST /api/agent-pid
json請求參數
{
"app_id":1,
"timestamp":"1667033841",
"pid_num":2,
"sign":xxxxxxxxxxxxxxxxx
}
算法:
1、將請求參數按照鍵名進行升序排序,需要帶上時間戳
即app_id=${app_id}&pid_num=${pid_num}×tamp=${timestamp}
2、拼接秘鑰,將秘鑰拼接在參數后面
即app_id=${app_id}&pid_num=${pid_num}×tamp=${timestamp}${key}
3、將拼接后的結果取md5值
即DigestUtils.md5Hex(app_id=${app_id}&pid_num=${pid_num}×tamp=${timestamp}${key})
二、編寫JMeter腳本
結構如下:添加測試計劃,添加用戶自定義變量app_id,pid_num和key,添加前置處理器BeanShell,通過MD5加密,得到請求參數sign,添加線程組, 添加http請求,添加斷言,添加察看結果樹。
一)添加測試計劃
右鍵文件--新建--測試計劃
二)添加用戶定義的變量
選中測試計劃,右鍵--添加--配置元件--用戶定義的變量
定義三個變量,key,請求參數app_id和pid_num
三)添加前置處理器BeanShell
添加前置處理器BeanShell,來定義兩個變量timestamp和sign。
選中測試計劃,鼠標右鍵--添加--前置處理器--BeanShell PreProcessor,新建成功,命名為:timestamp,另一個變量sign方法類似。
1、時間戳timestamp
調用System.currentTimeMillis()函數,即可獲取時間戳,具體代碼如下:
//獲得系統的時間,單位為毫秒,轉換為秒
long timestamp1 = System.currentTimeMillis()/1000;
//將timestamp轉化為string類型,并復制給變量timestamp
vars.put("timestamp",timestamp1.toString());
2、簽名sign
主要用到md5Hex函數,取MD5值,具體代碼如下:
import org.apache.commons.codec.digest.DigestUtils;
//將請求參數按照鍵名進行升序排序,需要帶上時間戳
//拼接秘鑰,將秘鑰拼接在參數后面
String md5_str = "app_id=${app_id}&pid_num=${pid_num}×tamp=${timestamp}${key}";
log.info("md5_str:"+ md5_str);
//將拼接后的結果取md5值
String sign = DigestUtils.md5Hex(md5_str);
vars.put("sign",sign);
log.info(sign);
四)添加線程組
鼠標右鍵測試計劃,添加--Threads(Users)--線程組,命名為:test接口。
五)添加HTTP請求
鼠標右鍵線程組--添加--Sample--HTTP請求,命名為:test接口請求,填寫方法、路徑和請求參數的值,四個請求參數,分別為app_id,timestamp,sign,pid_num。
六)添加響應斷言
選中HTTP請求,鼠標右鍵--添加--斷言--響應斷言,即可添加成功
七)添加察看結果樹
選中HTTP請求,鼠標右鍵--添加--監聽器--察看結果樹,即可查看響應結果。
這樣,一個結果腳本就完成了。
我是程序員馨馨,全網ID唯一,轉載請注明出處。