Jmeter SHA512接口加密测试
前言:最近,我遇到一些测试接口必须传入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函数
3.1 先定义基础变量值
其中 ${__time(/1000,)} 时间戳为秒(s),如不除以1000则 ${__time(,)} 是毫秒(ms)
3.2 接口请求传参 。注意sign用到2个函数:V函数(用于执行变量名、嵌套函数)、digest函数(用于加密、转大写)
${__digest(SHA-512,${__V(tenantCode${tenantCode}nonce${nonce}timestamp${timestamp}${appSecret})},,true,)}
3.3 执行接口请求,查看接口请求参数已自动得到sign签名。每次接口请求都会根据${timestamp}自动更新sign签名,再也不用手工更新sign签名了