設想如下的一個業務場景,服務器端中有一個登錄介面,使用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的介面,優化開發體驗 :)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/259102.html
標籤:其他
下一篇:python操控excel
