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);
});