【實(shí)踐】2.如何使用Postman做多接口測(cè)試

1. 摘要

本文講解使用postman做接口測(cè)試和批量接口測(cè)試的方法。Postman的入門參考《【知識(shí)】1.Postman接口測(cè)試神器從安裝到精通》

2.實(shí)踐內(nèi)容

2.1 環(huán)境變量和全局變量的設(shè)置:

a. 環(huán)境變量的設(shè)置方法如下圖。點(diǎn)擊設(shè)置一個(gè)環(huán)境變量,名為"user_pwd", 里面設(shè)置username 和passwd的值,然后在請(qǐng)求中應(yīng)用這個(gè)環(huán)境變量"user_pwd"即可。

環(huán)境變量可以使用在以下地方

  • URL
  • URL params
  • Header values
  • form-data/url-encoded values
  • Raw body content
  • Helper fields

注意:在你要使用的變量名上附上雙花括號(hào),一個(gè)請(qǐng)求只能應(yīng)用一個(gè)環(huán)境變量。

下圖"username" 和"passwd" 的value值應(yīng)用了環(huán)境變量"user_pwd",所以在body 中,只需在key對(duì)應(yīng)的value那寫上變量{{username}}, {{passwd}}

注意:一個(gè)項(xiàng)目需要測(cè)試好幾個(gè)環(huán)境的情況,就可以對(duì)不同的環(huán)境設(shè)置一個(gè)環(huán)境變量,比如對(duì)“test environment”設(shè)置一個(gè)環(huán)境變量,對(duì)“stage environment”設(shè)置一個(gè)環(huán)境變量,對(duì)“production 環(huán)境”設(shè)置一個(gè)環(huán)境變量。

b. 全局變量的設(shè)置方法類似,如下圖,點(diǎn)擊"Globals" 后就會(huì)出現(xiàn)添加環(huán)境變量類似的頁(yè)面,進(jìn)行變量和值的設(shè)置。

注意:全局變量設(shè)置就應(yīng)用于整個(gè)收藏夾(Collection)中的請(qǐng)求,不用像環(huán)境變量一樣需要選取。

2.2 用Postman做接口測(cè)試的實(shí)例

接口測(cè)試中常用的請(qǐng)求為GET 和POST,以下均以這兩種請(qǐng)求為例。

GET 和POST 的區(qū)別:

  • GET 使用URL 或Cookie 傳參,而POST將數(shù)據(jù)放在Body 中。
  • GET的URL 在長(zhǎng)度上會(huì)有限制,而POST沒(méi)有。
  • POST比GET相對(duì)安全,因?yàn)樵诘刂窓诓豢梢?jiàn)。
  • 一般POST請(qǐng)求用來(lái)獲取數(shù)據(jù),POST請(qǐng)求用來(lái)發(fā)送數(shù)據(jù)。

對(duì)于上面的區(qū)別,其實(shí)第一點(diǎn)POST也可以將數(shù)據(jù)放在URL里,GET請(qǐng)求其實(shí)也沒(méi)有長(zhǎng)度限制,POST請(qǐng)求看起來(lái)是隱式的,但是可以通過(guò)抓包拿到參數(shù)。

1. GET 請(qǐng)求:

平常我們拿一個(gè)url 訪問(wèn)頁(yè)面,就是所謂的get 請(qǐng)求。

例1.(stu_info 接口:獲取名字為xx 的信息)

將請(qǐng)求方式設(shè)為GET, 同時(shí)輸入完整的url, 跟訪問(wèn)瀏覽器一樣, 或者輸入接口url, 點(diǎn)擊"Params" 輸入需要的key 以及value, 點(diǎn)擊"Send", 即可在"Response" 中查看返回的結(jié)果。

注意: get 請(qǐng)求的內(nèi)容不能放在body里,并且長(zhǎng)度有限制。由于對(duì)domain 設(shè)置了全局變量,所以,url 中用變量{{domain}} 做了替換,以下的請(qǐng)求中都應(yīng)用了這個(gè)全局變量。

例2. (all_stu 接口:獲取所有用戶的信息)

除了例1這種GET請(qǐng)求,還有些接口發(fā)送GET請(qǐng)求時(shí)除了發(fā)送key-value, 還要將Headers的信息也一起發(fā)送過(guò)去,這樣就可以借助Postman來(lái)實(shí)現(xiàn)。以下圖為例,需要在Headers 里添加"Referer"信息,以獲取所有用戶的信息。

2. POST請(qǐng)求:

POST 請(qǐng)求不能像GET一樣直接在瀏覽器輸入就可以請(qǐng)求,需要借助工具來(lái)完成。

使用方法:選擇請(qǐng)求方式為post,輸入請(qǐng)求的url,以及輸入必要的"Authorization" , "header""Body" 數(shù)據(jù)。post請(qǐng)求可以發(fā)送key-value, json格式,file等。

對(duì)于"Authorization"的使用,遇到比較多的是Type"Basic Auth", 然后設(shè)置對(duì)應(yīng)的Username 和Password

這里的username, password的值可以通過(guò)設(shè)置環(huán)境變量的方式取得。

a. 用Postman 發(fā)送key-value 的請(qǐng)求:

以login 接口為例,在Body 中選取"form-data" 格式,輸入所需的key-value, 選取對(duì)應(yīng)的環(huán)境變量。

b. 用Postman 發(fā)送json格式的請(qǐng)求:

以add user 接口為例,在Body 中選取"raw" 格式,根據(jù)接口文檔輸入json 數(shù)據(jù), 有需要應(yīng)用環(huán)境變量的選取環(huán)境變量。

c. 用Postman 發(fā)送文件的請(qǐng)求:

以file upload 接口為例,在Body 中選取"form-data" 格式,在key 里輸入"file",在右邊的下拉里選取類型為"File",點(diǎn)擊"Choose Files" 就可以上傳本地文件了。

2.3 Pre-requestScript 的使用

對(duì)于環(huán)境變量和全局變量的使用,除了上面所講的方法外,也可以用Pre-requestScript 方法。

以login接口為例,在"Pre-requestScript"中設(shè)置環(huán)境變量 "username", "passwd",在Body 中選取"form-data"** 格式,輸入所需的key-value, value即為變量{{username}}, {{passwd}}

postman. setEnvironmentVariable (“key”, “value”);

postman. setGlobalVariable (“key”, “value”);

getEnvironmentVariable ("key");//獲取key的環(huán)境變量

getGlobalVariable(“key”);//獲取key的全局變量

2.4 Tests 的使用

2.4.1. Tests 作為測(cè)試用例的應(yīng)用

Tests 主要用來(lái)設(shè)計(jì)用例,比如要測(cè)試返回結(jié)果是否含有某一字符串,就可以用到 Tests。以gold_add 接口為例,來(lái)編寫測(cè)試用例,分別測(cè)試返回的結(jié)果是否含有,如下所示:

響應(yīng)成功返回PASS, 失敗返回FAIL。

常用tests如下:

1.檢查response body中是否包含某個(gè)string

tests["Body matches string"] = responseBody.has("string_you_want_to_search");

注意:"Body matches string" 需唯一。

2.檢測(cè)JSON中的某個(gè)值是否等于預(yù)期的值

var data = JSON.parse(responseBody);

tests["Your test name"] = data.value === 100;

JSON.parse()方法,把json字符串轉(zhuǎn)化為對(duì)象。parse()會(huì)進(jìn)行json格式的檢查是一個(gè)安全的函數(shù)。

如:檢查json中某個(gè)數(shù)組元素的個(gè)數(shù)(這里檢測(cè)programs的長(zhǎng)度)

var data = JSON.parse(responseBody);

tests["program's lenght"] = data.programs.length === 5;

3.檢查response body是否與某個(gè)string相等

4.轉(zhuǎn)換XML body為JSON對(duì)象

var jsonObject = xml2Json(responseBody);`
tests["Body is correct"] = responseBody === "response_body_string";

5.測(cè)試response Headers中的某個(gè)元素是否存在(如:Content-Type)

tests["Content-Type is present"] = postman.getResponseHeader("Content-Type"); 

//getResponseHeader()方法會(huì)返回header的值,如果該值存在

或者:

tests["Content-Type is present"] = responseHeaders.hasOwnProperty("Content-Type");

上面的方法,不區(qū)分大小寫。下面的方法,要區(qū)分大小寫。

6.驗(yàn)證Status code的值

tests["Status code is 200"] = responseCode.code === 200;

7.驗(yàn)證Response time是否小于某個(gè)值

tests["Response time is less than 200ms"] = responseTime < 200;

8.name是否包含某個(gè)值

tests["Status code name has string"] = responseCode.name.has("Created");

9.POST 請(qǐng)求的狀態(tài)響應(yīng)碼是否是某個(gè)值

tests["Successful POST request"] = responseCode.code === 201 || responseCode.code === 202;

10.很小的JSON數(shù)據(jù)驗(yàn)證器

var schema = {

"items": {

"type": "boolean"

}

};

var data1 = [true, false];

var data2 = [true, 123];

console.log(tv4.error);

tests["Valid Data1"] = tv4.validate(data1, schema);

tests["Valid Data2"] = tv4.validate(data2, schema);

2.4.2. 設(shè)置環(huán)境變量,建立多個(gè)接口間的關(guān)聯(lián)

以gold_add 接口為例,由于該接口有權(quán)限驗(yàn)證,需要admin用戶才可以做操作,需要添加cookie,所以需要將login 接口關(guān)聯(lián)起來(lái)使用。

在login 請(qǐng)求中, 在"Tests"中加入

var jsonData =JSON.parse(responseBody);//獲取body中返回的所有參數(shù)
postman.setEnvironmentVariable("sign",jsonData.login_info.sign);//把返回參數(shù)中的sign設(shè)置為環(huán)境變量

這樣sign 就可以作為環(huán)境變量,應(yīng)用于gold_add接口。

在gold_add 接口中,{{username}} 由于在環(huán)境變量"user_pwd" 中已經(jīng)設(shè)置,可以直接輸入變量名, {{sign}} 動(dòng)態(tài)取得login接口中 Response 的 "sign" 值,{{sign}}已在上面login 請(qǐng)求的"Tests" 中定義。

2.5 使用Postman Interceptor 發(fā)送帶Cookie 的請(qǐng)求

使用Postman 發(fā)送Cookie 的請(qǐng)求時(shí),發(fā)現(xiàn)無(wú)法發(fā)送成功, 顯示"Restricted Header (use Postman Interceptor)" 提示。 網(wǎng)上搜了一下,原來(lái)是要在Chrome安裝"Postman Interceptor"插件,它可以讓postman中發(fā)送請(qǐng)求的時(shí)候使用這個(gè)網(wǎng)站的瀏覽器cookie。

Chrome 安裝完以后如下圖所示有出現(xiàn)一個(gè)下圖中的小圖標(biāo)。

在Postman 使用的時(shí)候要將Interceptor 打開,如下圖所示,紅框中的圖標(biāo)要高亮,這樣發(fā)送Cookie 的請(qǐng)求時(shí)就不會(huì)出現(xiàn)上面提到的提示信息了。

如果請(qǐng)求成功的話,在"Cookies" 中可以查看到Cookie 值。


本文轉(zhuǎn)載自《 postman 做接口測(cè)試之學(xué)習(xí)筆記》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評(píng)論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,538評(píng)論 3 417
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評(píng)論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評(píng)論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,761評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,207評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,419評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,959評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,782評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,983評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,222評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,678評(píng)論 3 392
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,978評(píng)論 2 374