postman學(xué)習(xí)歷程(從入門到精通)

學(xué)習(xí)目錄:(主要講解發(fā)送json請求)

1.postman簡介

2.postman安裝

3.頁面介紹

4.舉例湾宙,做一個簡單的API(post/get)請求

5.response響應(yīng)

6.斷言設(shè)置

7.變量設(shè)置

8.獲取cookies并應(yīng)用

9.鑒權(quán)(獲取token并應(yīng)用)

10.Pre-request Script 詳解

11.collection運行(參數(shù)化)

12.在命令行運行postman腳本

一:postman簡介

Postman可以發(fā)送幾乎所有類型的HTTP請求。適用于不同的操作系統(tǒng)冈绊,Mac侠鳄、WindowsX32、Windows X64死宣、Linux系統(tǒng)等伟恶。可以進行接口自動化測試毅该,可用postman代替人工接口測試博秫,面向所有測試從業(yè)人員潦牛。

使用場景:

(1)開發(fā)接口時快速調(diào)用接口,調(diào)試接口

(2)測試時方便調(diào)用接口挡育,通過不同參數(shù)測試接口輸出

(3)接口可保存下來且反復(fù)運行

(4)支持斷言

postman相關(guān)資料:

(1)官網(wǎng)及下載地址:https://www.getpostman.com/

(2)官方文檔:https://www.getpostman.com/docs/

二:postman安裝

Postman最早是作用在Chrome瀏覽器插件存在的巴碗,可以到Chrome商店搜索下載安裝,也可以找別人共享的Postman插件文件進行安裝即寒,2018年初Chrome停止了對Postman應(yīng)用程序的支持橡淆。目前Chrome應(yīng)用商店能使用的就是Chrome擴展程序和主題背景。

目前Postman提供了獨立安裝包蒿叠,可以不再依賴于Chrome瀏覽器明垢,推薦使用這種方式安裝。本地安裝下載地址:https://www.getpostman.com/apps市咽,下載后直接點擊下一步進行安裝痊银。

三:頁面介紹

postman界面分為左右兩部分,左側(cè)為接口集施绎,右側(cè)為請求和響應(yīng)溯革。

http請求包括4部分:url,method,headers,body

(1)method:get/post....

(2)RequestBody:根據(jù)body類型有不同的控制

——form-data:是表單用來傳遞的默認格式谷醉,可以模擬填寫表單并提交表單致稀。既可以填寫key-value健值,也可以上傳file作為key的value傳遞俱尼,但是file不會被保存

——x-www-form-urlencoded:會將表單內(nèi)的數(shù)據(jù)轉(zhuǎn)換為健值

——raw:可上傳任意格式的文本抖单,包括:text、json遇八、xml矛绘、html等

——binary:只上傳二進制數(shù)據(jù),一次只能上傳一個文件且不能保存歷史

(3)headers:Content-Type的值根據(jù)body類型有不同的控制

——如果發(fā)送表單請求刃永,則Content-Type=application/x-www-form-urlencoded

——如果發(fā)送json請求货矮,則Content-Type=application/json

——如果發(fā)送二進制請求:則Content-Type=application/octet-stream

四:舉例,做一個簡單的API(post/get)請求

我們以v2ex的api地址為例:https://www.v2ex.com/api/topics/hot.json斯够,選擇method為get囚玫,點send,顯示返回結(jié)果及相應(yīng)狀態(tài)读规。

響應(yīng)結(jié)果可以以多種類型展示抓督,如:json、xml束亏、html铃在、text等,查看展現(xiàn)方式可以在headers中Content-Type查看

send請求后枪汪,可在左側(cè)History中查看涌穆,方便再次調(diào)試

以下是http狀態(tài)碼以及對應(yīng)的含義,可以作為測試過程中的參考:

status總結(jié):相應(yīng)status為2xx雀久、3xx開頭表示ok宿稀,4xx表示沒有鑒權(quán)或參數(shù)錯誤,5xx表示bug赖捌。

body總結(jié):一般get請求沒有body祝沸,post請求才有body;而響應(yīng)的結(jié)果不一定有body(一般201和204響應(yīng)不會有body)越庇。

五:response響應(yīng)

http://www.manongjc.com/detail/8-latesalslqgqsey.html

responseHeaders {Object}:獲取response的頭部信息罩锐,使用postman.getResponseHeader(key) 或?responseHeaders[key]獲取對應(yīng)key的value值;

responseCookies {Array}:返回一個數(shù)組卤唉,可以通過postman.getResponseCookie(cookieName)?獲取cookie信息涩惑;

responseBody {string}:返回響應(yīng)正文文本的字符串,可以用JSON.parse()轉(zhuǎn)成數(shù)組桑驱;

responseTime {number}:返回響應(yīng)時間,單位ms;

responseCode[String] {Object}:返回的狀態(tài)碼拔第,不帶參數(shù)會返回4個屬性拌喉。 常用的屬性是 code 就是狀態(tài)碼;

六:斷言設(shè)置

斷言就是實際結(jié)果和預(yù)期對比押框,如果一致岔绸,則用例通過,如果不一致橡伞,斷言失敗盒揉,用例失敗。斷言在Tests中編寫骑歹,用到postman tests 這個模塊预烙。

// 檢查響應(yīng)body是否包含字符串

pm.test("Body matches string",?function?() {

????pm.expect(pm.response.text()).to.include("string");

});

// 檢查響應(yīng)body是否等于一個字符串

pm.test("Body is correct",?function?() {

????pm.response.to.have.body("response_body_string");

});

// 檢查響應(yīng)body中某個字段值

pm.test("Your test name",?function?() {

????var?res= pm.response.json();

????pm.expect(res.key).to.eql(value);? ? ? // res.key根據(jù)實際情況獲取

});

// 檢查headers中某個key存在

pm.test("XXX is present", function(){

? ? pm.response.to.have.header("Content-Type");

});

// 檢查響應(yīng)時間<200ms

pm.test("Response time is less than 200ms", function(){

? ? pm.expect(pm.response.responseTime).to.be.below(200);

});

// 檢查狀態(tài)碼status=200(三種方法)

pm.test("Status code is 200",function(){

? ? pm.response.to.have.status(200);

? ? pm.expect(pm.response).to.have.status(200);

? ? pm.expect(pm.response).to.be.success;

????pm.expect(pm.response.code).to.be.eql(200);

});

// 成功的post請求狀態(tài)碼

pm.test("Successful POST request", function()}{

????pm.expect(pm.response.code).to.be.oneOf([200,202]);

});

七:變量設(shè)置?

為什么在代碼中會使用變量呢?

原因:變量允許我們在多個地方重復(fù)使用道媚,以便保持代碼的可讀性扁掸、可維護性等。另外最域,如果想改變這個值谴分,我們只需要改變變量的值即可,其它引用該變量的地方會自動變動镀脂,減少了代碼修改牺蹄。

Global全局變量,Environment環(huán)境變量(可設(shè)置多個)

變量的作用域

變量的引用:{{ 變量名 }}

變量優(yōu)先級:數(shù)據(jù)變量 > 環(huán)境變量 > 全局變量

在postman右上角點擊小眼睛薄翅,里面可設(shè)置全部變量和環(huán)境變量

我們將鼠標移到變量上沙兰,會顯示變量的值

沒有定義這個變量
變量有定義氓奈,顯示變量值

設(shè)置變量(在Tests中編寫腳本)

設(shè)置環(huán)境變量:pm.environment.set("key","value");? ?// 執(zhí)行后在當前環(huán)境變量中保存

設(shè)置全局變量:pm.globals.set("key","value");? ?//?執(zhí)行后在全部變量中保存

獲取變量

獲取環(huán)境變量:pm.environment.get("key");? ?或 postman.getEnvironmentVariable("key");

獲取全局變量:pm.globals.get("key"); ? ?或 postman.getGlobalVariable("key");

從環(huán)境變量和全局變量中搜索變量,優(yōu)先從環(huán)境變量中搜索獲取變量: pm.variables.get("key");

清除變量

清除環(huán)境變量:pm.environment.unset("key");

清除全局變量:pm.globals.unset("key");

驗證responseBody中某key—>value與環(huán)境變量一致鼎天,var res = JSON.parse(responseBody) = {"name":"yanan"}

舉例1:設(shè)置了環(huán)境變量為 namecode=yanan

var value = postman.getEnvironmentVariable("namecode");? ? ? // value===yanan

tests["響應(yīng)結(jié)果的值正確"]=res.name===value;

舉例2:未設(shè)置環(huán)境變量舀奶,從文件中取值。文件名:test.json斋射,文件內(nèi)容:["namecode":"yanan","namecode":"gansu","namecode":"chifeng"]

tests["響應(yīng)結(jié)果的值正確"]=res.name===data.namecode;? ? // 注意:讀取json文件中的值用data.key

八:獲取cookies并應(yīng)用

一般登錄API執(zhí)行后育勺,postman會自動保存cookies。點擊下圖Cookies罗岖,查看測試環(huán)境下的cookie

在下一個API運行時涧至,postman可自動拿到cookie的值,并在requestHeaders中傳遞桑包。

調(diào)試cookies南蓬,腳本代碼實現(xiàn):

(1)如果響應(yīng)的headers中有set-cookie,則使用:

console.log(responseHeaders);? ? // 打印響應(yīng)的Headers

?//打印響應(yīng)的Headers中的set-cookie值

console.log(responseHeaders["set-cookie"]);

console.log(postman.getResponseHeader("set-cookie"));

(2)如果響應(yīng)的cookie在Cookies里顯示哑了,則獲取腳本:

var coo = postman.getResponseCookie("JSESSIONID");?

或?? var coo =?pm.cookies.get("JSESSIONID") ;? ? ? ?// JSESSIONID 為cookie的key

console.log(coo["value"]);

九:鑒權(quán)(獲取token并應(yīng)用)

postman的鑒權(quán)蓖康,就是鑒定你有沒有訪問權(quán)限。一般測到需要登錄的接口垒手,如果沒有保持登錄狀態(tài)就沒法訪問蒜焊。

方法一:在Authorization下選擇“Basic Auth”,填寫Username和Password就可以啦

Authorization下選擇“Basic Auth”

這種方法的優(yōu)缺點:

——優(yōu)點:操作方便科贬,只要輸入一次賬號密碼泳梆,postman會自動記住它;

——缺點:如果登錄用戶名變了榜掌,該方法就不適用了优妙;

方法二:保存登錄接口返回的token值,在requestHeaders中添加參數(shù)憎账,key=‘Authorization’套硼,value=‘TOKEN’+空格+‘token值’

headers中設(shè)置Authorization

這種方法的缺點是:每個接口都需要在Headers下添加key 和 values值

方法三:保存登錄接口返回的token值,并添加到環(huán)境變量中胞皱,請求時作為參數(shù)傳遞

token作為參數(shù)傳遞

這種方法適用于token加在url后面的情況邪意,且隨著登錄用戶不同,參數(shù)隨之變化

十:Pre-request Script 詳解

Pre-request Script是集合中請求發(fā)送之前需要執(zhí)行的代碼片段反砌。如:請求參數(shù)中包含一個隨機數(shù)雾鬼,或者請求header中包括一個時間戳,或者你的請求參數(shù)需要加密時宴树,可以在Pre-request Script中處理代碼策菜。

(1)請求參數(shù)為隨機數(shù),使用Math.floor(Math.random()*3)獲取一個0-3之間的隨機數(shù),并將該值加入環(huán)境變量中

pm.environment.set("tmp_relationDictId", Math.floor(Math.random()*3));

(2)根據(jù)身份證號判斷性別又憨,將性別值加入環(huán)境變量中

var idNo='230700199412209188';

var sexInt='';

if (parseInt(idNo.substr(16, 1)) % 2 == 1) {

? ? sexInt=1;

? ? } else {

? ? sexInt=0;

}

pm.environment.set("tem_sexInt",sexInt);

根據(jù)具體情況具體實現(xiàn)腳本代碼翠霍,且右側(cè)有提供一些常用代碼可作為參考

十一:collection運行(參數(shù)化)

collections是多個測試用例的集合,我們可以將一個項目創(chuàng)建一個集合蠢莺,也可以一個功能一個集合壶运,根據(jù)實際情況確定。將request請求放在Collection中浪秘,把測試用例進行工程化管理,則運行collection時會一次性運行collection中的所有用例埠况。點擊下圖的“Run”耸携,打開“Collection Runner”

Collection Runner

參數(shù)化

postman提供了非常便利的數(shù)據(jù)驅(qū)動測試,支持用data File導(dǎo)入數(shù)據(jù)辕翰。在Iterations重復(fù)運行時夺衍,如果每個用例需要每次運行時使用不同的數(shù)據(jù),應(yīng)滿足以下兩個條件:

(1)腳本中要用到數(shù)據(jù)的地方參數(shù)化喜命,即用一個變量來代替沟沙,每次運行時,重新獲取當前的運行數(shù)據(jù)壁榕;

(2)需要有一個數(shù)據(jù)池矛紫,這個數(shù)據(jù)池里的數(shù)據(jù)條數(shù),要與重復(fù)運行的次數(shù)相同牌里;

例如:我們要對test02用例做數(shù)據(jù)驅(qū)動測試颊咬,涉及參數(shù):{{name_code}},則我們首先要構(gòu)造一個data file牡辽,定義為test.json

data file

在collection Runner中設(shè)置No Environment喳篇,Iterations=3(與數(shù)據(jù)池中的數(shù)據(jù)條數(shù)相同),data選擇test.json文件态辛,然后選擇Data File Type麸澜,支持json和csv格式(csv相當于Excel),這里我們選擇json格式奏黑。

select data file

設(shè)置完運行項后炊邦,我們可以點擊‘Preview’預(yù)覽,查看preview中的數(shù)據(jù)循環(huán)次數(shù)與設(shè)置的Iterations相同

preview

這時我們運行用例熟史,運行結(jié)果如下

run results(tests錯誤)

我們看到responseCode=200運行成功铣耘,但是有一個斷言運行失敗,我們查看Tests斷言以故,發(fā)現(xiàn)變量值是從環(huán)境變量中取的蜗细,而運行的用例中使用的是data file中的變量

修改方法:從data file中取值

// 從test_data文件中獲取值,用data.key值

tests["返回值中的name必須與斷言中的name相等"] = res.name === data.name_code;

run results

十二: 在命令行運行postman腳本

有時我們的程序可能需要在無UI界面的服務(wù)器運行(如:linux或mac)或在CI持續(xù)集成上運行,這就需要使用命令行運行腳本啦炉媒。運行腳本需要安裝:nodejs踪区、cnpm、newman

(1)安裝cnpm(需要依賴npm)

cmd中運行:npm install -g cnpm -registry=https://registry.npm.taobao.org 安裝cnpm吊骤,再用cnpm -v命令查看是否安裝成功缎岗。

cnpm安裝

(2)安裝Newman(依賴nodejs)

Newman是命令行的postman接口集運行器,它允許你通過命令行的方式去運行一個用例集白粉,它的構(gòu)建具有可擴展性传泊,因此可以輕松將其與持續(xù)集成服務(wù)器集成并構(gòu)建系統(tǒng)。Newman保持了與Postman相同的功能鸭巴。

在安裝Newman之前需要先安裝nodejs眷细,這里不介紹nodejs的安裝,可自行通過node官網(wǎng)(https://nodejs.org/en/)下載需要的安裝包(https://nodejs.org/download/)進行安裝即可鹃祖。

Nodejs安裝成功以后溪椎,打開cmd命令行,輸入npm install –g newman? 或者??cnpm install newman --global?回車即可自動安裝恬口,如果遇到錯誤校读,可以嘗試使用npm --registry https://registry.npm.taobao.org install –gnewman,安裝完成后祖能,輸入newman即可看到命令選項歉秫,如下圖:

(3)導(dǎo)出collection

將collection集導(dǎo)出為json格式,與之前構(gòu)造的data file文件test.json放在同一目錄下养铸。

export collection

(4)執(zhí)行腳本

cmd進入文件所在目錄下

運行命令:newman run v2ex.postman_collection.json -d test.json -r html,cli,json,junit

命令解析

獲取的cli格式報告如下:

cli報告

其他格式的報告在哪呢端考?? 運行完成后揭厚,當前目錄下會生成一個newman文件夾却特,json、html筛圆、xml等報告在這里顯示

(5)導(dǎo)出為其他腳本運行(如:python裂明、java等)

postman右側(cè)點擊‘Code’,選擇腳本語言太援,我們這里選擇python-Requests闽晦,copy to clipboard,復(fù)制到在.py文件中

導(dǎo)出的原python腳本

修改代碼:刪除headers提岔,用for..in..循環(huán)做數(shù)據(jù)驅(qū)動仙蛉,導(dǎo)入unittest做自動化測試,將response.json()轉(zhuǎn)換為json格式碱蒙,并添加斷言

修改后的代碼

運行python腳本荠瘪,在python項目編輯器中右鍵->Run夯巷,或者在命令行中執(zhí)行python test.py

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市哀墓,隨后出現(xiàn)的幾起案子趁餐,更是在濱河造成了極大的恐慌,老刑警劉巖篮绰,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件后雷,死亡現(xiàn)場離奇詭異,居然都是意外死亡吠各,警方通過查閱死者的電腦和手機臀突,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贾漏,“玉大人候学,你說我怎么就攤上這事】拇桑” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵念逞,是天一觀的道長困食。 經(jīng)常有香客問我,道長翎承,這世上最難降的妖魔是什么硕盹? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮叨咖,結(jié)果婚禮上瘩例,老公的妹妹穿的比我還像新娘。我一直安慰自己甸各,他們只是感情好垛贤,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著趣倾,像睡著了一般聘惦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上儒恋,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天善绎,我揣著相機與錄音,去河邊找鬼诫尽。 笑死禀酱,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的牧嫉。 我是一名探鬼主播剂跟,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了浩聋?” 一聲冷哼從身側(cè)響起观蜗,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎衣洁,沒想到半個月后墓捻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡坊夫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年砖第,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片环凿。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡梧兼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出智听,到底是詐尸還是另有隱情羽杰,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布到推,位于F島的核電站考赛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏莉测。R本人自食惡果不足惜颜骤,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望捣卤。 院中可真熱鬧忍抽,春花似錦、人聲如沸董朝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽子姜。三九已至锈锤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間闲询,已是汗流浹背久免。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留扭弧,地道東北人阎姥。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像鸽捻,于是被迫代替她去往敵國和親呼巴。 傳聞我的和親對象是個殘疾皇子泽腮,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

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