Jmeter SHA512介面加密測試

dabeen發表於2024-08-06

前言:最近,我遇到一些測試介面必須傳入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簽名了

相關文章