設想如下的一個業務場景,服務器端中有一個登錄接口,使用session將用戶登錄信息存儲,方便后續操作,因此實現與用戶相關的操作接口無需輸入任何用戶信息,只需服務器端從session中讀取預存的用戶身份信息即可。
這應該是最常見的一種用戶身份系統了,session庫為了實現這一功能,登錄接口的響應頭會有一個key為Set-Cookie的鍵值對,這里以nodejs的express-session為例,
我們只需將這個cookie值放入請求體響應頭中名為Cookie鍵值對即可,如:
如何實現這一功能呢?這里postman對於這種情景的支持非常優秀,會將該屬性自動添加,即我們只需調用登錄接口即可,postman會自動幫我們將Cookie設置到請求頭里。因此我們訪問需要用到session的接口時只需先調用一次登錄接口。
但是設想一下,現在后端基本都是熱更新框架,每次熱更新都會清除session,邊開發邊測試時,每次熱更新后,都要先訪問一下登錄接口,再訪問其他接口,有點繁瑣。雖然可以用,但是身為程序員就要善於減輕開發負擔。因此,研究了一下postman,發現可以寫一個全局腳本,每次使用接口前,先登錄一次,將cookie存入請求頭,這樣我們可以直接調用使用session的接口了。
1.進入全局腳本編寫頁面
2.寫Pre-request 腳本,這個腳本會在每次請求觸發前使用
3. 腳本內容
腳本中使用了環境變量,至於環境變量怎么設置可以參考我的上一篇博客,不想使用環境變量直接寫入完整的url即可。 之前以為腳本中需要手動設置cookie,因此寫上了手動設置cookie的代碼,但是沒想到登錄請求發送后,自動將Cookie設置了,后來想想也對,畢竟postman界面底層調用的應該也是這個pm.sendRequest,估計就是這個方法里實現的自動設置。
附上上述代碼的文字版,涉及到隱私的地方做了通用化處理
let base_url = pm.environment.get("base_url"); // 獲取環境變量 const postRequest = { url: `${base_url}/login`, method: 'POST', header: { 'Content-Type': 'application/json' }, body: { mode: 'raw', raw: JSON.stringify({ "userName": "root", "password": "123456" }) } }; // const Header = require('postman-collection').Header; pm.sendRequest(postRequest, (error, res) => { // postman會自動將cookie加入request的header中,如果您需要手動添加其他header選項,可以用下面的代碼手動添加 // const cookie = res.headers.get("Set-Cookie"); // pm.request.addHeader(Header.create(cookie,"Cookie")); });
設置完后,無論如何重啟服務器, 都可以直接調用需要用session的接口,優化開發體驗 :)