前言:最近,我遇到一些測試介面必須傳入SHA512加密後的sign簽名,並且簽名有1小時時間限制,即簽名不是一成不變超1小時就會過期,這導致在測試過程中就得頻繁手工去更新簽名。其實Jmeter是有提供函式去進行自動轉換的,以下詳解
SHA512加密變化,可以去網上搜尋SHA512線上加密
1、已知,介面請求必須傳入4個引數tenantCode、timestamp、nonce、sign
{ "tenantCode":"", "timestamp":"", "nonce":"", "sign":"" }
其中sign是經過SHA512加密的簽名,計算規則如下:
- 按照順序tenantCode${tenantCode}nonce${nonce}timestamp${timestamp}${appSecret}拼接成一串字串(其中appSecret秘鑰可以找開發要)
- 對這串字串進行SHA512加密
- 對加密後的字串轉大寫,就得到sign
2、例子:
{
"tenantCode":"jkdsa",
"timestamp":"1722938712",
"nonce":"3754",
"sign":"5F61CFD4AE4FD799C644659F14B81ABF510941F6EDA4C16349018E6A3872281A7794A43A3CF3E7734B7AD1E553ADA562AAA5DBA90188CF22A8781CE8BAF7C158"
}
以下是手工根據規則計算sign的過程(假設appSecret=573e182924f8d40fd4566989ace22729e8d4a1cb)
- 拼接字串為:tenantCodejkdsanonce3754timestamp1722938712573e182924f8d40fd4566989ace22729e8d4a1cb
- 進行SHA512加密後為:5f61cfd4ae4fd799c644659f14b81abf510941f6eda4c16349018e6a3872281a7794a43a3cf3e7734b7ad1e553ada562aaa5dba90188cf22a8781ce8baf7c158
- 轉大寫後sign為:5F61CFD4AE4FD799C644659F14B81ABF510941F6EDA4C16349018E6A3872281A7794A43A3CF3E7734B7AD1E553ADA562AAA5DBA90188CF22A8781CE8BAF7C158
3、由於sign簽名是有1小時時間限制的,測試介面過程中為了減少手工頻繁去更新簽名,我用了Jmeter的函式去自動轉換,用到V函式、digest函式、changeCase函式
3.1 先定義基礎變數值
其中 ${__time(/1000,)} 時間戳為秒(s),如不除以1000則 ${__time(,)} 是毫秒(ms)
3.2 介面請求傳參 。注意sign用到3個函式:V函式(用於執行變數名、巢狀函式)、digest函式(用於加密)、changeCase函式(用於字元轉換大小寫)
"sign" : "${__changeCase(${__digest(SHA-512,${__V(tenantCode${tenantCode}nonce${nonce}timestamp${timestamp}${appSecret})},,,)},,)}"
3.3 執行介面請求,檢視介面請求引數已自動得到sign簽名。每次介面請求都會根據${timestamp}自動更新sign簽名,再也不用手工更新sign簽名了