除了拿 Postman 來檢測 api 之外,其實 Postman 還有 Pre-request Script 的功能,以及請求後的資料驗證功能,透過發請求之前再去發其他請求其實是一個很實用的功能。
可以想像一下,如果我們有兩個 api,分別為 login, profileView
在 login 的 api 我們預期會回應一個 token 的資料
在 profileView 中則將該 token 的資料帶入,請求個人資料呈現
在 postman 中,也許我們會建立這兩支 api,測試的流程會先打 login 得到資料後,再把資料複製起來,放到第二支 api 去進去測試
但透過 postman pre-request 的做法,我們只要打 profileView 就可以一次完成兩個 request 了
那這是怎麼達到的呢?首先先看 postman 的官方網站的介紹
流程圖(轉至 postman 官網資料)
從圖片上就可以了解,目前 postman 支援了發送請求前可以在 pre-request 中先做其他的動作(login),接著就會來完成這次的 request (profileView),最後則是會到達 test 的階段
在 test 這個階段我們可以驗證回傳的文字包含什麼,或是 http status code 是否為 200 的事情
甚至於可以透過 postman console 來達到 request 與 response 的 trouble shooting
而這些 script code 在 postman 都已經很貼心的在右邊的側欄可以看到
假設我們在 postman 的環境變數有這兩個
Login 與 viewProfile 如下簡單所示
[HttpPost]
[Route("login")]
public LoginResponsetModel login([FromBody] LoginRequestModel request)
{
//check user and pwd
return new LoginResponsetModel { Token = Guid.NewGuid().ToString() };
}
[HttpPost]
[Route("viewProfile")]
public string viewProfile([FromBody] ViewProfileRequestModel requestModel)
{
//check token
return $"your token is {requestModel.Token}";
}
login 畫面如下
viewProfile如下
接下來我們就得在 viewProfile 中的 pre-request 中寫入先 login 的request
var apiLogin = pm.variables.get("API_URL") + "/v1/login" ;
pm.sendRequest({
url: apiLogin,
method: 'POST',
header: {
'Content-Type':'application/json',
'otherHeader': '[your other header]'
},
body: {
mode: 'raw',
raw: JSON.stringify({ UserName: "ace", Password:"dotblog"})
}
}, function(err, response) {
var jsonResponse = response.json();
console.log (jsonResponse.token);
pm.environment.set("Token", jsonResponse.token );
});
假設我們從 login 中取得的 token 為 d780aa83-1d6c-4b2f-bbc1-e858264820bf
那麼在 pre-request 執行完之後,環境變數 Token 即會被覆寫成 d780aa83-1d6c-4b2f-bbc1-e858264820bf
而呼叫 profileView 則會拿 Token d780aa83-1d6c-4b2f-bbc1-e858264820bf 進行呼叫請求,並取得結果,進而執行 Tests 裡的檢驗事項
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
甚至從 postman console 都能很清楚看出 request 與 response 的所有資訊
最後再來比對一下 postman 的變數的確是從 x 被改成呼叫 viewProfile 中的值了
如此一來 api 的測試又變的更為簡單了
參考文件
https://learning.getpostman.com/docs/postman/scripts/intro_to_scripts/
https://learning.getpostman.com/docs/postman/sending_api_requests/debugging_and_logs/#network-calls-with-postman-console