Postman使用技巧之四:pre-request-script和test script

postman中的script

Pre-request scripts

遞增的url參數(shù)

變化的request body

test script

在test suite中運(yùn)行

之前都兩篇文章都是一年多之前的事情了。最開始的初衷是想把各種細(xì)節(jié)都寫了巷屿,中途因?yàn)槊ζ渌虑橛鹱剩屯浟巳砻猓艞壛恕5疫@個(gè)博客好像最火的就是這個(gè)系列爽冕,一直有人評(píng)論拭卿。針對(duì)問的最多的問題,我還是試著看看寫下一些東西幢竹,看看是否有用吧。恩静。焕毫。

雖然postman一直也有在用,但用最簡單的方式構(gòu)建request去測(cè)試接口已經(jīng)滿足我日常工作的需求驶乾,就很少有動(dòng)力再去仔細(xì)研究了咬荷。這兩天又看看官網(wǎng),發(fā)現(xiàn)文檔變得更全了轻掩,功能也變多了。時(shí)常有人私信我懦底,問postman能否動(dòng)態(tài)的定制化request的內(nèi)容唇牧。首先,postman就是為custom request而生的聚唐,動(dòng)態(tài)的定制化肯定是支持的丐重,只是需要多點(diǎn)研究而已。這篇文章主要介紹postman里面的scripts杆查,搬磚之作扮惦,希望對(duì)您有幫助。

postman中的script

postman集成了一個(gè)強(qiáng)大的亲桦,基于nodejs的script引擎崖蜜,借助它,您可以為requests和collections添加動(dòng)態(tài)的行為客峭。

這樣就可以在編寫test suite時(shí)豫领,構(gòu)建可以包含動(dòng)態(tài)參數(shù)的request,在request之間傳遞數(shù)據(jù)等等舔琅。您可以在流程中的兩個(gè)事件中添加要執(zhí)行的JavaScript代碼:

1. 在發(fā)送request之前等恐,編寫pre-request script,定制化request。

2. 收到response之后课蔬,用test script囱稽,處理返回的數(shù)據(jù)。

整個(gè)流大概是這樣的:

Pre-request scripts

pre-request script就是一段在發(fā)送request之前執(zhí)行的代碼二跋。大家可以自己腦補(bǔ)在什么場(chǎng)景可以用到它战惊。比如,隨機(jī)的URL參數(shù)同欠,變化的requst body等样傍。

這里要注意的是,pre-request script和test scripts一樣铺遂,都是javascript衫哥,同時(shí),和angular js一樣襟锐,可以用兩個(gè){{}}訪問環(huán)境變量撤逢。

還是趕緊來舉例吧。

遞增的url參數(shù)

最近一直在玩elasticsearch粮坞,就用elasticsearch的API來作為例子吧蚊荣。我們通過GET API,可以獲取ES中的數(shù)據(jù)莫杈。我現(xiàn)在從tushare上把新華保險(xiǎn)的日線數(shù)據(jù)導(dǎo)出為json格式的文件互例,存儲(chǔ)到ES當(dāng)中。每條記錄都有一個(gè)id筝闹。通過postman單個(gè)調(diào)用接口媳叨,大概是這樣的:(截圖中的url應(yīng)該是localhost:9200/xhbx/stock-record/_search?q=_id:707)

但是如果我想通過run collections的方式,一次讀出100天的數(shù)據(jù)呢关顷?那就是從712開始糊秆,每次request遞增1。查詢100次议双。

借助于pre-request script我們可以很方便的實(shí)現(xiàn)這個(gè)需求痘番。

首先,查看當(dāng)前的環(huán)境變量平痰,點(diǎn)擊右上角的眼睛圖標(biāo):

你可以看到自定義的SampleHost和Globals汞舱。

我們可以定一個(gè)global變量xhbxId,用于自增宗雇。點(diǎn)擊上圖的Edit兵拢。或者點(diǎn)擊眼睛圖標(biāo)旁的齒輪圖標(biāo)逾礁,添加一個(gè)global變量:

然后说铃,配置我們的request使用xhbxId访惜。點(diǎn)擊send,你會(huì)發(fā)現(xiàn)腻扇,能夠正確請(qǐng)求到id為707的數(shù)據(jù):

點(diǎn)擊parameter下方的Pre-request scripts選項(xiàng)债热,編輯我們的腳本:

var temp =parseInt(postman.getGlobalVariable("xhbxId"));

temp +=1;

postman.setGlobalVariable("xhbxId", temp);

腳本的意思是給xhbxId自增1。前面已經(jīng)說過幼苛,pre-request script會(huì)在request被發(fā)送之前運(yùn)行窒篱,所以,所以每次我們點(diǎn)擊send舶沿,xhbxId都應(yīng)該增加1墙杯。也就是下一次是708。

另外括荡,這里要注意的是高镐,所有的環(huán)境變量或者global變量,都是以字符串的形式存儲(chǔ)的畸冲,所以我們的自增操作需要先轉(zhuǎn)化為int嫉髓。

運(yùn)行結(jié)果如圖:

變化的request body

很多人也問我,request body的問題邑闲。其實(shí)和url參數(shù)一樣算行,直接引用就是了。

保持我們之前的Pre-request scripts不變苫耸。把request的類型改成POST州邢,編輯我們的request body,使用{{xhbxId}}的方式獲取參數(shù)褪子。本次調(diào)用正確的遞增了Id為709量淌。

test script

接下來,通過test script測(cè)試結(jié)果褐筛。保持我們之前的Pre-request scripts不變。如果再按一次send叙身,則返回的結(jié)果中渔扎,應(yīng)該包含如下字符串:

"_id":"710"

那么,我們就應(yīng)該在test script里面信轿,測(cè)試response里面應(yīng)該包含如上字符串晃痴。test script和pre-request script是一樣的,所以我們可以很方便的使用xhbxId作為判斷的比較值财忽。

vartemp = postman.getGlobalVariable("xhbxId");

tests["Body matches string"] = responseBody.has("\"_id\":\""+temp+"\"");

1

2

具體操作如下圖:

選擇Tests

讀出xhbxId

放入response body: Contains strings的snippet

運(yùn)行之后倘核,test的結(jié)果是OK的,1/1

710被匹配上即彪。

在test suite中運(yùn)行

好了紧唱,準(zhǔn)備好上面的條件活尊,我們把test case保存到collection當(dāng)中(我新建了一個(gè)叫test_script的collections,不知道怎么操作的話看我的教程2)漏益。運(yùn)行個(gè)100次蛹锰。

測(cè)試通過,接口沒問題绰疤。這時(shí)铜犬,運(yùn)行了100次,global的xhbxId應(yīng)該從710增加到810了轻庆。

確實(shí)是這樣癣猾,postman正確運(yùn)行。

最后編輯于
?著作權(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
  • 文/不壞的土叔 我叫張陵醉途,是天一觀的道長矾瑰。 經(jī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
  • 文/蒼蘭香墨 我猛地睜開眼婶芭,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了着饥?” 一聲冷哼從身側(cè)響起犀农,我...
    開封第一講書人閱讀 37,747評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宰掉,沒想到半個(gè)月后呵哨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,207評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡轨奄,尸身上長有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
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽怠堪。三九已至揽乱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間粟矿,已是汗流浹背凰棉。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留陌粹,地道東北人撒犀。 一個(gè)月前我還...
    沈念sama閱讀 46,401評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像掏秩,于是被迫代替她去往敵國和親或舞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評(píng)論 2 349

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