postman设置token关联参数-以及自动化脚本的实现
还是之前群友的经历,该项目再登陆时登录成功后服务器会返回一个token,这个token作为第二步骤的入参;第二个步骤请求成功后服务器会返回一个新token,然后这个token作为第三步骤的入参!
如此一来的话,要用postman做接口测试,那么就要解决token这个参数的关联问题:
第一,首先将这三个要测试的接口写成collection,请求体先填好
第二,要设置postman的环境,设置名称,url,以及token(只需要设置key就行),如下图:
第三部,在Postman软件的Tests中写以下代码,设置环境变量
第四步,修改第二以及第三个接口的入参的tokend值,格式用双花括号:{{token}} 格式
到此就设置完成了,我们选择登陆接口点击send,此时token就会显示在环境变量中了,这时第二个接口就可以执行了;然后再执行第三个接口,此时这个流程就可以跑通了!
总结:其实像这样的1步骤产生token,2步骤关联1步骤的token,3步骤关联2步骤的token,4步骤关联3步骤的token ,这种情况我也是第一次接触,这种情况与我司的项目不同,我司项目中只要token有效期内就行,不会存在步骤间这种紧密的依赖关系。
这时我习惯性的想把这个借口写成自动化脚本,说干就干:
但是如果把这种项目的接口写成自动化脚本的话也比较冗长,因为我要在一个py中同时从步骤1写到步骤4.这样代码比较长了,代码如下:
#coding:utf-8 import requests,unittest def chaxun(): u'查询接口' s = requests.session() url = 'http://183.59.xxx.xx:8080/restful/api/authentication' #登录的入参 in_data = { 'username': "sendi", 'password': "2MDL010618", 'appid':"HDC2054490406A" } #请求头部 header = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36', 'Connection': 'keep-alive', } #发送请求 r =s.post(url,headers = header,data = in_data) #获取token t = r.json()['token'] print('登录返回的token是:%s' % t) #'信息查询接口' url_2 = 'http://183.59.xxx.xx:8080/restful/api/custinfo' #请求头部 header2 = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36', 'Connection': 'keep-alive' } #查询的入参 in_data_2 = { 'customer':'佛山威立雅垃圾填埋处理有限公司', 'elecode':'IPCYW2267381990', 'elename':'IPCYW2267381990', 'NEName':'高明杨梅杨梅二楼综合机房01/S-T64G-1', 'portName':'gei_4/8', 'disabled':0, 'is_vip':0, 'page':1, 'pagesize':10, 'token':t } r1 = s.post(url_2,headers = header2,data = in_data_2) print(r1.json()) t1 = r1.json()['token'] print('查询返回的token是:%s' % t1) url_3 = 'http://183.59.xxx.xx:8080/restful/api/custflow' # 登录的入参 to1 = 'Bearer '+ t1 # 请求头部 header3 = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36', 'Connection': 'keep-alive' } in_data_3 = { 'customer': '广东丹姿集团有限公司', 'elecode': 'IPCYW2270156401', 'elename': 'IPCYW2270156401', 'starttime': '2018061217', 'endtime': '2018062418', 'type': 0, 'page': 1, 'pagesize': 10, 'token': t1 } r3 = s.post(url_3, headers=header, data = in_data_3) print(r3.json()) if __name__=='__main__': chaxun()
注意:像这种1234步骤间存在紧密依赖关系的接口,在写脚本时要注意必须要用同一个seesion去请求,不然还是失败!!!!
在写代码的时有个小插曲,再写第三个接口的入参时,我的入参key值多写了一个空格,如:“token ”,写好后调试一致提示我token不能为空,尼玛,整整折腾了半小时,后来打印出来才发现token后面引号前面多了一个空格,哎,还是大意导致的!
写代码还是需要120分的谨慎啊!再次记录一下,以此为鉴!!
好了,到这里就快结束了,以上只是个人经验的小结,有不对的地方还希望各位大神指正!小弟感激!