為了更靈活地構造請求以及處理響應資料,postman提供了Pre-request-Script和Tests,在這兩個標籤中可以編寫js程式碼輔助測試。之前學習了在傳送請求的Tests標籤如何新增斷言以及postman中的環境變數,有了上述基礎後,就可以繼續學習如何在不同介面之間傳遞引數了,這一篇就主要說一說如何在Pre-request-Script和Tests標籤中新增合適的指令碼提取我們需要的資料。
收到response之後,可以在Tests標籤中編寫指令碼,處理返回的資料
想象如下場景:假如測試2個介面,介面A負責生成地址資訊,且返回一個地址流水號;介面B負責刪除地址資訊,且就是根據地址流水號還來刪除,而且刪除後,該地址流水號便無法再次使用。
這樣的話我們在測試介面B時,每次都要提前準備一條可用的地址流水號,而且如果更換測試環境,就得重新造資料,用起來非常不方便。
基於此,可以考慮每次在測試介面B之前,都先呼叫介面A來生成一條地址流水號,然後把資料傳給B,這樣即使是更換資料庫也能夠靈活進行測試了,不需要再提前準備資料。
1.提取介面A生成的地址流水號
首先該請求的響應內容如下,為響應為json格式的字串
在Tests標籤中編寫如下指令碼
var JsonData = JSON.parse(responseBody); //定義一個變數,並且將請求返回的內容賦給該變數 pm.environment.set("address_seq", JsonData.data.seq); //定義一個環境變數address_seq,且把響應內容中的seq值賦給該變數 console.log(JsonData.data.seq); //利用postman的console.log()來檢視環境邊境變數的值
傳送這個請求,可以在console中檢視執行情況
2.在介面B中呼叫環境變數address_seq
如上,只要每次在執行B介面前,先執行A,則不必擔心地址流水號會失效,達到了地址流水號引數化的目的
在傳送request之前,編寫pre-request script,來定製化request
上面的例子已經演示瞭如何抽取一個請求響應中資料供其他埠來呼叫,但是這裡有個弊端,那就是在執行介面B之前,必須先執行一次介面A,也就意味著批量測試介面時,必須把介面A放在介面B前面。
此外,當又出現一個介面C,負責更新地址資訊,這個介面放在介面B後面,意味著,介面A生成地址流水號後,緊接著就被介面B刪掉了,此時介面C再呼叫時就會提示該地址流水號不存在。
為了解決這2個問題,我們可以在執行介面B和介面C之前,各自先呼叫一下介面A,生成地址流水號僅供自己使用。
1.切換到Pre-request Script標籤,在右側程式碼片段中可以找到一個Send a request,這是postman提供的傳送請求的程式碼片段
不幸的是,postman封裝的sendRequest()方法預設傳送的是get請求,而我生成地址流水號的介面是POST請求,導致一直髮送失敗~~
經過多番查詢,在朋友的幫助下終於找到如何在這裡傳送post請求了
程式碼如下
var data = {key1:"value1",key2:"value2",key3:"value3"}; //定義介面A的body引數值(生成地址流水號那個介面) const echoPostRequest = { url: 'http://ip:port/XXX?key4=value4&key5=value5, //請求url method: 'POST', //請求方法為POST // body: { //post請求的body引數,有則傳,無則不用傳 // mode: 'raw', // raw: JSON.stringify(data) //如果有body引數的話,將data傳進來 // } }; pm.sendRequest(echoPostRequest, function (err, res) { console.log(res.json()); pm.environment.set("del_seq", res.json().data.seq); //定義一個環境變數del_seq,並將前置請求響應中的seq賦給它 console.log(res.json().data.seq); //列印前置請求生成的地址流水號 });
最終如下
傳送這個請求,可以在console中檢視執行情況
2.在介面B中呼叫環境變數del_seq
可以看出來,上面其實就是經常講到的引數化過程,掌握了這些技巧,基本上就可以用postman很好地完成介面測試了
下面是傳送門,想了解postman使用sendRequest非同步傳送請求,請移步:
http://blog.getpostman.com/2017/10/03/send-asynchronous-requests-with-postmans-pm-api/
2018-12-29 22:26:12