debugtalk.py辅助函数 - sign签名
sign签名
接口sign签名规则
1.拼接字符串,先去除sign参数本身,然后去掉值是空的,按照参数名字符升序排列
2.做参数和值的拼接,去掉=和&符号
3.在上面拼接得到的字符串后加上验证密钥apikey,得到新的字符串
4.将这个字符串换为小写进行md5计算,得到的值就是sign签名值
注意:计算md5之前请确保接口与接入方的字符串编码一致,如统一使用utf-8编码或者GBK编码,如果编码不一致则计算出来的签名会校验失败
debugtalk.py
import hashlib
def sign_budy(body, apikey="123"):
'''请求body sign签名'''
# 列表生成式,生成key=value的格式
a = ["".join(i) for i in body.items() if i[1] and i[0] != "sign"]
# print(a)
# 参数名ASCII码从小到大排序
strA = "".join(sorted(a))
# 在strA后面拼接上apikey得到stri字符串
stri = strA+apikey
# 将stri字符串转换为小写字符串后进行md5运算
# md5加密
def jiamd5(src):
m = hashlib.md5()
m.update(src.encode('utf-8'))
return m.hexdigest()
sign = jiamd5(stri.lower())
# print(sign)
return sign
def login_sign(request):
body = request.get("req_json")
print("签名前body:", body)
sign = sign_body(body=body, apikey="123")
print("sign", sign)
request["req_json"]["sign"] = sign
print("request:", request)
if __name__ == "__main__":
print(get_user_psw(3))
print(register_user())
body = {
"username": "test",
"password": "123456"
}
r = sign_budy(body=body, apikey="123")
print(r)
testcase/login_sign.yml
config:
name: 登录用例
base_url: http://127.0.0.1:端口号
variables:
user: test
psw: "123456"
export:
- token
teststeps:
-
name: step-登录
setup_hooks:
- ${login_sign($request)}
request:
method: POST
url: /api/test/login
json:
username: $user
password: $psw
sign: XXXXX
extract:
token: body.token
validate:
- eq: [status_code, 200]
- eq: [body.code, 0]
- eq: [body.msg, login success!]
- eq: [body.username, $user]
- len_eq: [body.token, 40]

浙公网安备 33010602011771号