python实现基于签名的接口测试

2020-11-14  本文已影响0人  making人生

生成签名规则:

签名生成的通用步骤如下:

第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1value1key2value2…)拼接成字符串stringA。

特别注意以下重要规则:

参数名ASCII码从小到大排序(字典序);

如果参数的值为空不参与签名;

参数名区分大小写;

第二步,按照第一步说的,把headers参数组合成keyvalue格式,表单参数也组合成keyvalue格式,把这两个生成的keyvalue格式拼接,并按照ASCII码进行从小到大排序;得到字符串stringA;

第三步,把appkey放在stringA前面,得到stringB;

第四步,用sha256对stringB进行加密,此时就生成签名。

import hashlib           

import time

import requests

import random

#测试环境

testurl=‘127.0.0.1’

#文件路径

filepath='/employee/124.docx'

#接口Api

wordmergeapi='/platform/office/word/merge'

#生成时间戳

millis = int(round(time.time() * 1000))

#生成六位随机数

str1= ""

for i in range(6):

    ch = chr(random.randrange(ord('0'), ord('9') + 1))

    str1 += ch

#header参数

headers= {'appId':str(11000),'deviceType':'IOS','version':'1.0.6','deviceId':'ddb0b2a6-b3de-4495-acb9-46118c108ce0','timestamp':str(millis),'nonce':str1}

#表单参数

bo={'signature':'','fileNames':filepath,'id':'1'}

# 列表生成式,生成key=value格式

a = ["".join(i) for i in headers.items() if i[1] and i[0] != "signature"] # headers参数组合成keyValue格式

b= ["".join(i) for i in bo.items() if i[1] and i[0] != "signature"] # 表单参数组合成keyValue格式

c=a+b

print(c)

# 参数名ASCII码从小到大排序

strA = "".join(sorted(c))

print(strA)

strB='ad50b2ared4rr53ea4r94gt68c1rf18x'+strA  # 将appKey加入到字符串的最前端,得到stringB

print(strB)

#用sha256加密,得到签名signature

Sign= hashlib.sha256(strB.encode('utf-8')).hexdigest()

print(Sign)

#接口请求参数

body={'signature':Sign,'fileNames':filepath,'id':1}

#发起接口请求

se=requests.session()

res=se.post(testurl+wordmergeapi,data=body,headers=headers)

resc=res.content.decode('utf-8')

print(resc)

上一篇 下一篇

猜你喜欢

热点阅读