(一)前言:php
以前搞自動化接口測試,因爲接口的特性,要驗證接口返回xml中的數據,因此沒找到合適的輪子,就本身用requests造了個輪子,用着也還行,不過就是case管理有些麻煩,近幾天又回頭看了看postman也能夠玩的很溜,因此和大夥分享下,可是postman也有本身的弱點,仍是須要根據本身項目的特色來選擇適合的工具。廢話少說,開始...html
(二)安裝和介紹web
一、首先安裝chrome,而後在chrome的商店裏搜postman,https://chrome.google.com/webstore/search/postman?t=http://webstore.google.com ,而後有位同窗對整個界面作了介紹, 轉一下:http://bayescafe.com/tools/use-postman-to-test-api-automatically.htmlchrome
Collections:在Postman中,Collection相似文件夾,能夠把同一個項目的請求放在一個Collection裏方便管理和分享,Collection裏面也能夠再建文件夾。若是作API文檔的話,能夠每一個API對應一條請求,若是要把各類輸入都測到的話,就須要每條測試一條請求了。這裏我新建了一個example用於介紹整個流程,五個API對應五條請求。這個Collection能夠經過https://www.getpostman.com/collections/96b64a7c604072e1e4ee
導入你本身的Postman中。django
上面的黑字註冊是請求的名字,若是有Request description的話會顯示在這下面。下面的藍字是保存起來的請求結果,點擊能夠載入某次請求的參數和返回值。我會用這個功能給作客戶端的同事展現不一樣狀況下的各類返回值。保存請求的按鈕在15.json
選擇HTTP Method的地方,各類常見的不常見的很是全。windows
請求URL,兩層大括號表示這是一個環境變量,能夠在16的位置選擇當前的environment,環境變量就會被替換成該environment裏variable的值。api
點擊能夠設置URL參數的key和valuebash
點擊發送請求app
點擊保存請求到Collection,若是要另存爲的話,能夠點擊右邊的下箭頭
設置鑑權參數,能夠用OAuth之類的
自定義HTTP Header,有些由於Chrome緣由不能自定義的須要另外裝一個插件Interceptor,在16上面一行的衛星那裏
設置Request body,13那裏顯示的就是body的內容
在發起請求以前執行的腳本,例如request body裏的那兩個random變量,就是每次請求以前臨時生成的。
在收到response以後執行的測試,測試的結果會顯示在17的位置
有四種形式能夠選擇,form-data主要用於上傳文件。x-www-form-urlencoded是表單經常使用的格式。raw能夠用來上傳JSON數據
返回數據的格式,Pretty能夠看到格式化後的JSON,Raw就是未經處理的數據,Preview能夠預覽HTML頁面
點擊這裏把請求保存到2的位置
設置environment variables和global variables,點擊右邊的x能夠快速查看當前的變量。
測試執行的結果,一共幾個測試,經過幾個。
這個界面就是免費版的主要內容,和其餘API測試工具相比,已經足夠好用。若是要使用自動化測試,須要購買9.99美金的Jetpacks,暫時不想購買的話能夠試一下Team版Postman。如今是能夠免費試用的,不但擁有Jetpacks的功能,還能與其餘帳戶同步Collection。
(三)實例
這裏就以個人一個模塊的返回驗證來作例子了,兩個模塊間是http請求,返回的是xml數據,要驗證,返回數據的個數,傳遞的參數
再看驗證點Tests:這裏的幾種snippets很好用,並且這裏使用的是js,因此會點js就能夠本身寫邏輯啦
點擊send以後,能夠看到返回的數據
tests的結果:
我要驗證的是headinfo裏的status=0和returnNum>0,下面是test的結果,說明測試經過,這時再回頭看Tests中的內容就會發現,tests['status'] = s.$.status==='0'中tests['status'] 被賦成s.$.status==='0',若s.$.status==='0'爲true,則case經過,不然fail,就是這麼簡單,其實主要的關鍵就是要找到你的驗證點,若是隻驗證返回code,直接用右側的snipplets中的就能夠,tests["Status code is 200"] = responseCode.code === 200; snipplets就本身用蹩腳的英語理解下吧,responsebody包含字符串、xml轉json、responsebody是一個字符串、json變量校驗、response header 校驗、返回時間、status code、還有tiny validator,其實在Tests裏是支持js的,因此想怎麼寫就怎麼寫,前提是得會點js。
在使用js的時候,須要調試變量,或者說怎麼知道我要驗證的變量取值是什麼呢?想到了windows.alert(),但是什麼也沒出,而後就是console.log(),發現沒有地方能出console,而後google了下,發現chrome是支持的,就是使google develop tools 支持postman :
http://blog.getpostman.com/2014/01/27/enabling-chrome-developer-tools-inside-postman/
(1)chrome://flags/ ,啓用下面這個
(2) 而後重啓chrome和postman,F12打開chrome develop tools ,再點send,就能夠log出咱們要的東西了
有了上面這些方法,再複雜的接口測試咱們都能搞定,而後就是把設計好的case都放在一個collection中,就是相似於testsuite,而後點擊左上角的Runner來執行collection
附錄:這位同窗的例子很好的展現了經過設置環境變量來處理這類請求有前後關係的case,很好的例子,轉過來啦
http://bayescafe.com/tools/use-postman-to-test-api-automatically.html
生成一個隨機字符串做爲用戶名和暱稱
postman.setEnvironmentVariable("random_username", ("0000" + (Math.random()*Math.pow(36,4) << 0).toString(36)).slice(-4));
發起請求
POST /index.php/users HTTP/1.1 Host: postmanexample.sinaapp.com Cache-Control: no-cache Postman-Token: 76791813-aac2-71fb-cad4-3e737f37c4d0 Content-Type: application/x-www-form-urlencoded username=2mjk&password=123456&nickname=2mjk
運行測試、檢查結果
tests["Status code is 201"] = responseCode.code === 201;
直接用剛纔生成的環境變量發起請求
POST /index.php/authentication HTTP/1.1 Host: postmanexample.sinaapp.com Cache-Control: no-cache Postman-Token: aac7d0ac-e0e3-ecf2-39da-b8dca672e3d7 Content-Type: application/x-www-form-urlencoded username=2mjk&password=123456
運行測試、檢查結果,並將返回的token記錄下來
tests["Status code is 200"] = responseCode.code === 200; var data = JSON.parse(responseBody); postman.setEnvironmentVariable("token", data.token);
先生成一個卡號和卡名
postman.setEnvironmentVariable("random_cardno", Math.round(Math.random()*9999999)); postman.setEnvironmentVariable("random_cardname", ("0000" + (Math.random()*Math.pow(36,4) << 0).toString(36)).slice(-4));
而後發起請求,這裏調用了剛纔獲取到的Token,放在header的自定義字段裏做爲鑑權(SAE不能用Authorization這個字段,不清楚緣由)
POST /index.php/cards HTTP/1.1 Host: postmanexample.sinaapp.com X-Authorization: d4c4a0b7b36c73e7a13b7e24a596093b Cache-Control: no-cache Postman-Token: d44d573f-f17a-366c-2cd7-1d5b8b709233 Content-Type: application/x-www-form-urlencoded cardno=1385526&desc=2mo8
運行測試
tests["Status code is 200"] = responseCode.code === 200;
發起請求,調用了剛纔生成的卡號
GET /index.php/cards/1385526 HTTP/1.1 Host: postmanexample.sinaapp.com Cache-Control: no-cache Postman-Token: 1e5aca57-c3bb-7404-2791-c639cd60b5c8
運行驗證,和剛纔生成的卡名對比,並記錄新卡的ID
var data = JSON.parse(responseBody); tests["check cardname"] = data.desc === environment.random_cardname; postman.setEnvironmentVariable("new_card_id", data.id);
發起請求,使用了剛纔得到的新卡ID
POST /index.php/deposit HTTP/1.1 Host: postmanexample.sinaapp.com X-Authorization: d4c4a0b7b36c73e7a13b7e24a596093b Cache-Control: no-cache Postman-Token: 388c95e0-b5ce-9bbf-5816-084db7523384 Content-Type: application/x-www-form-urlencoded cardid=1&amount=10
運行驗證(因爲是新建的用戶,沒有餘額,沒法給卡片充值,故返回403 Forbidden)
tests["Status code is 403"] = responseCode.code === 403;