postman提供了Pre-request Script和Tests,在這兩個標籤中可以編寫js代碼輔助測試。先前博文已經介紹了Tests標籤如何添加斷言以及postman中的環境變量,該篇博文主要介紹如何在Pre-request Script和Tests標籤中添加合適的腳本提取我們需要的數據。
場景一:假設需要測試兩個接口,接口A負責生成任務信息,且返回一個任務號;接口B負責刪除任務,且就是根據任務號來刪除,並且刪除後該任務號便無法再次使用。
爲解決以上場景可以考慮每次在測試接口B之前都會先調用接口A來生成一條任務號,然後把數據傳給B,這樣即使更換數據庫也可能靈活進行測試,不需要再提前準備數據。
1.提取接口A生成的任務號。
首先該請求的響應內容如下,爲響應爲json格式的字符串。
在Tests標籤中編寫如下腳本:
var JsonData = JSON.parse(responseBody); //定義一個變量,並且將請求返回的內容賦給該變量
pm.environment.set("task_id", JsonData.task_id); //定義一個環境變量task_id,且把響應內容中的task_id值賦值給該變量
console.log(JsonData.task_id); //利用postman的console.log()來查看環境變量的值
postman的輸出控制檯,可以在這裏查看腳本運行情況,進行調試。發送這個請求,可以在console中查看運行情況。
2.在接口B中調用環境變量task_id。
如上,只要每次在執行接口B前先執行接口A則不必需要擔心地址流水號會失效,達到任務號參數化的目的。
場景二:假設需要測試三個接口,接口A負責生成任務信息,且返回一個任務號;接口B負責刪除任務,且就是根據任務號來刪除,並且刪除後該任務號便無法再次使用;接口C負責查詢任務信息,且也是根據任務號來進行查詢。
爲解決以上場景,我們可以在執行接口B和接口C之前,各自先調用一下接口A,生成任務號僅供自己使用。
1.切換到Pre-request Script標籤,在右側代碼片段中可以找到一個Send a request,這是postman提供的發送請求的代碼片段。
postman封裝的sendRequest()方法默認發送的是get請求。若需要發送post請求需要修改如下:
var data ={//定義接口A的body};
const echoPostRequest = {
url:'http://XXX.XXX.XXX', //請求url
method:'POST', //請求方法的POST
//header:'',定製請求頭信息(要傳json格式的數據這裏定義請求頭爲Content-Type:application/json)
body:{ //post請求的body參數,有則傳,無則不用傳
mode:'raw',
raw:JSON.stringify(data) //如果有body參數的話,把data傳進來,JSON.stringify() 方法是將一個JavaScript值(對象或者數組)轉換爲一個JSON字符串,若參數類型是application/x-www-form-urlencode,傳值例如:raw: 'id=123&code=28'
}
};
pm.sendRequest(echoPostRequest, function (err, response) {
console.log(response.json());
pm.environment.set("select_id", response.json().task_id); //定義一個環境變量del_id,並將前置請求響應中的task_id賦給它
console.log(response.json().task_id); //打印前置請求生成的任務號
});
發送這個請求,可以在console中查看運行情況:
2.在接口C中調用環境變量select_id。
上面介紹的即是經常講到的參數化過程,掌握了這些技巧,基本上便可以用postman很好地完成接口測試。