前言:
以前用Jmeter做接口测试和性能监控,没有遇到过需要签名的,这次遇到了,查阅了好多资料,需要Java代码,我只会一点点Python,后来一直资料,最终知道了Jmeter也可以调用Python脚本,获取到Jmeter的请求参数,通过脚本计算,重新把计算后的取值赋值到Jmeter的请求当中
第一步:Jmeter里加入Python的Jar包
D:\Jmeter\apache-jmeter-5.2.1\lib 把下载好的Jar包放到lib目录下
第二步:Jmeter里加入JSR223 Sampler (这个是用来调用Python文件的)
import hashlib
import time
def timestr():
t = time.time()
t = int(t)
return t
def sign_body(**body_contnet):
u =[]
timestamp = str(timestr())
nonce = str(timestr())
body_contnet["timestamp"]=timestamp
body_contnet["nonce"]=nonce
body_contnet["salt"]="n7xAav2t2131Sjn329Ysnr"
for (k,v) in body_contnet.items():
u.append(str(k)+"="+str(v))
#按照字母从小到大排序
u.sort()
#增加&
result = "&".join(u)
#MD5加密
m = hashlib.md5()
b = result.encode(encoding="utf-8")
m.update(b)
str_md5 = m.hexdigest()
sign_value = str_md5.upper()
#删除最后一项
body_contnet.pop("salt")
#增加新的sign
sign_json = {"signature":sign_value}
body_contnet.update(sign_json)
print(body_contnet)
return timestamp,nonce,sign_value
# 获取钉钉个人详细信息
body_contnet = {
"account":"18501057611",
"country_code":"86"
}
result = sign_body(**body_contnet)
vars.put("account","18501057611")
vars.put("country_code","86")
vars.put("timestamp",result[0])
vars.put("nonce",result[1])
vars.put("signature",result[2])
vars.put可以获取到jmeter参数 重新赋值
把请求参数和签名重新赋值 就可以进行请求了 只看最后一句就行
签名的过程 按照各自的项目来
jmeter请求
我们来看一下请求参数
GET https://api-usercenter.eijing.com/server/dingtalk/get-user- info? cache=1&sso_id=67223975612316853447680×tamp=1617261980&nonce=1617261980&signature=BDF1155300AF7C3D2340ECEB94E66927
第一次写文章,多多包涵
有不明白的可以加我QQ:6148694