背景介紹
相信大部分開發人員和測試人員對 postman 都十分熟悉,對於開發人員和測試人員而言,使用 postman 來編寫和儲存測試用例會是一種比較方便和熟悉的方式。但 postman 本身是一個圖形化軟體,相對較難或較麻煩(如使用 RPA)實現自動化測試。幸運的是,postman 還提供了一個命令列工具 newman,我們可以藉助 postman + newman 來實現 API 自動化測試。
名詞解析
1. Collection
Collection 是一組儲存的請求,postman 中傳送的每個請求都會顯示在側欄的 ”歷史記錄“ 選項卡下。請求數量比較少的時候,通過歷史記錄來重用請求會比較方便。隨著請求量的增長,在歷史記錄中查詢特定請求可能會非常耗時。此時,你可以將所有請求儲存為一個 collection,以便於訪問。
2. Environment
Environment 是一組可以在 postman 請求中使用的變數。你可以根據不同的環境(如 dev、test、prod 等),把一組相關的變數放到不同的 environment 檔案中,來對不同的環境進行 API 自動化測試。
使用說明
我們以測試百度的 https://www.baidu.com/sugrec 這個 API 作為示例。
1. 建立 Collection
新建 collection:
新建請求:
測試請求,狀態碼返回 200:
編寫測試斷言並驗證斷言:
pm.test("Return 200", function() { pm.response.to.have.status(200) })
2. 建立 Environment
新建 environment:
填寫引數資訊,這裡簡單使用 host 作為引數:
在 collection 的請求中使用 host 引數,並進行測試:
3. 匯出 Collection 和 Environment
匯出 collection 為 collection.json:
匯出 environment 為 environment.json:
3. 執行 API 測試
我們只需要基於匯出的 collection.json 和 environment.json 執行一條 docker 指令即可完成 API 測試:
docker run --rm -i -v /root/postman:/etc/newman \ --entrypoint sh postman/newman:alpine -c \ 'npm i -g newman-reporter-html; \ newman run collection.json \ --suppress-exit-code 1 \ --color off \ --reporters cli,html\ --reporter-html-export api_report.html \ --environment=environment.json'
指令解析:
專案 | 說明 |
docker run | 啟動 docker 容器 |
--rm | 退出容器時銷燬容器 |
-i | 互動模式 |
-v /root/postman:/etc/newman | 目錄掛載 |
--entrypoint sh postman/newman:alpine -c | 容器執行指令 |
npm i -g newman-reporter-html | 安裝 html 報告外掛 |
newman run collection.json | 指定測試 collection.json |
--suppress-exit-code 1 | 指定錯誤狀態碼為 1 |
--color off | 關閉顏色 |
--reporters cli,html | 輸出命令列和 html 報告 |
--reporter-html-export api_report.html | 設定輸出 html 檔名 |
--environment=environment.json | 指定 environment.json 檔案 |
執行結果:
檢視 html 報告:
4. 整合 CI 實現 API 自動化測試
你只需要針對你的程式碼專案準備好 collection.json 和 environment.json,把它們存放到程式碼中的某個目錄,然後在 jenkins 或 gitlab-ci 中新增執行上面介紹的 docker 指令即可。