天天看點

Postman+Newman+Git+Jenkins+Slack 接口自動化和監控

2017.10.21 始發于TesterHome精華帖 Postman+Newman+Git+Jenkins+Slack 接口自動化和監控

打算寫這個文章很久了,終于下定決心動一下懶得不能再懶的一雙手。。。

之前有寫過一個Postman 使用小結 ,主要是針對Postman 用戶端的使用總結。

後續跟進接口自動化,之前用Postman梳理的很多接口又不舍得丢棄,于是又深挖了下?。

如何第一時間發現接口異常,并快速定位哪裡出了問題,哪個接口or服務?想到接口自動化和Slack,是以就有了以下内容

一、Newman介紹:

1、簡介

Newman是指令行工具,Postman是GUI的用戶端,Newman可執行Postman導出的.json腳本檔案。

Newman 運作需要先安裝NodeJS環境(>=v4.)。

NodeJS下載下傳:https://nodejs.org/en/download/package-manager.

因NodeJS可以跨平台支援,是以Postman & Newman也可以同時支援Windows/Mac/Linux等多個系統。

2、安裝

通過NPM安裝,是以上面安裝nodejs最好也通過NPM安裝

$ npm install newman --global;

3、檢查

$ newman -v

列印出目前Newman版本号即安裝成功。

PS:Newman一定要用最新或3.8.0及以上版本,因之前版本存在一些bug,會導緻運作Postman腳本時報錯。

4、運作

運作一個Postman導出的.json檔案

Postman+Newman+Git+Jenkins+Slack 接口自動化和監控

二、Newman指令行介紹:

newman run <collection-file-source> [options]
  • -e <source>, --environment <source>

    • 指定環境變量的路徑。環境變量定義和管理詳見:官方詳解
  • -g <source>, --globals <source>

    • 指定全局變量的路徑。
  • -d <source>, --iteration-data <source>

    • 指定資料(csv)檔案路徑。資料檔案說明:官方詳解
  • -n <number>, --iteration-count <number>

    • 指定目前腳本運作次數。
  • --export-environment <path>

    • 執行結束前,導出本次執行後的環境變量到指定路徑。
  • --export-globals <path>

    • 執行結束前,導出本次執行後的全局變量到指定路徑。
  • --export-collection <path>

    • 執行結束前,導出本次執行後的全部腳本到指定路徑。
  • --timeout-request <ms>

    • 指定請求逾時時間,機關是毫秒ms。
測試結果配置
  • -r <reporter-name>, --reporters <reporter-name>

    • 指定測試報告的導出格式
    • 目前支援四種格式:

      cli

      ,

      json

      ,

      html

      ,

      junit

  • --reporter-{{reporter-name}}-{{reporter-option}}

    • 支援同時導出多種測試報告格式
    • JSON

      --reporter-json-export <path>

    • HTML

      --reporter-html-export <path>

    • JUNIT/XML

      --reporter-junit-export <path>

    • 上述幾種測試報告Demo詳見:官方詳解

示例

newman run -e ...... -n 1 -r cli,json,junit --reporter-json-export /home/admin/temp/json_reporter_171211.json --reporter-junit-export /home/admin/temp/xml_reporter_171211.xml
           

注釋

newman執行指定腳本1次,并輸出cli、json和junit三種測試報告,其中json報告儲存至

home/admin/temp/json_reporter_171211.json

,junit報告儲存至

/home/admin/temp/xml_reporter_171211.xml

------------------------------------分 割 線----------------------------------------------------

以上部分摘自Newman Github官網,提了一些下面會用到的地方,還有很多地方沒有提到,更全更詳細詳見官方文檔 Newman Github

終于到重點了

三、Newman實作接口自動化流程

整體架構如下圖:

Postman+Newman+Git+Jenkins+Slack 接口自動化和監控

1、Postman中調試接口,編寫業務邏輯和Tests

目前我們主要做以下四個方面的斷言:

1.1 Http statuscode
1.2 特定資料校驗
// 先轉成json格式,然後判斷
var jsonData = JSON.parse(responseBody);
if(jsonData.hasOwnProperty("a")){
   tests["Parameter a is here"] = true;
}else{
   // response中不包含特定參數,列印url和response
   tests["[ERROR]KEY not in Response, please Check: " + request.url + " " + responseBody] = false;
}
           
1.3 請求逾時判斷
// 請求時長判斷,大于等于limitReqTime 時報錯
// limitReqTime 作為環境變量可動态配置
if(responseTime < parseInt(environment["limitReqTime"])){
   tests["Request Success"] = true;
}else{
   // 逾時,列印url和實際請求時間responseTime,responseTime是工具本身提供
   tests["[INFO]Request success, BUT time is too long: " + request.url + " " + responseTime] = false;
}
           
1.4 錯誤判斷
// 假設Http code 不等于200即表示有錯誤
if(responseCode.code === 200){
    var jsonData = JSON.parse(responseBody);
    tests["Request seccess"] = true;
}else{
    // 非200報錯,列印錯誤資訊,輸出目前請求的錯誤資訊,包括請求時長、請求資料、傳回資料等
    tests["[ERROR]" + request.url + " " + responseCode.code + " " + responseCode.name + " " + responseTime + "ms Request:" + request.data + " Response:" + responseBody] = false;
}
           

PS:以上列印資訊都使用的

tests[...] = true/false

,主要是為後續

Newman

內建Jenkins時,導出

Junit/xml

報告所用。

平時調試也可以使用

console.log(...)

,具體調試資訊可在Postman左上角菜單->View->Show DevTools/Show Postman Console 中檢視。

Tests 中流程如下

Postman+Newman+Git+Jenkins+Slack 接口自動化和監控

2、導出json腳本,上傳到Git;

這一步比較簡單,就是把在Postman中寫好的腳本(Collections)和環境變量(Environment)導出成幾個.json檔案,然後上傳到Git中,此處不贅述。

PS:不同的API接口執行頻率根據業務可能有差別,考慮後面Jenkins 任務執行頻率設定,最好是在導出之前就将Collections的分組設計好,以友善後續執行。

3、Jenkins中建立Git 自動更新任務

3.1 Jenkins 建立一個自由風格的項目
Postman+Newman+Git+Jenkins+Slack 接口自動化和監控
3.2 設定Git位址、證書及分支
Postman+Newman+Git+Jenkins+Slack 接口自動化和監控
3.3 設定Git hook

在建構觸發器中勾選

GitHub hook trigger for GITScm polling

點選儲存即可,此任務建立完畢。

任務目的:當Git分支中有更新時,會觸發此任務建構,将最新的分支腳本clone到目标機器上。

4、Jenkins中建立Newman API任務

4.1 設定定時任務

建構觸發器中選擇

Build periodically

,填寫腳本即可

H/5 * * * *

:每五分鐘執行一次建構

4.2 建構腳本

建構中選擇

Execute shell

,編寫腳本。

以下是我的Newman run的示例腳本

WORKSPACE_PATH="/home/ubuntu/temp"
WORKSPACE_SCRIPTS="/home/ubuntu/temp/scripts"
CURRENT_COUNTRY="/zh_CN"
CURRENT_DAY=`date +%y%m%d`
REPORTER_NAME="reporter_"`date +%y%m%d`_${BUILD_NUMBER}
echo ${WORKSPACE_PATH} ${WORKSPACE_SCRIPTS} ${CURRENT_COUNTRY} ${CURRENT_DAY} ${REPORTER_NAME}

newman run ${WORKSPACE_SCRIPTS}/collection.json \
-e ${WORKSPACE_SCRIPTS}${CURRENT_COUNTRY}/environment.json \
-g ${WORKSPACE_SCRIPTS}/globals.json -n 1 -r json,cli,junit \
--reporter-json-export ${WORKSPACE_PATH}/${CURRENT_DAY}/${REPORTER_NAME}.json \
--export-environment ${WORKSPACE_SCRIPTS}${CURRENT_COUNTRY}/environment.json
           

說明:上面腳本中的

\

作用是使腳本換行顯示,為了友善檢視,否則這麼長的腳本會顯示成一行,注意斜杠後一定不要留白格。

重要說明:解釋下上面腳本中添加

--export-environment <path>

的原因,Newman執行時,本次run使用的變量是

-e <path>

-g <path>

中存儲的資料。如果run中包含多個接口,且互相間存在資料調用,比如a接口傳回參數被b接口當傳參調用,此時就要使用

--export-environment <path>

,将本次run後的結果變量重新導出一份新的,覆寫掉上述

-e <path>

-g <path>

中的

<path>

即可,這樣下次run使用的資料是最新的。否則,每次執行都會調用同一份測試資料。

此問題隻在Newman中存在,在Postman中,因資料是實時寫到變量中的,是以不用擔心上述問題。

5、Jenkins中添加JUnit配置

前置條件:Jenkins已安裝

JUnit Plugin

插件

在建構後操作中選擇

Publish JUnit test result report

Postman+Newman+Git+Jenkins+Slack 接口自動化和監控

PS:Newman導出的檔案會儲存到Jenkins預設工作空間下面的newman檔案夾中, 也可以改成自定義的路徑。

添加此配置時,

newman run

-r

一定要加上

junit

,否則沒有資料 。

6、Jenkins JUnit測試結果展示

列舉下面三圖舉例,其它一些功能請自行檢視

  • 任務頁面會出現如下測試結果趨勢
    Postman+Newman+Git+Jenkins+Slack 接口自動化和監控
  • 所有任務執行情況彙總
    Postman+Newman+Git+Jenkins+Slack 接口自動化和監控
  • 單任務中每個接口結果
    Postman+Newman+Git+Jenkins+Slack 接口自動化和監控

7、Jenkins配置Slack

前置條件:Jenkins已安裝

Slack Notification Plugin

插件

詳見另一篇文章 Jenkins + Slack配置

8、測試結果發送到Slack,移動端檢視,效果圖如下:

Postman+Newman+Git+Jenkins+Slack 接口自動化和監控

上面是在Linux環境上搭建的,如果要在Windows上搞這個,請參考下面這篇文章:

LinkedIn參考文獻:

https://www.linkedin.com/pulse/api-test-automation-ci-using-github-jenkins-slack-talal-ibdah

總結

上面這些内容已經應用較長一段時間了,除了網絡錯誤外,效果也還是不錯。

使用這個Newman原因很簡單,就是快:上手快、普及快、環境部署快、內建快。。。

但也有不足,此處暫不列舉。

文章有點長,感謝大家耐心閱讀完

大家有任何指點可随時在這裡讨論?

歡迎交流

詳細交流口口裙:668526705

威信嗖:Postman&Newman

繼續閱讀