postman接口自动化(五)xmysql 辅助操作 mysql 数据库

本文介绍了如何借助Xmysql工具将MySQL数据库的表数据转换为RESTful API,以辅助Postman进行接口自动化测试。文章详细阐述了Xmysql的安装、基本使用方法,包括增删改查等常见API的操作,以及如何通过Where条件、fields指定结果列、分页和排序等高级功能。强调Xmysql仅适用于测试环境,注意数据安全。
摘要由CSDN通过智能技术生成

在进行接口测试过程中,我们经常需要通过数据库对比检查来判断接口执行的结果是否正确。
但是 Postman 并没有提供数据库的查询。就无法通过 Postman 去连接数据库验证数据的正确性。
好在,有一款基于 node.js 的工具 Xmysql可以将数据库的表数据转换成 Restful API 接口,返回 JOSN 格式的数据结果。
重度声明:此款工具仅能用于测试环境,因为这款工具会造成严重的数据安全问题。
不过测试本来就在测试环境,所以测试使用在一定的安全性意识前提下,是没有太大问题的。

1. 安装部署
1.1 安装 Node.js
Xmysql 是基于 Node.js 开发的,需要安装 Node.js 环境。Node.js 的安装直接从 [node.js 中文网] 下载无脑安装即可。
建议:不要随便更改其安装目录。
安装完成后,在命令行窗口输入npm --version
npm是 Node.js 的包管理工具,用来安装基于 Node.js 相关的软件。

1.2 安装Xmysql
在 Node.js 安装好后,执行如下命令;

npm install -g xmyql

-g 参数是指全局安装,对当前操作系统所有用户有效。
安装好以后,输入如下命令检查是否安装成功。

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,那么就是数据库没有连接成功。遇到上图的情况就根据提示信息检查参数值,可通过 Ctrl+C 结束服务,修改参数后再重新启动。

3. Xmysql API 介绍
3.1 常见 API

由 xmysql 提供最常用的一些 API。包括获取整张表,获取表中某行数据,修改某行数据,删除某行数据等,也就是常见的增删改查。这些操作的执行都通过指定主键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。

GET /api/表名/id

GET http://172.31.18.163:3000/api/ecs_users/2

注:这个方法和后面的方法 ID 都是直接使用该表的主键。比如 ecs_users 表的主键为 user_id, 那么这里的 ID 就是指user_id, 比如 ecs_goods_type 表的主键为 cat_id ,那么这里的 ID 就是指cat_id

3.1.3 创建一条数据
通过 POST 方法在对应的表中增加一条数据。

POST /api/表名(PUT也是创建)

这里使用 ecs_goods_type 表演示。该表结构如下:
在这里插入图片描述

POST 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 统计表的行数
返回表的所有行的计数,也就是表有多少记录。

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

比如电商系统中,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.2 其他接口
3.2.1 查询多行

通过主键查询多行

GET /api/表名/bulk

GET http://127.0.0.1:3000/api/ecs_goods_type/bulk?_ids=4,5,6

3.2.2 添加多行
同时插入多行数据

POST /api/表名/bulk
以 json 方式构建请求报文

POST http://127.0.0.1:3000/api/ecs_goods_type/bulk

在这里插入图片描述
3.2.3 删除多行
同时删除多行。

DELETE /api/表名/bulk

DELETE http://127.0.0.1:3000/api/ecs_goods_type/bulk?_ids=10,11

3.2.4 过滤重复的行 distinct

指定列名排除该列重复的行。

GET /api/表名/distinct?_fields=列名

3.2.5 直接执行 SQL 语句

POST /dynamic
SQL 语句写在body中

可以通过 dynamic接口,直接编写SQL语句。
但是此接口仅对 xmysql 服务在数据库服务器上启动有效,也就是说,参数 -h 必须指定 -h localhost 或者-h 127.0.0.1。如果是通过 xmysql 远程访问数据库的话,是不能执行 SQL 语句的。
post 方法的 body 有两个字段:query 和 params

query: SQL 查询语句,或者是SQL 准备语句 (使用 ?? and ? 进行参数占位) params : 与 SQL 准备语句配合起来使用,为 ?占位提供参数值>

SQL 语句:

POST http://127.0.0.1:3000/dynamic

在这里插入图片描述
SQL 准备语句:
在这里插入图片描述
4. 条件
4.1 使用 Where 条件

我们在编写 SQL 语句时,会使用 where 条件来过滤。xmysql 也支持 where 条件,只是通过参数的方式实现的。

GET /api/表名?_where=(列名,条件运算符,值)

使用 _where作为参数名后面的值为查询条件,查询条件括号中有三个值,分别是:列名,条件运算符比如大于、小于等,值判断条件的值。

GET http://172.31.18.163:3000/api/ecs_goods?_where=(shop_price, gt, 1000)

注:上面的例子,是从 ecs_goods查询 shop_price大于 1000的商品。

在这里插入图片描述
详细的条件运算符:

eq      -   '='         -  (colName,eq,colValue)
ne      -   '!='        -  (colName,ne,colValue)
gt      -   '>'         -  (colName,gt,colValue)
gte     -   '>='        -  (colName,gte,colValue)
lt      -   '<'         -  (colName,lt,colValue)
lte     -   '<='        -  (colName,lte,colValue)
is      -   'is'        -  (colName,is,true/false/null)
in      -   'in'        -  (colName,in,val1,val2,val3,val4)
bw      -   'between'   -  (colName,bw,val1,val2) 
like    -   'like'      -  (colName,like,~name~)   note: 使用 ~ 代替 %
nlike   -   'not like'  -  (colName,nlike,~name~)  note: 使用 ~ 代替 %

另外还有逻辑运算符:

~or     -   'or'
~and    -   'and'
~xor    -   'xor'

举个例子,查询 shop_price大于 1000 ,并且goods_name以诺基亚开头。

GET http://172.31.18.163:3000/api/ecs_goods?_where=(shop_price,gt,1000)~and(goods_name,like,诺基亚~)

在这里插入图片描述
4.2 使用 fields 指定结果列
由于ecs_goods表字段太多,影响我们对结果的查询和使用。在 SQL 语句中,我们可以指定结果中的列。 Xmysql 中,也可以通过 _fields字段指定结果中的列。
以上面的例子为例。

GET http://172.31.18.163:3000/api/ecs_goods?_where=(shop_price,gt,1000)&_fields=goods_id,goods_name,shop_price

注:查询 shop_price大于1000的商品,只查看 goods_id,goods_name,shop_price 三个字段。

在这里插入图片描述
4.3 指定不显示的列
如果你想某字段不在结果中展示,可以在字段名前加负号来指定不展示的列。

GET http://172.31.18.163:3000/api/ecs_goods?_fields=-goods_name

比如不想在结果中展示goods_name,只需要在前面加一个负号即可。

5. 分页
如果查询结果的条数特别多,则需要分页查看。
分页主要使用两个参数

_p 指定显示的页数,页数会根据查询到的数量除以_size
_size 指定返回的行数

GET 请求默认只返回表中的 20 条记录,并且最大返回记录为 100 条。
通过设置 _size 可以改变查询记录的条数。最大只能返回 100 条。

如果设置的条数大于100,则只会返回100条; 如果设置的条数小于等于0,则会返回默认的20条。

GET http://127.0.0.1:3000/api/ecs_goods?_size=15&_p=3&_fields=goods_id,goods_name

在这里插入图片描述
6. 排序
排序通过 _sort关键字指定排序的字段即可。如果要按倒序排,则在字段前加 负号。
正序 ASC:
在这里插入图片描述
倒序 DESC

GET http://127.0.0.1:3000/api/ecs_goods?_fields=goods_id,goods_name&_sort=-goods_id

注意:字段名前面加 - 负号。
在这里插入图片描述
多重排序
可以多列结合起来排序,用逗号分隔即可。

GET http://127.0.0.1:3000/api/ecs_goods?_fields=goods_id,goods_name,shop_price&_sort=shop_price,-goods_id

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值