Postman+Newman 簡介和簡單使用

簡介

Postman 使一款可以方便我們調(diào)用API的工具,通過Postman 與 Newman結(jié)合我們還可以批量運(yùn)行API達(dá)到API自動化測試的目的。

簡單分析:

優(yōu)點

上手容易

提供錄制插件,提高Case編寫速度

官方文檔齊全,用戶眾多

等等

不足

可擴(kuò)展性較差

無法與數(shù)據(jù)庫結(jié)合

非開源

Case校驗方式較少

簡單使用:

官方地址:https://www.getpostman.com/

Postman 安裝

Window 系統(tǒng)需要先安裝Chrome瀏覽器,然后在應(yīng)用商店找到Postman插件,直接點擊安裝便可:https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=cn

Paste_Image.png

測試GET類型API

本小節(jié)摘錄:http://www.lxweimin.com/p/61cfcb436ee4

以豆瓣搜索圖書API為例

Paste_Image.png

這個接口的method為get,postman默認(rèn)為get,在url欄輸入被測接口

get請求

在接口文檔中,q與tag其中的一個是必填項,所以這里需要配置參數(shù),點擊url右側(cè)的params,并輸入?yún)?shù)

點擊send按鈕發(fā)送請求,在下面可以看到返回的response,響應(yīng)的狀態(tài)碼,與響應(yīng)時間

response還可以以不同的方式查看,并且還可以看到cookies,headers信息

每次以不同的參數(shù)或者設(shè)置,在左側(cè)history都會幫我們記錄一個接口測試歷史,以便于下次重新調(diào)用

測試POST類型API

以Postman自帶的接口為例

選取請求的方法為POST,并輸入接口地址,因為post請求大多是json形式,所以可以打開Body選項,并選擇JSON(application/json)形式,輸入請求的json,同樣其余的操作跟GET接口一樣。

post

變量的設(shè)置

編寫的API往往需要在多個環(huán)境下執(zhí)行,而Postman 提供了兩種類型的變量:環(huán)境變量和全局變量,從而很好的解決了這個問題。

環(huán)境變量有效范圍僅僅在于你所選取的環(huán)境,全局變量對所有的環(huán)境都試用。

環(huán)境變量

api可能需要在撥通的環(huán)境中運(yùn)行,所以api請求的服務(wù)器地址不能寫死,希望是可以配置的,創(chuàng)建環(huán)境變量有多種方式。

手工預(yù)先創(chuàng)建環(huán)境變量

addENV.gif

代碼自動創(chuàng)建環(huán)境變量

自動新建環(huán)境變量可在兩種情況下創(chuàng)建,但是創(chuàng)建方式相同都是用了postman提供的方法:

postman.setEnvironmentVariable("key", "value");

在某個請求發(fā)起之前創(chuàng)建:

在Pre-request Script標(biāo)簽里面添加代碼:

autoENV1.gif

在某個請求發(fā)起之后創(chuàng)建:

在Tests標(biāo)簽里面添加如下

Paste_Image.png

全局變量

全部變量跟環(huán)境變量的創(chuàng)建類似,也可以通過手工預(yù)先創(chuàng)建或者通過代碼去創(chuàng)建。

通過手工預(yù)先創(chuàng)建

全局變量設(shè)置.gif

通過代碼創(chuàng)建

2.1 在請求發(fā)起前創(chuàng)建

在Pre-request Script標(biāo)簽里面添加代碼:

postman.setGlobalVariable("key","value");

2.2 在請求發(fā)起后創(chuàng)建

在Tests標(biāo)簽里面添加如下:

postman.setGlobalVariable("key","value");

變量的引用

在需要的地方加上{{變量名}}便可

隨機(jī)數(shù)

PostMan 除了提供環(huán)境變量和全局變量外,還提供了三種隨機(jī)數(shù)。

{{$guid}}

:添加一個V4風(fēng)格GUID

{{$timestamp}}

:將當(dāng)前的時間戳,精確到秒

{{$randomInt}}

:添加0和1000之間的隨機(jī)整數(shù)

測試

本節(jié)摘錄:http://www.lxweimin.com/p/61cfcb436ee4

Postman可以在tests里面,用自帶的腳本對接口進(jìn)行測試,單擊tests標(biāo)簽后可以看到右側(cè)有個snippets欄,里面就是postman內(nèi)置的測試腳本,輔助對接口進(jìn)行測試。

選擇其中的一個腳本,修改其中的參數(shù),再次點擊send,這時response的tests出現(xiàn)了一個1/1,說明執(zhí)行一個測試并且通過測試,綠色pass說明驗證通過

紅色fail說明測試不通過,一個接口可以寫多個腳本進(jìn)行多次測試

  內(nèi)置腳本說明:

1.清除一個全局變量? ? Clear a global variable? ? 對應(yīng)腳本:? ? postman.clearGlobalVariable("variable_key");? ? 參數(shù):需要清除的變量的key2.清除一個環(huán)境變量? ? Clear an environment variable? ? 對應(yīng)腳本:? ? postman.clearEnvironmentVariable("variable_key");? ? 參數(shù):需要清除的環(huán)境變量的key3.response包含內(nèi)容? ? Response body:Contains string? ? 對應(yīng)腳本:? ? tests["Body matches string"] =responseBody.has("string_you_want_to_search");? ? 參數(shù):預(yù)期內(nèi)容4.將xml格式的response轉(zhuǎn)換成son格式? ? Response body:Convert XML body to aJSONObject對應(yīng)腳本:varjsonObject = xml2Json(responseBody);? ? 參數(shù):(默認(rèn)不需要設(shè)置參數(shù),為接口的response)需要轉(zhuǎn)換的xml5.response等于預(yù)期內(nèi)容? ? Response body:Is equal to a string? ? 對應(yīng)腳本:? ? tests["Body is correct"] = responseBody ==="response_body_string";? ? 參數(shù):預(yù)期response6.json解析key的值進(jìn)行校驗? ? Response body:JSONvalue check? ? 對應(yīng)腳本:? ? tests["Args key contains argument passed as url parameter"] ='test'inresponseJSON.args? ? 參數(shù):test替換被測的值,args替換被測的key7.檢查response的header信息是否有被測字段? ? Response headers:Content-Type header check? ? 對應(yīng)腳本:? ? tests["Content-Type is present"] = postman.getResponseHeader("Content-Type");? ? 參數(shù):預(yù)期header8.響應(yīng)時間判斷? ? Response time is less than200ms? ? 對應(yīng)腳本:? ? tests["Response time is less than 200ms"] = responseTime <200;? ? 參數(shù):響應(yīng)時間9.設(shè)置全局變量Setan global variable? ? ? 對應(yīng)腳本:? ? ? postman.setGlobalVariable("variable_key","variable_value");? ? ? 參數(shù):全局變量的鍵值10.設(shè)置環(huán)境變量Setan environment variable? ? ? 對應(yīng)腳本:? ? ? postman.setEnvironmentVariable("variable_key","variable_value");? ? ? 參數(shù):環(huán)境變量的鍵值11.判斷狀態(tài)碼? ? ? Status code:Code is200對應(yīng)腳本:? ? ? tests["Status code is 200"] = responseCode.code !=400;? ? ? 參數(shù):狀態(tài)碼12.檢查code name 是否包含內(nèi)容? ? ? Status code:Code name has string? ? ? 對應(yīng)腳本:? ? ? tests["Status code name has string"] = responseCode.name.has("Created");? ? ? 參數(shù):預(yù)期code name包含字符串13.成功的post請求? ? ? Status code:Successful POST request? ? ? 對應(yīng)腳本:? ? ? tests["Successful POST request"] = responseCode.code ===201|| responseCode.code ===202;14.微小驗證器? ? ? Use Tiny ValidatorforJSONdata? ? ? ? ? ? ? ? ? 對應(yīng)腳本:varschema = {"items": {"type":"boolean"}? ? ? ? };vardata1 = [true,false];vardata2 = [true,123];console.log(tv4.error);? ? ? ? tests["Valid Data1"] = tv4.validate(data1, schema);? ? ? ? tests["Valid Data2"] = tv4.validate(data2, schema);? ? ? ? 參數(shù):可以修改items里面的鍵值對來對應(yīng)驗證json的參數(shù)

使用Runner功能和外部數(shù)據(jù)

Postman 工具自帶了Runner功能,用于批量運(yùn)行腳本。在運(yùn)行時還可以使用外部的CSV或者json文件來指定數(shù)據(jù)。

例如現(xiàn)在新建了如下兩個外部數(shù)據(jù),第一個保存為.json文件,第二個保存為.csv文件。

json.png

csv.png

  新建如下GET請求API,并放于單獨(dú)一個文件夾中管理。接口請求中{{host}}便是用來獲取上步新建的兩個文件夾中的數(shù)據(jù),{{}}中的名字對應(yīng)json文件的key值,對應(yīng)csv文件中的第一行值。

Paste_Image.png

  點擊Runner按鈕,打開Runner界面:

Paste_Image.png

在新打開的窗口中,選著你要剛新建的文件夾名,選擇你要運(yùn)行的環(huán)境,運(yùn)行的次數(shù)和在Data File中選擇剛新建的外部json或者csv文件,并選取文件類型,點擊Start Test,變開始逐條讀取外部文件中的數(shù)據(jù),進(jìn)行運(yùn)行。

Paste_Image.png

Postman Interceptor

Interceptor 可以直接從瀏覽器中獲取請求,并保存在Postman的History中。 這個插件可以大大縮短API配置的時間,同樣Interceptor還有一個功能可以讓Postman和Chrome瀏覽器共用Chrome的Cookies。

安裝 Interceptor

Interceptor 同樣是Chrome的一個插件,所以也可以從Chrome網(wǎng)上商店找到該插件:https://chrome.google.com/webstore/detail/postman-interceptor/aicmkgpgakddgnaphhhpliifpcfhicfo/support?hl=cn,直接點擊安裝。安裝完后會在Chrome 插件中找到下圖標(biāo)識。

Paste_Image.png

使用 Interceptor

開啟Interceptor插件,并設(shè)置你要抓取的網(wǎng)站請求

Paste_Image.png

在Postman 上同樣打開Interceptor

Paste_Image.png

這時在Chrome瀏覽器上訪問一些baidu相關(guān)域名就會自動被Postman抓取,并在Postman的History顯示

Paste_Image.png

Newman

官方幫助文檔地址:https://www.npmjs.com/package/newman

Newman 安裝

嗯,它需要安裝,因為它不是音樂播放器!Newman是為Postman而生,專門用來運(yùn)行Postman編寫好的腳本。Newman安裝步驟:

需要安裝nodejs,并配置好環(huán)境

打開控制臺,運(yùn)行:npm install -g newman

Paste_Image.png

校驗是否安裝成功,運(yùn)行:newman --version

Paste_Image.png

Newman 執(zhí)行腳本

Newman在3版本后做了比較大的改動,但是運(yùn)行命令越來越簡單如下:

newman run[options]

run 后面跟上要執(zhí)行的json文件或者URL(json 和 URL 都由postman導(dǎo)出生成),再后面跟一些參數(shù),例如環(huán)境變量,測試報告,接口請求超時時間等等。最后給兩個完整的例子做參考:

例子1,通過newman 運(yùn)行postman導(dǎo)出的test1.json文件,并生成多種測試報告(json,junit的xml,html):

newmanrunc:\test1.json--reporterscli,html,json,junit--reporter-json-exportjsonOut.json--reporter-junit-exportxmlOut.xml--reporter-html-exporthtmlOut.html

例子2,運(yùn)行https://www.getpostman.com/collections/cb0cea0af1467c8008fb(postman生成的 )中的所有api,并使用env.json作為環(huán)境變量和globals.json作為全局變量,并使用外部data.csv作為外部數(shù)據(jù),最后設(shè)置了接口請求超時時間為5S 。

newman run https://www.getpostman.com/collections/cb0cea0af1467c8008fb --environment env.json --iteration-data data.csv --globals globals.json --timeout-request 5000

Jenkins 結(jié)合

平時做接口自動化,避免不了最后通過Jenkins做構(gòu)建。既然Newman提供了控制臺命令執(zhí)行方式,那么像通過Jenkins來構(gòu)建也就容易多了。

步驟一:在Jenkins 機(jī)器上安裝Newman

步驟二:搭建Jenkins環(huán)境,并新建個自由風(fēng)格的Job

步驟三:構(gòu)建選擇Execute Windows batch command,并輸入newman 運(yùn)行命令

Paste_Image.png

步驟四:因為上面命令中構(gòu)建會生成junit的xml報告,所以可以在構(gòu)建后用Publish JUnit test result report 插件來生成測試報告。

Paste_Image.png

8/31/2018 更新

最近發(fā)現(xiàn)Postman在chrome商店中下架了,原因猜測就是因為chrome有計劃取消chrome應(yīng)用引起,現(xiàn)在postman 只能安裝桌面版。 那么桌面版的捕獲方式有所變更,今天順便簡單說下桌面版如何捕獲瀏覽器請求。

點擊proxy,打開Proxy設(shè)置,并設(shè)置代理端口和抓取的保存位置,截圖設(shè)置了5555端口,并保存到History.

image.png

設(shè)置IE或者系統(tǒng)代理,以win 10系統(tǒng)為例子,打開IE 設(shè)置代理。 (不用時記得關(guān)閉IE或者系統(tǒng)代理)windows上設(shè)置代理可以參考:https://www.howtogeek.com/tips/how-to-set-your-proxy-settings-in-windows-8.1/

image.png

image.png

打開瀏覽器,正常請求,會發(fā)現(xiàn)這時postman 的history也會捕獲到請求。

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

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