postman是个很好的接口测试工具,可以很方便的调试接口。相关Postman使用可参考: postman接口测试系列:基本操作总结
不过在面对复杂的一些接口时,需要手动写代码实现一些功能,在postman工具内似乎有些麻烦。
举个例子,某个接口请求中,需要获取实时的时间戳,并进行签名,如果只是调用一次那么可以手动分别计算一下并填入请求参数中。如果需要不断调试,那么就需要动态获取和计算这些参数了。
网上也有一些相关的Postman工具自动获取时间戳和签名的方法:Postman接口测试系列:时间戳和加密
不过看起来不是很好调试,看来还需要想想更好的方法。
摸索一会后,发现在postman是可以根据当前的请求信息,自动生成不同平台的代码的。

那么就用目前火热的python来试一下效果吧。
首先,需要在postman手动调用一次接口,以此来生成python代码,如下图所示。

有了这个模板以后,那么就可以直接在python在实现这个接口请求,并使用参数化的方式替换掉模板中时间戳与对应签名值了。
直接上代码
import http.client
import time
import hashlib
req_id='1'
username='kim666'
tel='13899999999'
#获取当前时间戳
t=time.time()
timestamp=int(round(1000*t))
print(timestamp)
#MD5签名值
toSign=req_id+str(timestamp)+username+tel
print(toSign)
m=hashlib.md5()
m.update(toSign.encode('UTF-8'))
sign=m.hexdigest()
print(sign)
#f演示地址,实际需替换真实地址
conn = http.client.HTTPConnection("api.test.com:8080")
payload = ('req_id={0}×tamp={1}&username={2}&tel={3}&sign={4}').format(req_id,timestamp,username,tel,sign)
print(payload)
headers = {
'content-type': "application/x-www-form-urlencoded",
'cache-control': "no-cache",
'postman-token': "5306728e-9e65-ef5a-1448-930cb10f0b78"
}
conn.request("POST", "/login", payload, headers)
res = conn.getresponse()
data = res.read()
#打印响应结果
print(data.decode("utf-8"))
执行完成后即可查看请求的响应结果,再也不需要重复计算Md5和时间戳了。

网友评论