簡介
Postman 使一款可以方便我們調用API的工具,通過Postman 與 Newman結合我們還可以批量運行API達到API自動化測試的目的。
簡單分析:
優點
上手容易
提供錄制插件,提高Case編寫速度
官方文檔齊全,用戶眾多
等等
不足
可擴展性較差
無法與數據庫結合
非開源
Case校驗方式較少
簡單使用:
官方地址:https://www.getpostman.com/
Postman 安裝
Window 系統需要先安裝Chrome瀏覽器,然后在應用商店找到Postman插件,直接點擊安裝便可:https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=cn
Paste_Image.png
測試GET類型API
本小節摘錄:http://www.lxweimin.com/p/61cfcb436ee4
以豆瓣搜索圖書API為例
Paste_Image.png
這個接口的method為get,postman默認為get,在url欄輸入被測接口
get請求
在接口文檔中,q與tag其中的一個是必填項,所以這里需要配置參數,點擊url右側的params,并輸入參數
點擊send按鈕發送請求,在下面可以看到返回的response,響應的狀態碼,與響應時間
response還可以以不同的方式查看,并且還可以看到cookies,headers信息
每次以不同的參數或者設置,在左側history都會幫我們記錄一個接口測試歷史,以便于下次重新調用
測試POST類型API
以Postman自帶的接口為例
選取請求的方法為POST,并輸入接口地址,因為post請求大多是json形式,所以可以打開Body選項,并選擇JSON(application/json)形式,輸入請求的json,同樣其余的操作跟GET接口一樣。
post
變量的設置
編寫的API往往需要在多個環境下執行,而Postman 提供了兩種類型的變量:環境變量和全局變量,從而很好的解決了這個問題。
環境變量有效范圍僅僅在于你所選取的環境,全局變量對所有的環境都試用。
環境變量
api可能需要在撥通的環境中運行,所以api請求的服務器地址不能寫死,希望是可以配置的,創建環境變量有多種方式。
手工預先創建環境變量
addENV.gif
代碼自動創建環境變量
自動新建環境變量可在兩種情況下創建,但是創建方式相同都是用了postman提供的方法:
postman.setEnvironmentVariable("key", "value");
在某個請求發起之前創建:
在Pre-request Script標簽里面添加代碼:
autoENV1.gif
在某個請求發起之后創建:
在Tests標簽里面添加如下
Paste_Image.png
全局變量
全部變量跟環境變量的創建類似,也可以通過手工預先創建或者通過代碼去創建。
通過手工預先創建
全局變量設置.gif
通過代碼創建
2.1 在請求發起前創建
在Pre-request Script標簽里面添加代碼:
postman.setGlobalVariable("key","value");
2.2 在請求發起后創建
在Tests標簽里面添加如下:
postman.setGlobalVariable("key","value");
變量的引用
在需要的地方加上{{變量名}}便可
隨機數
PostMan 除了提供環境變量和全局變量外,還提供了三種隨機數。
{{$guid}}
:添加一個V4風格GUID
{{$timestamp}}
:將當前的時間戳,精確到秒
{{$randomInt}}
:添加0和1000之間的隨機整數
測試
本節摘錄:http://www.lxweimin.com/p/61cfcb436ee4
Postman可以在tests里面,用自帶的腳本對接口進行測試,單擊tests標簽后可以看到右側有個snippets欄,里面就是postman內置的測試腳本,輔助對接口進行測試。
選擇其中的一個腳本,修改其中的參數,再次點擊send,這時response的tests出現了一個1/1,說明執行一個測試并且通過測試,綠色pass說明驗證通過
紅色fail說明測試不通過,一個接口可以寫多個腳本進行多次測試
內置腳本說明:
1.清除一個全局變量? ? Clear a global variable? ? 對應腳本:? ? postman.clearGlobalVariable("variable_key");? ? 參數:需要清除的變量的key2.清除一個環境變量? ? Clear an environment variable? ? 對應腳本:? ? postman.clearEnvironmentVariable("variable_key");? ? 參數:需要清除的環境變量的key3.response包含內容? ? Response body:Contains string? ? 對應腳本:? ? tests["Body matches string"] =responseBody.has("string_you_want_to_search");? ? 參數:預期內容4.將xml格式的response轉換成son格式? ? Response body:Convert XML body to aJSONObject對應腳本:varjsonObject = xml2Json(responseBody);? ? 參數:(默認不需要設置參數,為接口的response)需要轉換的xml5.response等于預期內容? ? Response body:Is equal to a string? ? 對應腳本:? ? tests["Body is correct"] = responseBody ==="response_body_string";? ? 參數:預期response6.json解析key的值進行校驗? ? Response body:JSONvalue check? ? 對應腳本:? ? tests["Args key contains argument passed as url parameter"] ='test'inresponseJSON.args? ? 參數:test替換被測的值,args替換被測的key7.檢查response的header信息是否有被測字段? ? Response headers:Content-Type header check? ? 對應腳本:? ? tests["Content-Type is present"] = postman.getResponseHeader("Content-Type");? ? 參數:預期header8.響應時間判斷? ? Response time is less than200ms? ? 對應腳本:? ? tests["Response time is less than 200ms"] = responseTime <200;? ? 參數:響應時間9.設置全局變量Setan global variable? ? ? 對應腳本:? ? ? postman.setGlobalVariable("variable_key","variable_value");? ? ? 參數:全局變量的鍵值10.設置環境變量Setan environment variable? ? ? 對應腳本:? ? ? postman.setEnvironmentVariable("variable_key","variable_value");? ? ? 參數:環境變量的鍵值11.判斷狀態碼? ? ? Status code:Code is200對應腳本:? ? ? tests["Status code is 200"] = responseCode.code !=400;? ? ? 參數:狀態碼12.檢查code name 是否包含內容? ? ? Status code:Code name has string? ? ? 對應腳本:? ? ? tests["Status code name has string"] = responseCode.name.has("Created");? ? ? 參數:預期code name包含字符串13.成功的post請求? ? ? Status code:Successful POST request? ? ? 對應腳本:? ? ? tests["Successful POST request"] = responseCode.code ===201|| responseCode.code ===202;14.微小驗證器? ? ? Use Tiny ValidatorforJSONdata? ? ? ? ? ? ? ? ? 對應腳本: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);? ? ? ? 參數:可以修改items里面的鍵值對來對應驗證json的參數
使用Runner功能和外部數據
Postman 工具自帶了Runner功能,用于批量運行腳本。在運行時還可以使用外部的CSV或者json文件來指定數據。
例如現在新建了如下兩個外部數據,第一個保存為.json文件,第二個保存為.csv文件。
json.png
csv.png
新建如下GET請求API,并放于單獨一個文件夾中管理。接口請求中{{host}}便是用來獲取上步新建的兩個文件夾中的數據,{{}}中的名字對應json文件的key值,對應csv文件中的第一行值。
Paste_Image.png
點擊Runner按鈕,打開Runner界面:
Paste_Image.png
在新打開的窗口中,選著你要剛新建的文件夾名,選擇你要運行的環境,運行的次數和在Data File中選擇剛新建的外部json或者csv文件,并選取文件類型,點擊Start Test,變開始逐條讀取外部文件中的數據,進行運行。
Paste_Image.png
Postman Interceptor
Interceptor 可以直接從瀏覽器中獲取請求,并保存在Postman的History中。 這個插件可以大大縮短API配置的時間,同樣Interceptor還有一個功能可以讓Postman和Chrome瀏覽器共用Chrome的Cookies。
安裝 Interceptor
Interceptor 同樣是Chrome的一個插件,所以也可以從Chrome網上商店找到該插件:https://chrome.google.com/webstore/detail/postman-interceptor/aicmkgpgakddgnaphhhpliifpcfhicfo/support?hl=cn,直接點擊安裝。安裝完后會在Chrome 插件中找到下圖標識。
Paste_Image.png
使用 Interceptor
開啟Interceptor插件,并設置你要抓取的網站請求
Paste_Image.png
在Postman 上同樣打開Interceptor
Paste_Image.png
這時在Chrome瀏覽器上訪問一些baidu相關域名就會自動被Postman抓取,并在Postman的History顯示
Paste_Image.png
Newman
官方幫助文檔地址:https://www.npmjs.com/package/newman
Newman 安裝
嗯,它需要安裝,因為它不是音樂播放器!Newman是為Postman而生,專門用來運行Postman編寫好的腳本。Newman安裝步驟:
需要安裝nodejs,并配置好環境
打開控制臺,運行:npm install -g newman
Paste_Image.png
校驗是否安裝成功,運行:newman --version
Paste_Image.png
Newman 執行腳本
Newman在3版本后做了比較大的改動,但是運行命令越來越簡單如下:
newman run[options]
run 后面跟上要執行的json文件或者URL(json 和 URL 都由postman導出生成),再后面跟一些參數,例如環境變量,測試報告,接口請求超時時間等等。最后給兩個完整的例子做參考:
例子1,通過newman 運行postman導出的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,運行https://www.getpostman.com/collections/cb0cea0af1467c8008fb(postman生成的 )中的所有api,并使用env.json作為環境變量和globals.json作為全局變量,并使用外部data.csv作為外部數據,最后設置了接口請求超時時間為5S 。
newman run https://www.getpostman.com/collections/cb0cea0af1467c8008fb --environment env.json --iteration-data data.csv --globals globals.json --timeout-request 5000
Jenkins 結合
平時做接口自動化,避免不了最后通過Jenkins做構建。既然Newman提供了控制臺命令執行方式,那么像通過Jenkins來構建也就容易多了。
步驟一:在Jenkins 機器上安裝Newman
步驟二:搭建Jenkins環境,并新建個自由風格的Job
步驟三:構建選擇Execute Windows batch command,并輸入newman 運行命令
Paste_Image.png
步驟四:因為上面命令中構建會生成junit的xml報告,所以可以在構建后用Publish JUnit test result report 插件來生成測試報告。
Paste_Image.png
8/31/2018 更新
最近發現Postman在chrome商店中下架了,原因猜測就是因為chrome有計劃取消chrome應用引起,現在postman 只能安裝桌面版。 那么桌面版的捕獲方式有所變更,今天順便簡單說下桌面版如何捕獲瀏覽器請求。
點擊proxy,打開Proxy設置,并設置代理端口和抓取的保存位置,截圖設置了5555端口,并保存到History.
image.png
設置IE或者系統代理,以win 10系統為例子,打開IE 設置代理。 (不用時記得關閉IE或者系統代理)windows上設置代理可以參考:https://www.howtogeek.com/tips/how-to-set-your-proxy-settings-in-windows-8.1/
image.png
image.png
打開瀏覽器,正常請求,會發現這時postman 的history也會捕獲到請求。