為了更靈活地構造請求以及處理響應數據,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
