昨天提到了透過Collection Runner
一次性地執行多個請求,但每個請求彼此間是互相獨立的,但有時候我們的API存在著相依性,像是必須先登入才能使用的API,或是必須先取得某些資訊,然後以取得的結果當作請求的輸入。也就是說,我們需要滿足以下條件
順序
解析
API回傳結果傳遞
結果到另一個API在前面的章節中,我們已經在Tests
裡面寫過JavaScript的程式碼來取得一些需要的資訊,其實不只是寫測試,Postman的Scripting
功能還允許我們動態使用參數,或是在請求間去傳遞參數,通常在下面兩種不同時機點去使用。
Pre-request
分頁下撰寫腳本,這邊的腳本會在發送請求前
執行Tests
分頁下撰寫腳本,這邊的腳本會在取得回應後
執行從上圖我們可以知道,要進行傳遞參數的話,我們可以在執行完 A 請求後,在其Tests
裡面去將回應的資料取出並設定到環境變數裡,也能在執行B請求前,透過它的Pre-request
先執行 A 請求後再來設定環境變數。而複雜一點的流程可以透過不同層級來定義,Pre-reuqest
跟Tests
也能以Collection
或是Folder
為群組來發揮作用,如下圖:
關於多個API的執行順序,常用的會是以Collection
為單位進行,所以就會是按照排列順序來一個個執行,而在Collection Runner
裡面,我們除了能手動拖拉去調整執行順序,還能夠透過postman.setNextRequest()
這個函式來直接指定下一個請求。用法如下:
Pre-request
或是Tests
裡面,且有效範圍只在當前Collection
Collection Runner
執行才有作用,一般Send
或是整個Collection去執行都沒作用名字
或是id
進行指定
postman.setNextRequest("request_name");
postman.setNextRequest(null);
在開始之前,請別忘了將今天的挑戰 Day 9: Scripting 先行fork
到自己的工作區喔。
今天的挑戰前置步驟如下
Scripting
之下利用Add request
來新增一個請求,並重新命名為get random user
,設定方法為GET
,URL為https://randomuser.me/api/
Scripting
之下利用Add request
來新增一個請求,並重新命名為echo the user
,設定方法為POST
,URL為https://postman-echo.com/post
,Body類型要指定成raw
,格式為json
,內容如下
{
"name": "Dawn Ellis",
"email": "dawn.ellis@example.com",
"id": "334eecea-607d-4111-90ee-e57bea971654"
}
這樣我們就有了兩個獨立的請求,但今天的目標是需要將兩個請求串聯起來,所以調整步驟如下
Variables
分頁看到。由於目前還沒有值,預期會是在第一個請求執行完後修改環境變數來達成
{
"name": "{{firstName}} {{lastName}}",
"email": "{{emailAddress}}",
"id": "{{uuid}}"
}
Tests
分頁,填入以下內容,主要思路就是將API回應取出,解析需要的部分,然後回填到環境變數供第二個請求使用
// 取得請求內容中使用者的資料
let userData = pm.response.json().results[0];
// 取出所需要的資料
let first = userData.name.first;
let last = userData.name.last;
let email = userData.email;
let uuid = userData.login.uuid;
// 設定環境變數
pm.collectionVariables.set("firstName", first);
pm.collectionVariables.set("lastName", last);
pm.collectionVariables.set("emailAddress", email);
pm.collectionVariables.set("uuid", uuid);
// 確認環境變數
console.log(pm.collectionVariables.get("firstName"));
console.log(pm.collectionVariables.get("lastName"));
console.log(pm.collectionVariables.get("emailAddress"));
console.log(pm.collectionVariables.get("uuid"));
小提醒: 透過
Tests
分頁右方提供的Snippets
可以找到腳本Set a collection variable
示範如何設定環境變數
Collection Runner
運行的話,會連同submit
一起進行,所以可以在Tests
裡加入postman.setNextRequest(null)
來宣告沒有下一個請求了,這樣執行時就不會繼續呼叫submit
的請求了。到這邊就可以進行submit
來確認是否通過今天挑戰了,如果測項都通過就表示挑戰成功囉。
今天我們透過腳本以及定義工作流程,成功串連了兩個有依賴關係的API,有興趣的朋友也可以看以下相關資料
那麼今天就到這邊,我們明天見~