Postman API 接口測試、Jenkin 持續集成測試


Postman 是一個創建和使用API的應用,Postman 對於Web開發者來說非常有用,Postman 帶來的便利有很多,諸如:

  • RESTFul接口測試不依賴其他端,進度不受影響
  • 測試腳本即文檔,減低溝通成本,對接時直接導出給前端即可
  • 造數據,Runner指定運行N次,構造大量數據,對統計、分頁測試很有用
  • 減少問題排查時間,有時候對接端由於HTTP Header或參數指定有誤導致數據異常,可直接用Postman測試,同時直接提供證據

總的來說,Postman是一個非常有用且好用的 API 測試和管理工具。

應用結構

Postman 程序的應用結構可以左、中、右三個區域,左邊是功能區、中間是接口測試區,右邊是文檔區域,這三個區域是平時經常接觸的地方,除此之外,底部還有控制台和Postamn Runner,如下圖:

發起請求

發起 HTTP 請求進行接口測試是 Postman 的核心功能,很多開發者用 Postman 最初的目的就是用它發起 HTTP 請求進行接口測試,其實 Postman 的發起 HTTP 請求也涉及很多操作,如:

  1. 簡單接口測試
  2. 前置腳本
  3. 后置腳本
  4. 環境變量
  5. 結果渲染

下面通過案例,逐一說明 Postman 這些功能的使用方式。

簡單接口測試

Postman 的簡單接口測試是最基本但用得最多的測試,這個操作跟使用瀏覽器直接訪問接口差不多,不同的是 Postman 可以選擇請求方式,比如 GET,POST,DELETE等,假設需要測試下面這樣的一個 SpringMVC 接口:

@GetMapping("/{id}")
public ResponseEntity<User> user(@PathVariable("id") String id) {
    User user = new User();
    user.setId(id);
    user.setName("HiIT青年");
    return ResponseEntity.ok(user);
}

你只需要在 Postman 創建 GET 請求接口,然后填寫對應的請求地址,然后點擊 Send 即可,如果請求的接口沒有異常,那么可以看到下面這樣的結果:

這種操作方式是最簡單的,也是最常用的,其中:

  • GET 下拉可以切換請求方式
  • Params 指定掛在URL上的參數
  • Authrization 指定接口授權方式
  • Headers 可以設置額外的請求頭
  • Body 主要用於設置 POST 請求體,可以用多種數據格式
  • Pre-request Script 是前置腳本
  • Tests 是后置測試腳本
  • Settings 是一些設置,如SSL證書校驗、URL編碼等

簡單的方式,存在很多弊端,最明顯的就是請求接口的返回值需要肉眼校驗是否正確,當然 Postman 支持用 JavaScript 來編寫測試。

前置腳本

在簡單接口測試部分,使用一個隨機參數 t=20210814,這個參數對於接口來說沒有任務作用,但有時候,接口測試就真都需要這些隨機參數,Postman 設置隨機參數的方式有多種,如:

  1. 使用 Postman 隨機值
  2. 使用變量 + 前置腳本設值

Postman 提供了動態變量可以用於設置參數隨機值,如:

{{$guid}}:用於生成guid隨機值
{{$timestamp}}:以當前時間秒數作為隨機值
{{$randomInt}}:隨機生成0~1000的整數
....

另外,可以隨機參數還可以使用前置腳本來設置。
首先,在Collections創建一個變量(timestamp),也可以用環境變量,效果都一樣。

編寫前置腳本,在請求發起前,為變量 timestamp 設置值:

var timestamp = new Date().getTime()
pm.collectionVariables.set('timestamp', timestamp)

最后把 t 的取值由 {{$guid}} 改為 {{timestamp}} 即可。

后置腳本

Postman 后置腳本是指 Tests 部分編寫的 JavaScript 腳本,這部分功能非常強大,不僅可以使用 JavaScript 編程來獲取返回值數據,還可以將返回結果渲染成頁面(圖表),而且還支持引入外部 JavaScript 庫。

http://localhost:8080/user/1?t={{timestamp}}

這個接口拉取的是 ID=1 的用戶數據,假如需要測試返回的數據 ID 是不是等於 1,那么可以用下面的腳本來測試。

可以看到,測試結果為 “PASS” 如果把 equal("1") 改成 equal("2") 那么測試將會失敗:

FAIL test id == 1 | AssertionError: expected '1' to equal '2'

可以說,使用后置腳本就像給整個接口測試流程注入生命,比如,一些授權接口需要獲取 ticket,然后其他接口需要用這個 ticket 來授權,那么就可以在請求 ticket 后將它設置到變量中:

var jsonData = pm.response.json();
pm.test("ticket exists", function () {
    pm.expect(jsonData.ticket).exist
});
pm.collectionVariables.set('ticket', jsonData.ticket)

另外,Tests 還可以發起新的 HTTP 請求:

pm.sendRequest('http://localhost:8080/user/ticket/1', (error, response) => {
  if (error) {
    console.log(error);
  }
  pm.collectionVariables.set('ticket', response.json().ticket)
});

關於 Tests 的調試信息,可以通過 Postman 底部的 Console 來查看。

環境變量

Postman 的環境變量方便開發針對不同的環境進行切換,而接口方面不用做任何調整,這一點對開發者來說也是很有用的,因為在開發中過程一般都有很多個環境,比如:

  1. 開發環境:開發自己的電腦運行的程序
  2. 測試環境:測試服務器上運行的程序
  3. 預發布環境:測試通過后,進行試運行的程序
  4. 線上環境:真正為服務器上運行的環境

Postman 運行用戶創建多個運行環境,舉個例子,創建 “開發” 和 “測試” 這兩個環境,並在不同的環境中定義不同的變量(host:IP,port:端口)

將請求 URL 調整為取環境變量值:

http://{{host}}:{{port}}/user/1?t={{timestamp}}

這樣,針對不同的環境測試,就不用改IP、端口,只需要切換運行環境即可。

結果渲染

結果渲染這部分感覺實際用得不是很多,但也不是說沒有用,比如:想要將結果渲染成表格,或者說報表就可以用到這個功能。

這一塊還是在后置腳本(Tests)中處理,以渲染表格為例:

渲染圖表案例:

接口文檔

Postman 接口文檔位於 Postman 界面的最后測,接口文檔支持 Markdown 編寫,這個對於程序員來說非常友好,可以根據需要為集合(Collections)或者接口編寫對應的文檔。

另外,除接口文檔外,Postman 的 example 也是非常有用,它可以把每種請求接口保存為一份示例,這樣,不管是成功,還是失敗,都可以快速查看返回數據格式(這對對接非常有用)。

下面是一份成功請求的示例:

接口授權

Postman 的接口鑒權管理在 Collections 的 Authoriztion 中,開發者可以通過 Type 選擇鑒權的方式,包括 ApiKey,BasicAuth,OAuth2.0等等,傳值可以選擇 Header 獲取 URL參數。

對於鑒權值,可以選擇直接填寫,也可以使用變量值的形式,比如{{ticket}},如果將其他接口(比如登錄接口)的返回值,設置到環境變量中。

var jsonData = pm.response.json();
pm.test("ticket exists", function () {
    pm.expect(jsonData.ticket).exist
});
pm.collectionVariables.set('ticket', jsonData.ticket)

關於 Postman Jenkins 持續集成測試的方法,可以關注公眾號 “HiIT青年” 發送 “postman” 查看。

=========================================================
HiIT青年
關注公眾號,閱讀更多文章。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM