背景
当项目的接口需要一些验签,签名,加密等算法,需要通过对jmeter进行二次开发。jmeter二次开发需要使用java语言,对于java语言稍弱,则可以使用pthon来实现加密,然后使用jmeter调用py脚本
实现
- 需求:jmeter传参给python,python对参数进行md5加密后,jmeter提取加密sign
一、python脚本编写
-
目录结构如下
1、创建py文件,实现对参数进行MD5加密,代码如下
- 通过 sys.argv来接收jmeter传递的值
- 加密后将值打印出来,之后才可在jmeter响应结果中提取值
def encode_md5():
parameter = sys.argv # 接收jmeter传参,返回一个列表,列表第一个值是文件的路径
cusOrderNo = parameter[1] # 交易中心单号
payAmt = parameter[2] # 注资金额
orderAmt = parameter[3] # 换算金额
value = {}
data = {"cusOrderNo": "MTrade20230619132405052", "customerNo": "G21050001", "operatorCode": "vae111",
"operatorName": "vae111", "orderAmt": 1200, "orderNo": "20220530101252274176181440800", "payAmt": 200,
"payTime": "2023-06-18 21:51:55", "returnCode": "", "returnMsg": "vae111 已到账 ", "status": 100,
"tradeType": 10, "userAcct": "子岩", "userName": "子岩"}
data.update({"cusOrderNo": cusOrderNo})
data.update({"payAmt": int(payAmt)})
data.update({"orderAmt": int(orderAmt)})
signkey = "1234"
signstr = json.dumps(data) + signkey
sign = hashlib.md5(signstr.encode(encoding="utf-8")).hexdigest() # MD5加密
value.update({"sign": sign})
print(value) # 打印
encode_md5() # 调用
2、创建bat文件
- 语法:python py文件绝对/相对路径 或者 python py文件绝对/相对路径 %*
- %* :当python需要接收jmeter的传参时,需要加上%,否则不需要写%*
- 注意:如果此处写相对路径,那需要将py文件放到jmeter的bin目录下,否则jmeter运行时会提示找不到文件
python D:\tool\python\jm_pay\FFPay.py %*