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分的謹慎啊!再次記錄一下,以此為鑑!!
好了,到這裡就快結束了,以上只是個人經驗的小結,有不對的地方還希望各位大神指正!小弟感激!