『政善治』Postman — 9.Pre-request Script的使用

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中的變量。

參考:https://www.cnblogs.com/hanmk/p/10200887.html

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ù)丰包。

如下圖:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市壤巷,隨后出現(xiàn)的幾起案子邑彪,更是在濱河造成了極大的恐慌,老刑警劉巖胧华,帶你破解...
    沈念sama閱讀 212,029評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寄症,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡矩动,警方通過查閱死者的電腦和手機(jī)有巧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铅忿,“玉大人剪决,你說我怎么就攤上這事。” “怎么了柑潦?”我有些...
    開封第一講書人閱讀 157,570評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵享言,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我渗鬼,道長(zhǎng)览露,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,535評(píng)論 1 284
  • 正文 為了忘掉前任譬胎,我火速辦了婚禮差牛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘堰乔。我一直安慰自己偏化,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評(píng)論 6 386
  • 文/花漫 我一把揭開白布镐侯。 她就那樣靜靜地躺著侦讨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪苟翻。 梳的紋絲不亂的頭發(fā)上韵卤,一...
    開封第一講書人閱讀 49,850評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音崇猫,去河邊找鬼沈条。 笑死,一個(gè)胖子當(dāng)著我的面吹牛诅炉,可吹牛的內(nèi)容都是我干的蜡歹。 我是一名探鬼主播,決...
    沈念sama閱讀 39,006評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼汞扎,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼季稳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起澈魄,我...
    開封第一講書人閱讀 37,747評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤景鼠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后痹扇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铛漓,經(jīng)...
    沈念sama閱讀 44,207評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評(píng)論 2 327
  • 正文 我和宋清朗相戀三年鲫构,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了浓恶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,683評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡结笨,死狀恐怖包晰,靈堂內(nèi)的尸體忽然破棺而出湿镀,到底是詐尸還是另有隱情,我是刑警寧澤伐憾,帶...
    沈念sama閱讀 34,342評(píng)論 4 330
  • 正文 年R本政府宣布勉痴,位于F島的核電站,受9級(jí)特大地震影響树肃,放射性物質(zhì)發(fā)生泄漏蒸矛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評(píng)論 3 315
  • 文/蒙蒙 一胸嘴、第九天 我趴在偏房一處隱蔽的房頂上張望雏掠。 院中可真熱鬧,春花似錦劣像、人聲如沸乡话。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蚊伞。三九已至,卻和暖如春吮铭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背颅停。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工谓晌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人癞揉。 一個(gè)月前我還...
    沈念sama閱讀 46,401評(píng)論 2 360
  • 正文 我出身青樓纸肉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親喊熟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子柏肪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容