Postman測(cè)試沙箱其實(shí)是結(jié)合JS腳本和內(nèi)置斷言函數(shù)颠黎,來完成測(cè)試中的斷言功能拓轻,在請(qǐng)求發(fā)起前后實(shí)現(xiàn)部分測(cè)試操作。
常用功能:
- 請(qǐng)求前腳本(pre-request scripts)設(shè)置請(qǐng)求前置操作如設(shè)置變吊等。
- 請(qǐng)求后腳本(tests)對(duì)狀態(tài)碼、響應(yīng)頭牍蜂、響應(yīng)正文等信息進(jìn)行斷言操作。
1泰涂、Pre-request Script介紹
Pre-request Script
是請(qǐng)求發(fā)送之前需要執(zhí)行的代碼片段鲫竞。
提示:在一個(gè)請(qǐng)求或者一個(gè)集合都可以定義
Pre-request Script
,在集合中定義Pre-request Script
逼蒙,表示集合中的每一個(gè)請(qǐng)求發(fā)送前从绘,都需要執(zhí)行Pre-request Script
中的js腳本。
作用或者需求:準(zhǔn)備數(shù)據(jù)是牢。
- 請(qǐng)求參數(shù)中包含一個(gè)隨機(jī)數(shù)僵井。
- 請(qǐng)求header中包括一個(gè)時(shí)間戳。
- 請(qǐng)求參數(shù)需要加密驳棱。
等等批什。
點(diǎn)擊請(qǐng)求中的Pre-request Script
標(biāo)簽項(xiàng),如下圖:
我們可以在上圖看到蹈胡,在Pre-request Script
標(biāo)簽頁(yè)的右側(cè)邊欄中渊季,Postman為我們提供了一些常用的代碼模版。
提示我們:
Pre-request scripts are written in JavaScript.
and are run before the request is sent.
請(qǐng)求前腳本是用JavaScript編寫的罚渐。
并在發(fā)送請(qǐng)求之前運(yùn)行却汉。
Learn more about pre-request scripts。
點(diǎn)擊這里荷并,可以學(xué)習(xí)更多關(guān)于pre-request scripts的資料合砂。
這里學(xué)習(xí)關(guān)于
pre-request scripts
的更多用法:
https://learning.postman.com/docs/postman/scripts/pre_request_scripts/
2、常用SNIPPETS(片段)說明
(1)獲取變量腳本:
-
Get an environment variable
// 獲取一個(gè)環(huán)境變量 // 1.pm表示postman // 2.environment表示環(huán)境變量 // 3.get表示獲取 pm.environment.get("variable_key");
-
Get a global variable
// 獲取一個(gè)全局變量 pm.globals.get("variable_key");
-
Get a variable
// 獲取一個(gè)變量(本地) pm.variables.get("variable_key");
-
獲取集合變量的腳本
var collectionVariable = pm.collectionVariables.get("variable_key");
-
獲取數(shù)據(jù)變量的腳本
var iterationData = pm.iterationData.get("variable_key");
(2)設(shè)置變量腳本:
-
Set an environment variable
// 設(shè)置一個(gè)環(huán)境變量 // 1.pm表示postman // 2.environment表示環(huán)境變量 // 3.set表示設(shè)置 pm.environment.set("variable_key", "variable_value");
-
Set a global variable
// 設(shè)置一個(gè)全局變量 pm.globals.set("variable_key", "variable_value");
-
設(shè)置一個(gè)變量(本地)
pm.variables.set("variable_key", "variable_value");
-
設(shè)置一個(gè)集合變量
pm.collectionVariables.set("variable_key", "variable_value");
-
設(shè)置一個(gè)數(shù)據(jù)變量
pm.iterationData.set("variable_key", "variable_value");
(3)清空變量腳本:
-
Clear an environment variable
// 清空一個(gè)環(huán)境變量 // 1.pm表示postman // 2.environment表示環(huán)境變量 // 3.unset表示清空 pm.environment.unset("variable_key");
-
Clear a global variable
// 清空一個(gè)全局變量 pm.globals.unset("variable_key");
其他的變量同理源织。
(4)Send a request
Postman提供了一個(gè)“Send a request”代碼段翩伪,他是已經(jīng)封裝好的發(fā)送請(qǐng)求的方法
pm.sendRequest("https://postman-echo.com/get", function (err, response) {
console.log(response.json());
});
// 其中微猖,https://postman-echo.com/get表示要發(fā)送的請(qǐng)求。
// function中的err表示請(qǐng)求返回的錯(cuò)誤信息缘屹,response表示響應(yīng)內(nèi)容凛剥。
// console.log()是postman封裝的查看日志的方法,可以調(diào)出postman的console控制臺(tái)來查看代碼運(yùn)行情況轻姿,方便調(diào)試犁珠。
注意:該代碼段默認(rèn)只能發(fā)送get請(qǐng)求,且這樣直接使用的話無法指定請(qǐng)求頭等信息互亮,當(dāng)然大部分情況下我們不需要單獨(dú)指定一些請(qǐng)求信息犁享,Postman可以自動(dòng)幫我們完成準(zhǔn)備工作。
示例:在Pre-request Script
中自定義發(fā)送一個(gè)Post請(qǐng)求
// Pre-request Script 中的js代碼
// 定義請(qǐng)求數(shù)據(jù)體
var data = {
"userName":"admin",
"password":"123456"
}
// 從環(huán)境變量中獲取token請(qǐng)求服務(wù)地址
var ip = pm.environment.get("ip");
var port = pm.environment.get("port");
// 定義請(qǐng)求
const loginRequest = {
//url: 'http://'+ ip+':'+ port +'/login',
url: 'http://httpbin.org/post',
method: 'POST',
header: ['Content-Type:application/json', 'token:123456'],
body: {
mode: 'raw',
raw: JSON.stringify(data)
}
};
// 發(fā)送請(qǐng)求
pm.sendRequest(loginRequest, function (err, response) {
console.log(response.json());
});
代碼說明:
const
:是js中用來定義變量的關(guān)鍵字豹休,由const定義的變量不可以修改炊昆,而且必須初始化。url
:表示要發(fā)送的請(qǐng)求url威根。method
:指定請(qǐng)求方法凤巨。header
:定制請(qǐng)求頭信息(很重要,因?yàn)槟阋獋鱦son格式的數(shù)據(jù)的話医窿,需要在這里定義請(qǐng)求頭為Content-Type:application/json
)磅甩。body
:表示請(qǐng)求body中攜帶的參數(shù)。JSON.stringify()
方法是將一個(gè)JavaScript值(對(duì)象或者數(shù)組)轉(zhuǎn)換為一個(gè)JSON字符串姥卢。定義好
const
變量后再由sendRequest()
來發(fā)送請(qǐng)求即可卷要。-
header的寫法可以是:
// 一條頭信息 header: 'Content-Type:application/json', // 多條頭信息 // 形式一 header:[ {"key1":"XXX","value1":"XXX"}, {"key2":"XXX","value2":"XXX"} ] // 形式二 header:[ 'key1:XXX', 'key2:XXX' ]
(5)總結(jié):
對(duì)于Postman中的變量管理,我們最好手動(dòng)管理独榴,也就是自己手動(dòng)設(shè)置環(huán)境變量和全局變量僧叉,最好不用腳本來管理Postman中的變量。
3棺榔、示例1
我們以“新增學(xué)院”接口為例瓶堕,如下圖:
我們可以在Pre-request Script
進(jìn)行提交數(shù)據(jù)的準(zhǔn)備。
編寫如下JavaScript代碼:
// 隨機(jī)生成一個(gè)3位數(shù)字的id
var dep_id = Math.floor(Math.random()*1000);
pm.environment.set("depid" , dep_id); //設(shè)置到環(huán)境變量中
// 隨機(jī)生成學(xué)院名稱dep_name
// 隨機(jī)生成一個(gè)10位的字符串
var data = Math.random().toString(36).slice(-10) ;
var dep_name = data+"學(xué)院";
pm.environment.set("dep_name" , dep_name);//設(shè)置到環(huán)境變量中
// 隨機(jī)生成院長(zhǎng)的名字
var first_name = ["趙","錢","孫","李","劉"];
var last_name = ["子鼠","丑牛","寅虎","牟兔","辰龍","巳蛇"];
var master_name = first_name[Math.floor(Math.random() * (first_name.length))] +last_name[Math.floor(Math.random() * (last_name.length))];
pm.environment.set("master_name" , master_name);//設(shè)置到環(huán)境變量中
// 隨機(jī)生成口號(hào)
var slogan_str = ["吃飯","睡覺","打豆豆"];
var slogan = slogan_str[Math.floor(Math.random() * (slogan_str.length))];
pm.environment.set("slogan" , slogan);//設(shè)置到環(huán)境變量中
//代碼很low症歇,就是演示郎笆。
然后填寫Post請(qǐng)求,以Json格式數(shù)據(jù)為例忘晤,參數(shù)中引用Pre-request Script
腳本中添加到環(huán)境變量中的變量宛蚓。
這樣就能夠完成自動(dòng)生成數(shù)據(jù),來完成接口的測(cè)試设塔。
提示:
我們?cè)趯?shí)際工作中凄吏,不用這種方式準(zhǔn)備數(shù)據(jù),上面的例子只是說明Pre-request Script
的作用。
在實(shí)際工作中痕钢,我們使用參數(shù)化來批量準(zhǔn)備數(shù)據(jù)图柏。
在接口測(cè)試中,有些參數(shù)是需要自動(dòng)生成的任连,且這些參數(shù)并不參與邏輯關(guān)系蚤吹。
比如說時(shí)間戳,并不會(huì)參與接口中的邏輯關(guān)系课梳,只起到校驗(yàn)的作用距辆。我們提交的時(shí)間戳參數(shù),要和服務(wù)器的時(shí)間戳進(jìn)行對(duì)比暮刃,比如我們上傳的時(shí)間戳和服務(wù)器的時(shí)間戳不能超過5秒鐘,如果超過5秒則不能請(qǐng)求成功爆土。
所以我們需要在Pre-request Script
中把時(shí)間戳生成椭懊,然后保存到環(huán)境變量中,最后再提交的參數(shù)中獲取到環(huán)境變量中的剛剛保存的時(shí)間戳數(shù)據(jù)步势。(就如同上面步驟)
// js獲取當(dāng)前時(shí)間戳
// 第一種方法:(這種方法只精確到秒)
var timestamp = Date.parse(new Date()); //1613702922000
// 第二種方法:
var timestamp = (new Date()).valueOf(); //1613702956959
// 第三種方法:(推薦)
var timestamp = new Date().getTime(); //1613703043378
pm.environment.set("timestamp" , timestamp);//設(shè)置到環(huán)境變量中
請(qǐng)求頭中所需要的數(shù)據(jù)也是一樣的操作氧猬。
還有一點(diǎn)要提示的,如果在發(fā)送請(qǐng)求之后坏瘩,提示js代碼有錯(cuò)誤盅抚,可以點(diǎn)擊Postman下邊框的
Console
控制臺(tái),來查看錯(cuò)誤的詳細(xì)信息倔矾。
4妄均、示例2
同理,我們也可以在Body中使用其他的數(shù)據(jù)提交格式哪自,來接收使用Pre-request Script
定義在環(huán)境變量中的數(shù)據(jù)丰包。
如下圖: