有时候用 Postman 接口测试需要获取MySQL的查询结果做接口输出的校验,这里介绍下 Postman 通过 Restful API 接口访问 MySQL 的工具xmysql的使用方法。
注:npm的安装和配置自行百度,这里主要讲xmysql,就不赘述了
C:\Users\wmp>node -v v12.16.3 C:\Users\wmp> C:\Users\wmp> npm install -g xmysql C:\Users\wmp\AppData\Roaming\npm\xmysql -> C:\Users\wmp\AppData\Roaming\npm\node_modules\xmysql\bin\index.js > es5-ext@0.10.59 postinstall C:\Users\wmp\AppData\Roaming\npm\node_modules\xmysql\node_modules\es5-ext > node -e "try{require('./_postinstall')}catch(e){}" + xmysql@0.5.1 added 131 packages from 68 contributors in 22.806s
安装完输入xmysql可以查看具体参数,同时也表示安装成功
C:\Users\wmp>xmysql Usage: index [options] Options: -V, --version output the version number -h, --host <n> hostname of database / localhost by default -u, --user <n> username of database / root by default -p, --password <n> password of database / empty by default -d, --database <n> database schema name -r, --ipAddress <n> IP interface of your server / localhost by default -n, --portNumber <n> port number for app / 3000 by default -o, --port <n> port number for mysql / 3306 by default -S, --socketPath <n> unix socket path / not used by default -s, --storageFolder <n> storage folder / current working dir by default / available only with local -i, --ignoreTables <n> comma separated table names to ignore -a, --apiPrefix <n> api url prefix / "/api/" by default -y, --readOnly readonly apis / false by default -c, --useCpuCores <n> use number of CPU cores (using cluster) / 1 by default -h, --help output usage information Examples: $ xmysql -u username -p password -d databaseSchema Error: password for database is missing Error: database name is missing C:\Users\wmp>
连接数据库:
xmysql -h host_name -o port -u user_name -p user_password -d database_name
C:\Users\wmp>xmysql -h 192.168.5.103 -u root -p 123456 -o 3301 -d test Generating REST APIs at the speed of your thought.. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Database : test Number of Tables : 3 【test库表的数量】 REST APIs Generated : 62 【生成的api数量】 Xmysql took : 0 seconds API's base URL : localhost:3000 【api的访问方式,端口3000可以通过参数 -n进行修改为其他】 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
xmysql的默认端口是3000,下面用postman调用api的方式试下数据库的增删改查(注: 在postman中执行sql语句时,cmd窗口和msqll都不可以关闭)
API Overview
HTTP Type | API URL | Comments |
---|---|---|
GET | / | 获取所有 REST API |
GET | /api/tableName | 列出表的行 |
POST | /api/tableName | 创建一个新行 |
PUT | /api/tableName | 用新行替换现有行 |
POST | /api/tableName/bulk | 创建多行 - 在请求正文中发送对象数组 |
GET | /api/tableName/bulk | 列出多行 - /api/tableName/bulk?_ids=1,2,3 |
DELETE | /api/tableName/bulk | 删除多行 - /api/tableName/bulk?_ids=1,2,3 |
GET | /api/tableName/:id | 按主键检索一行 |
PATCH | /api/tableName/:id | 按主键更新行元素 |
DELETE | /api/tableName/:id | 按主键删除一行 |
GET | /api/tableName/findOne | 作为列表工作,但获得单个记录匹配条件 |
GET | /api/tableName/count | 计算表中的行数 |
GET | /api/tableName/distinct | 表中的不同行 - /api/tableName/distinct?_fields=col1 |
GET | /api/tableName/:id/exists | 是否存在行 |
GET | /api/parentTable/:id/childTable | 获取具有父表外键的子表行列表 |
GET | /api/tableName/aggregate | 汇总数字列的结果 |
GET | /api/tableName/groupby | 按列的结果分组 |
GET | /api/tableName/ugroupby | 使用一次调用按结果进行多个分组 |
GET | /api/tableName/chart | 基于 (min,max,step) 或 (step array) 或 (automagic) 的数值列分布 |
GET | /api/tableName/autochart | 与 Chart 相同,但会自动识别哪些是数字列 |
GET | /api/xjoin | 处理连接 |
GET | /dynamic | 使用参数执行动态 mysql 语句 |
GET | /upload | 上传单个文件 |
GET | /uploads | 上传多个文件 |
GET | /download | 下载文件 |
GET | /api/tableName/describe | 描述每个表的列 |
GET | /api/tables | 获取数据库中的所有表 |
GET | /_health | 获取进程和 mysql 的运行状况 |
GET | /_version | 获取 Xmysql、mysql、node 的版本 |
查看对象表下所有可用的接口,可以参数调用并查看结果
http://localhost:3000/
以下是t1表可用的接口:
用t1表做一个简单的查询测试:
1、查询t1的整表数据
GET /api/t1 SQL: select * from `t1` ;
2、带条件查询
GET /api/t1?_where=(ida,eq,1) SQL: select * from `t1` where `ida`=1;
3、分页查询
4、in查询
GET /api/t1/bulk?_ids=1,2,3 SQL: select * from `t1` where `ida` in (1,2,3) limit 0,20;
其他的增删改参考上述的API Overview,下面演示下xmysql在postman接口测试中的应用:
xmysql -h 192.168.5.103 -u root -p Great@123 -o 3306 -d SCOTT
#测试接口1:获取全国行政区划 http://127.0.0.1:8369/query?fid={{pregion_code}} #接口2:xmysql获取mysql数据接口 http://localhost:3000/api/AREAS?_where=(parent_region_code,eq,{{pregion_code}})
接口参数化,可在postman collection中设置全局参数并赋值
//定义变量做接口的输入传参并设置为全局变量 var pregion_code=110100; pm.environment.set("pregion_code", pregion_code);
接口输出参数化设置:
在接口1Tests中用js脚本对接口输出结果需要断言的部分转参数并设置环境变量,以便在接口2的数据库输出中进行比较
//返回body转json var jsonData = JSON.parse(responseBody); var list=jsonData.result; var regionCode=[]; num=list.length; for (let i=0;i<num;i++){ regionCode.push(list[i].id); } //设置为全局变量,用于数据库查询接口的数据校验 pm.environment.set("regionCode", regionCode); //console.log(regionCode)
接口2Tests中用js脚本对数据库查询到的json脚本进行处理,获取需要的数据,参数化后与接口1的输出进行比较
//返回body转json var jsonData = JSON.parse(responseBody); var res_id=[]; num=jsonData.length; //获取数据库查询结果的region_code列 for (let i=0;i<num;i++){ res_id.push(jsonData[i].region_code+''); } //获取接口1输出的结果参数regionCode var regionCode=pm.environment.get("regionCode"); //断言 比较接口和数据库的输出结果 tests["接口断言成功!!"] = res_id.sort().toString === regionCode.sort().toString ; //console.log(res_id);
建表脚本
drop table if exists t1; CREATE TABLE t1 ( id int NOT NULL AUTO_INCREMENT PRIMARY KEY comment '用户ID', person_name varchar(30) comment '用户名称' )
这里演示插入10000条:
3、执行完毕,查看表数量
调用表行数查询接口查询结果:
声明:xmysql工具主要用于测试环境,结合接口测试等,主要用于内部测试,在生产还是不建议使用,因为这款工具会造成严重的数据安全问题。
https://gitee.com/thinkyoung/xmysql
Enjoy GreatSQL