接口測試,是一種灰盒測試。
在進行接口測試過程中,我們經常需要通過數據庫對比檢查來判斷接口執(zhí)行的結果是否正確。
但是 Postman 并沒有提供數據庫的查詢。就無法通過 Postman 去連接數據庫驗證數據的正確性。
好在,有一款基于 node.js 的工具 Xmysql可以將數據庫的表數據轉換成 Restful API 接口,返回 JOSN 格式的數據結果。
重度聲明:此款工具僅能用于測試環(huán)境,因為這款工具會造成嚴重的數據安全問題。
不過測試本來就在測試環(huán)境,所以測試使用在一定的安全性意識前提下,是沒有太大問題的。
接下來,我們就來看看這款工具如何使用。
1. 安裝部署
1.1 安裝 Node.js
Xmysql 是基于 Node.js 開發(fā)的,需要安裝 Node.js 環(huán)境。Node.js 的安裝直接從 [node.js 中文網] 下載無腦安裝即可。
建議:不要隨便更改其安裝目錄。
安裝完成后,在命令行窗口輸入npm --version

npm是 Node.js 的包管理工具,用來安裝基于 Node.js 相關的軟件。
1.2 安裝Xmysql
在 Node.js 安裝好后,執(zhí)行如下命令;
npm install -g xmyql
-g 參數是指全局安裝,對當前操作系統(tǒng)所有用戶有效。
安裝好以后,輸入如下命令檢查是否安裝成功。
xmysql --version

2. Xmysql 基本使用
xmysql 安裝好以后,就可以直接在命令行啟動 xmysql 服務。啟動命令如下:
xmysql -h localhost -u root -p root -r 172.31.18.163 -d ecshop2
參數說明:
-h localhost:指定數據庫服務器所在的 IP 地址;
-u root:指定訪問數據庫的賬號(注意,直接使用 root 賬號極度危險);
-p root:指定訪問數據庫的密碼,與上面的賬號配套;
-r 172.31.18.163:指定訪問的 API 的 IP,這樣可以跨服務器訪問,否則只能使用 localhost 和 127.0.0.1 進行本機訪問;
-d ecshop2:指定具體的數據庫,這里的數據庫名為 ecshop2。
服務啟動后的界面如下,如果沒有啟動成功,請根據上面的參數逐一檢查。我們可以看到 ecshop2 庫一共有 88 張表,生成了 1681 個 API 接口。

服務器啟動成功后,我們就可以通過 http://172.31.18.163:3000 訪問,會展示所有的 1681 個 API 接口的地址:

如果啟動服務后,數據庫的
Number of Tables數量為0,那么就是數據庫沒有連接成功:xmsql 服務啟動失敗遇到上圖的情況就根據提示信息檢查參數值,可通過 Ctrl+C 結束服務,修改參數后再重新啟動。
3. Xmysql API 介紹
3.1 常見 API
由 xmysql 提供最常用的一些 API。包括獲取整張表,獲取表中某行數據,修改某行數據,刪除某行數據等,也就是常見的增刪改查。這些操作的執(zhí)行都通過指定主鍵ID來完成。
3.1.1 獲取整張表所有數據
通過 GET 請求某一個表名,獲取整張表的數據。
GET /api/表名
GET http://172.31.18.163:3000/api/ecs_users
這里查詢整張 ecs_users 表。

3.1.2 查詢某一行數據
通過在 URL 中指定某一行的主鍵,查詢改行的數據。這里的 ecs_users 表的主鍵為 user_id。
注:這個方法和后面的方法 ID 都是直接使用該表的主鍵。比如 ecs_users 表的主鍵為 user_id, 那么這里的 ID 就是指 user_id, 比如 ecs_goods_type 表的主鍵為 cat_id ,那么這里的 ID 就是指 cat_id。
GET /api/表名/id
GET http://172.31.18.163:3000/api/ecs_users/2

3.1.3 創(chuàng)建一條數據
通過 POST 方法在對應的表中增加一條數據。
POST /api/表名(PUT也是創(chuàng)建)
這里使用 ecs_goods_type 表演示。該表結構如下:

構造請求如下:
POST http://172.31.18.163:3000/api/ecs_goods_type
PUT http://172.31.18.163:3000/api/ecs_goods_type
參數名與表字段名一致

檢查數據庫結果,新增了一條 ID 為 25 的數據。

3.1.4 修改某行數據
依然以 ecs_goods_type 表為例,修改我們剛才添加的 ID 為 25 的數據。
PATCH /api/表名/id
PATCH http://172.31.18.163:3000/api/ecs_goods_type/25

3.1.5 統(tǒng)計表的行數
返回表的所有行的計數,也就是表有多少記錄。
GET /api/表名/count
GET http://172.31.18.163:3000/api/ecs_goods_type/count

3.1.6 刪除行
刪除指定的行。
DELETE /api/表名/id
刪除ecs_goods_type表中 ID 為 25 的行。
DELETE http://172.31.18.163:3000/api/ecs_goods_type/25

3.1.7 根據外鍵查詢
根據父表中的 ID 查詢關聯的子表中的數據。
GET /api/parentTable/id/childTable
比如電商系統(tǒng)中,ecs_order_info 為主表,ecs_order_goods為輔表。
通過訂單信息表 ecs_order_info 中的訂單 ID 查詢ecs_order_goods訂單詳情表中的訂單商品數據。
GET http://172.31.18.163:3000/api/ecs_order_info/5/ecs_order_goods
查詢訂單 ID 為 5 的訂單商品數據。
由于我暫時沒有找到有關聯的表,所以無法貼上結果,請各位自行嘗試。
3.1.8 分組查詢
可以通過 groupby 接口進行分組查詢,通過內置的參數_fields指定分組的字段。
GET /api/表名/groupby?_fields=分組的字段
如下示例查詢ecs_goods表,指定通過 goods_name進行分組查詢。
GET http://172.31.18.163:3000/api/ecs_goods/groupby?_fields=goods_name

還有一種 ugroupby 接口,同樣是分組統(tǒng)計,只是返回的結果格式不一樣,對比一下。
GET http://172.31.18.163:3000/api/ecs_goods/groupby?_fields=goods_name

更多內容,請看下期分解!
