相信提到接口測試,大家都知道而且用過Postman,也認為這是一個非常容易上手的接口測試工具,實際上Postman功能非常強大,還有很多部分非常有意思而且實用的功能,我先拋磚引玉,關鍵是大家一起來探索和一起來分享。比如Postman能不能進行自動化接口測試,其實是可以的,而且在如今大家不斷提到TDD和如何打造pipeline上,這方面的需求越來越強烈。
舉個簡單的真實場景,開發提供了300多個API,每個API都有各種參數,所以我們會先在postman中為這300多個API編寫300*n個testcase,如果我們都用postman跑,其實效率并不高,作為工程師圖形化不如命令好使,因此一定要用newman,既然可以命令行你過來執行為啥不能CI?
- 試想,當開發一直在不停的維護這300多個接口時,難道需要開發每次都告訴我們測試人員該進行測試了嗎?只要通過Jenkins來自動執行這些接口測試,基本上CI就完成了很多。
- 如果能夠監控到哪些接口發生變動,自動選擇相關的collections,也就是test suits,就是朝更牛掰的路上又前進了一步。
- Jenkins還可以自動發email給開發和你,另外也可以自動提交bug,如果這樣的話你就更舒服了,看郵件就可以了。
Postman部分
這個太簡單了,就略過去,百度搜一下,下載安裝一個native的即可,因為作為Chrome插件已經不支持了。我們直接進入正題。
Collection或者說測試集的建立
在Postman中,Collection類似文件夾,可以把同一個項目的請求放在一個Collection里方便管理和分享,Collection里面也可以再建文件夾。如果做API文檔的話,可以每個API對應一條請求,如果要把各種輸入都測到的話,就需要每條測試一條請求了。
在Postman里面可以將Collection導出存為json文件,有了這個文件,就可以通過Postman CLI完成命令行執行,實現自動化測試。
- 導入:用于導入你或團隊保存的API請求文件,json格式。
- 新建文件夾:用于API請求劃分類別,便于管理。
- 保存請求:保存你的API請求,返回值也能存儲下來。
- 下載:下載你測試通過的API請求,團隊共享,導入。json格式,可手動編輯的
Postman允許用戶發送任何類型的 HTTP 請求,例如 GET,POST,HEAD,PUT、DELETE等,并且可以允許任意的參數和 Headers。
她支持不同的認證機制,包括 Basic Auth,Digest Auth,OAuth 1.0,OAuth 2.0等。
她還可以響應數據是自動按照語法格式高亮的,包括 HTML,JSON和XML。
關于OAuth2.0,可以看一下這哥們的文章 阮一峰的[理解OAuth 2.0](http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html)。如果你比較強,建議直接看 [RFC 6749](http://www.rfcreader.com/#rfc6749),好比直接看原著,也許更適合你 。
- 可以通過"Capture API request with Postman"來錄制測試用例,這個方法也不錯,大家可以試一下。
Postman使用詳解
- 請求 request
postman界面分為兩部分:左邊的sidebar 右邊的request builder:快速創建幾乎所有的HTTP請求:URL,請求的method,headers,body。
- 響應 responses
保證API響應的正確性,就是你需要做的大部分工作。postman的response viewer部分會協助你完成該工作且使其變得簡單。
一個API的響應包含body,headers,響應狀態碼。postman將body和headers放在不同的tabs中。響應碼和響應時間顯示在tabs的旁邊。將鼠標懸停在響應碼上面可以查看更詳細的信息。
- 寫斷言測試
Postman的Tests標簽可以用來寫斷言測試,提供了大量的API,非常方便實用。
- 運行Collections
postman允許你運行collection,其實就是我們在測試領域所說的test suit,可以配置運行任意的次數。 最后會給出一個整體運行的結果。會保存每一次運行的結果,提供給你比較每一次運行解雇的不同。
選擇collection,選擇環境。點擊運行按鈕。
測試工具
測試工具主要包括三部分,在發起請求之前運行的Pre-request,在收到應答之后運行的Test,和一次運行所有請求的Collection Runner
- Pre-request
Pre-request和Test用的語言都是JavaScript,Postman在一個沙盒里執行代碼,提供給用戶的庫和函數可以在 這里 查看。而 常用的功能都可以通過右邊的Code Snippets實現,點擊就可以插入到代碼區域
可以看到Pre-request里常用的功能就兩種,設置環境變量和設置全局變量。這條請求的pre-request就是在注冊之前生成一個字符串作為隨機用戶名。
`postman.setEnvironmentVariable("random_username", ("0000" + (Math.random()*Math.pow(36,4) << 0).toString(36)).slice(-4)); `
其他用法還包括在發起請求之前獲取當前的時間戳放在參數里:
postman.setEnvironmentVariable("unixtime_now", Math.round(new Date().getTime()/1000));
當然也可以用來生成校驗串。總之,在發請求之前需要手動修改的東西,都可以考慮用腳本自動實現。
- Test
和Pre-request相比,Test的Snippets就豐富多了,例如檢查狀態碼、檢查響應串、驗證JSON、檢查header、限制應答時間。
如果需要將服務器響應的數據保存下來,用在后面的請求里,也需要在這一步做。
在圖中的Test里,我首先檢查了狀態碼為200,然后解析返回的JSON,把環境變量里的token設為JSON里的token。
- Collection Runner
當編寫了很多測試之后,就可以使用Collection Runner來自動運行整個Collection了,入口就在主界面最上面一行的 Runner 選好Collection、Environment,如果有需要還可以載入JSON和CSV作為數據源。點擊 Start Test Run ,就可以看到結果了。
### 可以建立一個mock server,這部分其實也很重要,無論對前端開發還是后端測試,比較不同服務器之間接口很多,大家開發進度不一,另外可以做到環境隔離。
當然還有還多mock 框架,我這里推薦大家一個很方便的mock框架就是moco,已經在[github上開源了](https://github.com/dreamhead/moco)。
還有一個[mock server](http://www.mock-server.com/)稍微復雜些,但是也很好使。
Newman的安裝和使用
通過npm安裝
如果要全局安裝:
`npm install -g newman `
newman的使用
在npm的網站可以找到[newman的專頁](https://www.npmjs.com/package/newman),非常詳細的說明.
- 支持本地json文件作為參數來運行
json文件可以從Postman導出,選定某個collection,你可以輕易的導出你的Postman Collection另外存儲為一個json文件,然后放到你本地目錄進行運行。
` $ newman run examples/sample-collection.json `
- 也支持通過url作為參數來運行
如果已經有CI平臺,可以把這些Collection放到某個服務器上,newman cli也支持通過url來運行。
` $ newman run https:or http: your json url `
- 還有一種就是把newman作為Node.js的一個module來調用,這樣更適合大型項目,請參見官方示例代碼。
` const newman = require('newman'); // require newman in your project
// call newman.run to pass `options` object and wait for callback
newman.run({
? ? collection: require('./sample-collection.json'),
? ? reporters: 'cli'
}, function (err) {
? ? if (err) { throw err; }
? ? console.log('collection run complete!');
});
`
- 如果還需要更過命令或者幫助,可以通過下面命令獲得。
` $newman -h, --help
$newman run -h
`
### 對SSL的支持 newman第三版以后(目前已經是4.3.1)可以支持通過CLI選項來支持SSL
--ssl-client-cert path_to_public_cert_file
--ssl-client-key path_to_private_client_key
--ssl-client-passphrase the_secret_passphrase
### 對newman配置代理:通過對Postman的request環境變量進行設置來完成代理的配置。
HTTP_PROXY / http_proxy
HTTPS_PROXY / https_proxy
NO_PROXY / no_proxy
如何完成postman的request設置,請參見[postman-request github的工程readme](https://github.com/postmanlabs/postman-request)
用newman的reporter功能
newman集成和支持下面幾種報告方式: cli, json, junit, progress and emojitrain.
CLI是默認選項支持的,其他選項需要你顯示在后面寫上,比如:
` $ newman run examples/sample-collection.json -r cli,json
`
Jenkins部分
Jenkins的安裝和配置可以查詢相關文檔,如果沒有配置master-slave多級架構,很好搭建,此處略過。
完成Jenkins搭建后,開始創建job來執行newman命令,確保你的newman命令在Jenkins服務器上是可執行的,比如將路徑放到PATH里面,先執行一下
` newman -v `
- 選擇一個自由風格的job
- 可以選擇定期執行,這部分可以網上搜一下如何定期執行一個job,一般來說就是5行數據,根據你的需要。比如我要每10分鐘執行一下,就這么寫“H/10 * * * *“。
這部分也可以通過監控代碼提交來trigger,我只是舉個例子。
- 在執行shell的部分添加你的shell 命令,其實也就是你newman命令
這里需要主線的是,你的json文件是放在那里,前面已經說過可以放到內部服務器,給個url,newman也是支持的,也可以放到Jenkins的服務器上。
- 其他郵件配置或者如何自動提交bug,也比較normal,請自行突破,相信只有自己突破了才有更大的收獲感。
不足之處:
API接口不能太多,不要超過300個,太多通過這個方式還是很麻煩,至少維護json文件比較累。
不能支持并發操作,只能用于功能測試和壓測。
總之這個自動化接口測試架構,而且帶有CI的框架還是比較適合以API接口為主的測試,非常容易上手和熟悉,也非常容易維護,希望能真的幫助你。
最好,感謝你讀完此文章,為了節省時間我這里沒有提供大量的截圖,實在抱歉,如果確實需要我回頭再補上,也希望大家有任何反饋意見直接回復,2019年我們一起進步!!!