Postman pm 對(duì)象 - 測(cè)試相關(guān)功能

pm 對(duì)象還提供了測(cè)試相關(guān)功能:

  • pm.test 函數(shù)用來(lái)生成一個(gè)測(cè)試哼审,可以輸入測(cè)試標(biāo)題,并加入各種斷言显设。斷言全部成功則測(cè)試成功框弛,某一個(gè)斷言失敗則測(cè)試失敗敷硅;一個(gè)請(qǐng)求可以添加多個(gè)測(cè)試函數(shù)功咒。
  • pm.expect 函數(shù),用來(lái)生成各種斷言绞蹦;
  • pm.response 對(duì)象中也提供了很多內(nèi)置的斷言語(yǔ)句力奋。

pm.test

pm.test(testName:String, specFunction:Function):Function

這個(gè)函數(shù)已經(jīng)在我們之前的文章中出現(xiàn)過(guò)很多次了,只是那時(shí)候不需要大家深入了解幽七,使用預(yù)設(shè)的語(yǔ)句就可以了景殷。

與 tests 對(duì)象不同,使用 pm.test() 函數(shù)編寫測(cè)試可以準(zhǔn)確地命名測(cè)試澡屡。

即使該函數(shù)內(nèi)部存在錯(cuò)誤猿挚,該函數(shù)也可以確保腳本的其余部分不會(huì)被阻塞。

pm.test(testName:String, specFunction:Function) 接收兩個(gè)參數(shù): testName 用字符串輸入一個(gè)測(cè)試名稱驶鹉,會(huì)顯示在最終報(bào)告上绩蜻;specFunction 接收一個(gè)回調(diào)函數(shù),在該回調(diào)函數(shù)內(nèi)部運(yùn)行斷言語(yǔ)句室埋。

  pm.test("response should be okay to process", function () {
      pm.response.to.not.be.error;
      pm.response.to.have.jsonBody('');
      pm.response.to.not.have.jsonBody('error');
  });

pm.expect

pm.expect(assertion:*):Function → Assertion

pm.expect 是一個(gè)通用的斷言函數(shù)办绝。這是一個(gè)基于 JavaScript BDD 庫(kù) ChaiJS 開發(fā)的功能。使用 ChaiJS 庫(kù)姚淆,可以很容易地編寫語(yǔ)法易讀的測(cè)試孕蝉。(BDD 嘛,行為驅(qū)動(dòng)開發(fā)腌逢,用自然語(yǔ)言的形式描述測(cè)試過(guò)程降淮,當(dāng)然易讀)所以語(yǔ)法與 ChaiJS 一致。

該函數(shù)對(duì)于處理來(lái)自響應(yīng) response 或變量 variables 的數(shù)據(jù)斷言很有用搏讶。pm.expect 主要與 pm.test 聯(lián)用佳鳖。

expect 是期望的意思,也就是傳遞給 expect 函數(shù)的值是否符合預(yù)期媒惕。通過(guò)一系列的調(diào)用鏈來(lái)實(shí)現(xiàn)系吩。

常見的用法如:

pm.test("判斷包含關(guān)系", function(){
    pm.expect('abc').to.include('ab'); // => 斷言
});
  • pm.expect()接收一個(gè)斷言內(nèi)容(相當(dāng)于實(shí)際結(jié)果),可以是任意數(shù)據(jù)類型吓笙;
  • .to 是連接符,用于連接斷言與判斷巾腕;
  • .include() 用于指定斷言方式和預(yù)期結(jié)果面睛。

連接符

.to 一樣絮蒿,expect 還提供了很多連接符,這些連接符并不會(huì)對(duì)結(jié)果造成任何影響叁鉴,主要目的是讓斷言語(yǔ)句更符合英文文法土涝。也就是說(shuō)你隨便寫都可以。

除了 .to 以外還有如下連接符:

to幌墓,be但壮,been,is常侣,that蜡饵,which,and胳施,has溯祸,have,with舞肆,at焦辅,of,same

斷言方式

相等:.equal(value)

  • value:Mixed

斷言目標(biāo)嚴(yán)格等于(===)value椿胯。

pm.test("相等", function(){
    pm.expect('100').to.be.equal(100); // => 失敗筷登,類型不符
    pm.expect(5.5).to.be.equal(5.5);
});

取非:.not

對(duì)之后的斷言無(wú)條件取反

pm.test("取反", function(){
    pm.expect('nemo').to.not.equal('name');  // => not對(duì)后面的斷言取反
});

expect(foo).to.not.equal('bar')
expect(goodFn).to.not.throw(Error)
expect({ foo: 'baz'}).to.have.property('foo')
.and.not.equal('bar')

包含:.include(value) / .contains(value)

  • value:Object | String | Number

表示實(shí)際結(jié)果是否包含預(yù)期結(jié)果,兩個(gè)函數(shù)用法一致哩盲。

pm.test("判斷包含關(guān)系", function(){
    pm.expect('abc').to.include('ab');
    pm.expect('abc').to.contains('ab');
    pm.expect({name:"Nemo"}).to.contains.keys('name');
});

判斷結(jié)果是否為真:.ok/.true

斷言目標(biāo)為真值前方。.true 與 .ok 的區(qū)別是不進(jìn)行類型轉(zhuǎn)換,只能為布爾值 true 才能通過(guò)斷言种冬。

pm.test("判斷結(jié)果是否為真", function(){
    pm.expect('nemo').to.be.ok;  // => 字符串有值
    pm.expect(1).to.be.true;  // => 斷言失敗镣丑,1不是布爾值true
    pm.expect(1).to.be.ok;   // 有值為1,斷言成功
    pm.expect(false).to.not.be.ok;
    pm.expect(null).to.not.be.true;
});

以上列出了最常用的一些斷言方式娱两,如果有興趣的同學(xué)可以查看這位博主的翻譯內(nèi)容《ChaiJS 斷言庫(kù) API 中文文檔》

Response 斷言 API

以下是 pm.response 對(duì)象內(nèi)置的斷言語(yǔ)句莺匠,可以在不使用 expect 函數(shù)的情況下直接使用:

  • pm.response.to.have.status(code:Number):判斷響應(yīng)結(jié)果是否包含指定的狀態(tài)碼;
  • pm.response.to.have.status(reason:String):判斷響應(yīng)結(jié)果是否包含指定的狀態(tài)描述十兢;
  • pm.response.to.have.header(key:String):判斷響應(yīng)結(jié)果是否包含指定的頭部字段趣竣;
  • pm.response.to.have.header(key:String, optionalValue:String):判斷響應(yīng)結(jié)果是否包含指定的頭部字段和值;
  • pm.response.to.have.body():判斷響應(yīng)結(jié)果是否包含消息體旱物;
  • pm.response.to.have.body(optionalValue:String):判斷響應(yīng)結(jié)果是否包含指定的字符串遥缕;
  • pm.response.to.have.body(optionalValue:RegExp):判斷響應(yīng)結(jié)果是否包含指定的符合正則表達(dá)式規(guī)則的字符串;
  • pm.response.to.have.jsonBody():判斷響應(yīng)結(jié)果是否包含 json 格式的消息體宵呛;
  • pm.response.to.have.jsonBody(optionalExpectEqual:Object):判斷響應(yīng)結(jié)果是否包含指定對(duì)象的 json 格式消息體单匣;
  • pm.response.to.have.jsonBody(optionalExpectPath:String):判斷響應(yīng)結(jié)果是否包含指定層級(jí)的 json 格式消息體;
  • pm.response.to.have.jsonBody(optionalExpectPath:String, optionalValue:*):判斷響應(yīng)結(jié)果是否包含指定路徑并且值也匹配的 json 格式消息體;
  • pm.response.to.have.jsonSchema(schema:Object):判斷響應(yīng)結(jié)果是否符合指定的 json 結(jié)構(gòu)户秤;schema 參數(shù)是以對(duì)象形式描述的 json 結(jié)構(gòu)码秉;
  • pm.response.to.have.jsonSchema(schema:Object, ajvOptions:Object):判斷響應(yīng)結(jié)果是否符合指定的 json 結(jié)構(gòu);schema 參數(shù)是以對(duì)象形式描述的 json 結(jié)構(gòu)并且附加 ajv 庫(kù)的操作 鸡号;

判斷 json 結(jié)果示例:

var shema = {
    type: "object", // 類型為對(duì)象類型
    properties:{
        "error_code": {type: "number"},  // 包含error_code,類型為number
        "data": {type: "array"} 
    },
    require: ["error_code", "data"] // 結(jié)構(gòu)中必須包含error_code和data
}

pm.test("判斷響應(yīng)體結(jié)構(gòu)是否符合", function(){
    pm.response.to.have.jsonSchema(schema);
});

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末转砖,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鲸伴,更是在濱河造成了極大的恐慌府蔗,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汞窗,死亡現(xiàn)場(chǎng)離奇詭異姓赤,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)杉辙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門模捂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蜘矢,你說(shuō)我怎么就攤上這事狂男。” “怎么了品腹?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵岖食,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我舞吭,道長(zhǎng)泡垃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任羡鸥,我火速辦了婚禮蔑穴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘惧浴。我一直安慰自己存和,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布衷旅。 她就那樣靜靜地躺著捐腿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪柿顶。 梳的紋絲不亂的頭發(fā)上茄袖,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音嘁锯,去河邊找鬼宪祥。 笑死聂薪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蝗羊。 我是一名探鬼主播胆建,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼肘交!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起扑馁,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤涯呻,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后腻要,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體复罐,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年雄家,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了效诅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡趟济,死狀恐怖乱投,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情顷编,我是刑警寧澤戚炫,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站媳纬,受9級(jí)特大地震影響双肤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜钮惠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一茅糜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧素挽,春花似錦蔑赘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至贮庞,卻和暖如春峦筒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背窗慎。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工物喷, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留卤材,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓峦失,卻偏偏與公主長(zhǎng)得像扇丛,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子尉辑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

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