介面測試工具 Postman 使用實踐

NO IMAGE

?wx_fmt=gif&wxfrom=5&wx_lazy=1

本文來自作者 Storm 在 GitChat 上分享 「介面測試工具 Postman 使用實踐」,「閱讀原文」檢視交流實錄。

「文末高能」

編輯 | 哈比

本文主要內容包括:

  • 介面的定義

  • 介面的分類

  • 為何要進行介面測試

  • 介面文件示例

  • Postman 工具簡介

  • 藉助 Postman 完成 HTTP 請求介面測試

  • Postman Newman Jenkins 實現介面自動化測試

一、介面定義

軟體不同部分之間的互動介面。通常就是所謂的 API――應用程式程式設計介面,其表現的形式是原始碼。    ——  [ 百度百科 ]

我們常說的介面一般指兩種:

  1. API:應用程式程式設計介面。程式間的介面

  2. GUI:圖形使用者介面。人與程式的介面

這裡我們所說的介面特指 API 介面。API 介面定義:對協議進行定義的引用型別。

好多公司開發人員分前後端,他們之間如何配合工作的,就是其中一方定義介面,另一方來呼叫介面,以實現預期功能。

二、介面的分類

1. 介面分類

  • HTTP 介面

  • Webservice 介面

  • RESTful 介面

WebService 介面是走 soap 協議,請求報文和返回報文都是 xml 格式,通過 SoapUI 工具進行測試;

HTTP API 介面走 HTTP 協議,通過路徑來區分呼叫的方法,請求報文入參有多種形式,返回報文一般為 json 串,最常見的是 get 和 post 方法。

?wx_fmt=png

三、為何要進行介面測試

1. 介面測試必要性

當今的系統複雜度不斷上升,傳統的測試方法成本急劇增加且測試效率大幅下降,所以就要做介面測試。

同時,介面測試相對容易實現自動化持續整合,且相對 UI 自動化也比較穩定,可以減少人工迴歸測試人力成本與時間,縮短測試周期,支援後端快速發版需求。

介面持續整合是為什麼能低成本高收益的根源。現在很多系統前後端架構是分離的,從安全層面來說,只依賴前端進行限制已經完全不能滿足系統的安全要求(繞過前面實在太容易), 需要後端同樣進行控制,在這種情況下就需要從介面層面進行驗證。

前後端傳輸、日誌列印等資訊是否加密傳輸也是需要驗證的,特別是涉及到使用者的隱私資訊,如身份證,銀行卡等。

2. 介面測試原理

模擬客戶端向伺服器傳送請求報文,伺服器接收請求報文後對相應的報文做處理並向客戶端返回應答,客戶端再接收應答的一個過程。

3. 介面測試範圍

介面的功能、效能、安全性。重點關注資料的交換,傳遞和控制管理過程,還包括處理的次數。

介面測試物件是介面,但隨著系統複雜度越來越高,介面越來越多,完全覆蓋是一件很困難的事情。

通常情況下主要測試最外層的兩類介面:資料進入系統的介面(呼叫外部系統的引數為本系統使用)、資料流出系統介面(驗證系統處理後的資料是否正常)

四、介面文件示例

1. 介面文件應該包括哪幾部分?

  • 介面說明

  • 呼叫的 url

  • 請求方法(get、post)

  • 請求引數,引數型別、請求引數說明

  • 返回引數說明

  • 返回示例

2. 示例

?wx_fmt=png?wx_fmt=png

注:上圖介面文件工具為 ShowDoc

五、Postman 工具簡介

?wx_fmt=png

1. Sidebar 側邊欄

Postman 側邊欄允許你查詢、管理請求和集合。側邊欄分為兩個主要的選項卡,包括歷史和集合選項卡。可以拖動右邊的邊來調整側邊欄的寬度。側邊欄也可以隱藏到小螢幕(標題欄 view—>toggle side bar)。

(1)歷史選項卡

通過 Postman 應用程式傳送的每個請求都儲存在側邊欄的 History 選項卡中。

(2)集合選項卡

在側欄中建立和管理集合選項卡的集合。

2. Header toolbar

?wx_fmt=png

Postman 的頂部工具欄包含以下選項:

  1. 新建按鈕——可以新建請求,集合,環境等

  2. 執行按鈕-開啟集合執行頁面

  3. 匯入按鈕——匯入 Postman 檔案、資料夾、form link 等

  4. 新視窗圖示-開啟一個新的 tab 頁、新的視窗、新的 runner 等

  5. 構建器和團隊庫選項卡——在請求生成器和 Team Library 檢視之間切換

  6. 抓取 API 請求圖示——使用 postman 抓取 API 請求

  7. 同步狀態圖示——同步 API 請求圖示

  8. 使用者下拉——管理集合連結和你的個人資料或登入 / 登出,你的 Postman 帳戶

  9. 開放 API 集合(點選開啟一個網址)

  10. 通知圖示-接收通知或廣播

  11. 設定圖示——管理 Postman 應用程式設定,並找到其他支援資源

  12. ❤——分享按鈕

3. Builder

Postman 通過選項卡布局,用於在構建器中傳送和管理 API 請求。上半部分是請求構建器,下半部分是響應檢視器。

  1. Cookies——管理 cookie 模式是通過點選 cookie 連結訪問的。該特性允許你管理與請求相關的 cookie。

  2. Code——生成的程式碼片段模式通過儲存按鈕下面的最右邊的 Code 連結。該特性允許你生成與請求相關的程式碼片段,該請求支援 20 多種語言(http、java、go 等語言)

?wx_fmt=png

4. Console

Postman 有兩個控制檯,可以幫助我們瞭解系統後臺到底發生了什麼。

  1. Postman Console——包含 HTTP 請求和響應的執行日誌。來自指令碼的日誌訊息 (如在 console. Log 中)。這個功能只能在 Postman 的本地應用中使用。

  2. DevTools Console——可以在開發期間記錄診斷資訊。

六、藉助 Postman 完成 HTTP 請求介面測試

1. 藉助 Postman Echo 演示下各種請求的構建方法

(1)Get 請求

https://postman-echo.com/get?foo1=bar1&foo2=bar2

HTTP GET 請求方法是從伺服器檢索資料。資料由惟一 URI(統一資源識別符號) 標識。GET 請求可以使用 “查詢字串引數” 將引數傳遞給伺服器。例如,在下列請求中,http://example.com/hi/there?hand=wave,引數 “hand” 的值等於 “wave”。

?wx_fmt=png

(2)POST:URI 傳參

?wx_fmt=png

(3)POST:Form-data 傳參

?wx_fmt=png

(4)POST:x-www-form-urlencoded 傳參

?wx_fmt=png

(5)POST:raw 傳參

?wx_fmt=png

(6)POST:binary 傳參

?wx_fmt=png

(7)Authentication Method——許可權認證方法

  • GET Basic Auth

    ?wx_fmt=png

  • 增加 auth 資訊:

    ?wx_fmt=png

  • DigestAuth

  • Hawk Auth

  • OAuth1.0(verify signature)

(8)Headers——新增 header

?wx_fmt=png

2. 接下來,我們拿個開放 API 來演示下單一介面測試流程

示例 API:https://developers.douban.com/wiki/?title=book_v2#get_book

?wx_fmt=png

步驟一:使用 Postman 工具傳送該 Get 請求,如下圖。

?wx_fmt=png

步驟二:新增測試。

?wx_fmt=png

上圖針對該 API 新增了 3 個測試:

  1. 要求響應時間小於 200ms

  2. 要求 status code 等於 200

  3. 要求 Response body 中包含字串 “金庸”

注:當然你還可以增加更多的測試點。

七、Postman Newman Jenkins 實現介面自動化測試

1. 準備工作(具體步驟參考附件文件-作者提供)

(1)安裝 Newman 工具

  • 安裝 Node.js

  • 安裝 Newman

  • 檢視 Newman 命令

(2)部署 Jenkins

2. 將介面儲存到集合

點選 Save 按鈕,將介面儲存到一個集合(可以儲存到一個現有集合中或者新建一個集合),如下圖:

?wx_fmt=png

3. 將集合儲存到本地

將集合儲存到本地,檔案為 .json 格式,如下圖:

?wx_fmt=png

4. 命令列通過 Newman 執行集合

(1)開啟命令列視窗,執行如下命令:

D:\git-local>newman run MyCollection1.postman_collection.json -g globals.postman_globals1.json

(2)執行結果如下:

?wx_fmt=png

可以看到,其中兩條斷言 passed,一條斷言 failed,失敗的原因是,我們期望介面響應時間小於 200 ms,但是本次介面請求響應時間是 270 ms。

5. 通過 Jenkins 呼叫 Newman,執行介面測試

?wx_fmt=png

執行一次構建,構建失敗(上面的斷言失敗,我們並未修復),檢視構建失敗原因。

?wx_fmt=png

6. 假設開發修復了介面 bug

介面響應時間減少了,我們需要回歸測試。(我們將斷言響應小於 200 ms,修改成 1000 ms,讓斷言 passed)

?wx_fmt=png

7. 演示一個如何呼叫 data file 引數化用例

我這裡有一個集合,3 個介面,第一個介面為登入介面,第二個介面為獲取登入使用者資訊介面,第三個介面為修改密碼介面。登入介面如下:

?wx_fmt=png

測試指令碼如下:

?wx_fmt=png

引數化 json 檔案內容如下:

[{
 “loginName”: “duzl”,  “password”: “admin123”,  “verifyCode”: “adf”,  “value”: “/index”
}, {  “loginName”: “duzl”,  “password”: “admin”,  “verifyCode”: “adf”,  “value”: ” 賬號或密碼錯誤 ”
}, {  “loginName”: “duzl”,  “password”: “”,  “verifyCode”: “adf”,  “value”: ” 引數 password 不能為空 ”
}]

?wx_fmt=png

(1)好我們呼叫 json 檔案,執行下集合,結果如下:

?wx_fmt=png

結果還不錯,執行了 3 次,引數都是取自用例檔案(json 檔案),斷言也取自用例檔案。

美中不足的是,第二個和第三個介面也跟著迭代了 3 次(這並不是我們期望的結果),這是因為集合執行器中的迭代次數是針對所有介面的設定。

(2)那如果,我們想第一個介面執行 3 遍,第二、三個介面只執行一遍,該如何做呢?Postman 給我們提供了一個內建方法,設定介面執行順序postman.setNextRequest('');

?wx_fmt=png

注意:迭代次數從 0 開始。

當迭代次數 !==0 時,就停止本次迭代(意思就是,第一次迭代全執行,第二次迭代開始就不執行第二、三個介面了),好,再次執行集合,看看結果:

?wx_fmt=png

很好,第一次迭代,執行了 3 個介面;第二、三次迭代只執行了第一個介面。

近期熱文

如何基於 Redis 構建應用程式元件

深度學習在攝影技術中的應用與發展

這樣做,你的面試成功率將達到 90%

如何用 TensorFlow 讓一切看起來更美?

Web 安全:前端攻擊 XSS 深入解析

免費福利

?wx_fmt=jpeg

「閱讀原文」看交流實錄,你想知道的都在這裡