動手造輪 | 一款Bash 指令碼 +HTTP 請求工具 +JSON 解析工具組成的測試小工具

數人云發表於2016-11-03

數人云開源一款容器管理工具Crane,Crane開發過程中,為了保證API的健壯性和穩定性, 數人云開發團隊自制了一套適合Crane API測試的小工具。它也適用於其他介面測試,小數發現很多朋友對它感興趣,就勤勞地搬運過來,希望能為大家提供一個參考和思路。

針對Crane團隊只向外輸出API的特點, 選擇測試工具是秉著以下原則的:

  • 第一, 功能不要太複雜,學習曲線不能太陡, 功能夠用就行;
  • 第二, 可程式設計要好, 最好不要有介面,程式設計師友好。

於是一款簡單的Bash指令碼+HTTP 請求工具+JSON解析工具組成的測試小工具雛形出現了。

下面給大家展現這款工具的構成

Bash指令碼: 測試工具的粘合劑, 不是Java也不是Python, 用Bash簡單易用,功能強大。 Httpie: 一款類似curl的http工具, 不過比curl簡單的多, 尤其是想發個JSON請求時候, 更簡單。 jq: jq是一款命令列解析JSON文字的工具, 支援非常多的語法解析構造重組JSON文字。

下面依次給大家介紹一下httpie和jq的基本用法

1. 例子說明如何使用httpie

httpie在terminal下的命令是http, 先來幾個簡單的例子給演示一下用法。

http get http://httpbin.org/get header:header-content

其中, http是命令, get是請求method, http://httpbin.org 是請求地址, httpbin是一個http的測試服務; 用冒號相連的引數代表著HTTP請求頭, 用等號連線為請求body中的JSON鍵和值。 httpie預設的請求為json請求, 所以不用過多指明,header已經加上了Content-Type:application/json。

http post http://httpbin.org/post header:header-content json-key=json-value

http支援很多命令列選項, 介紹一個有意思的是 --check-status, check-status是把http response的非200值設定成程式的exit code, 比如:

如上所示, 請求一個不存在的地址時候程式退出符號變成了4。 我們將大量使用這個feature來判斷返回值。

2. 例子說明如何使用jq

下面我們用幾個例子介紹一下jq的用法。

上圖演示如何提取一個json的key。

如何提取一個巢狀的key。

提取陣列中的元素。

篇幅關係我們不過多展示jq的高階功能, 除了基本的解析和構造以外,jq支援大量的filter, 如有興趣可參考https://stedolan.github.io/jq/ ... tions

3. Crane測試工具的幾個場景

場景一: 我期望測試API的HTTP測試的返回狀態比如200, 404, 500

首先bash造了幾個基本的函式來輸出錯誤, 和判斷狀態

使用方法

場景二: 登入過程測試

更多的測試例子可參考https://github.com/Dataman-Clo ... _test

至此,一款可用的測試工具出爐了, 雖然簡單,不過功能恰到好處,非常適合我們的場景, 再也不怕API出錯發現不了了。 聰明的同事們把這工具配到了jenkins和單元測試一起執行, 出錯了還能得到郵件通知, 酷極了。

相關文章