一、背景说明
- 现在主流应用系统都采用前后端分离架构设计了
- 那么后端API接口的测试,你用什么工具?Swagger、Postman是不是?
- 今天我告诉你用日常使用的IDEA,即可获得更好的体验
- swagger2测试是方便:
- 不过每次测试的数据不能复用
- 应该是临时存再浏览器缓存里,一段时间就没了
- 而且不好共享给他人
- Postman功能是强大,确实优秀
- 能保存每次测试的数据和接口配置
- 对比swagger缺点就是,地址、参数结构第一次都要手动写
- 其次个人觉得太重了,早期Postman还挺挺轻量级,现在感觉做的很重,现在安装包都到121M了
- 以上纯属我个人主观感受,不喜勿喷
- 所以使用IDEA HTTP request 工具不香吗?
- 能少一个工具是一个,比如IDEA 中的 Git插件其实就挺好用,替代笨重的 SourceTree
- 适合程序员用,代码都是很透明,语法很简洁
- 可以作为项目文件,通过 Git 提交到仓库,大家共享文件
- 共同维护接口请求数据,自然就不会出现调试别人接口还要导入他人数据
- 这里还多说一点,原则上自己开发的接口,后端应该都需要本地测试通过才可以提交代码
- 所以,用这款工具,还可以作为一个是否自测的检查标准,就是说,必须让开发将该http文件、测试返回值JSON与源代码一并提交
- 总之,就是方便 测试用例、测试参数、测试数据的 共享
二、下面开始体验
- 创建HTTP Client,这里就直接推荐你创建一个.http文件
-
然后来一个hello word
- 返回结果如下
- 是不是超级简单
-
配合restfultoolkit插件
- 如果你还想更懒一点,idea安装下restfultoolkit插件
- 然后在你的Controller方法上点下,就这样:
- 看到这里就问你,香不香?
三、接下来我们来点复杂的
- 上面可能太简单了是吧?一般测试至少要登录对吧?没关系
- 下面演示流程:用户登录,获得token,放入全局变量,其他接口引用
### 用户登录
POST http://localhost:6800/base/user/login
Content-Type: application/json
{
"loginType": 1,
"username": "admin",
"password": "xxxxxx"
}
> {%
client.log("将当前用户登录的token存储到全局变量中");
client.assert(response.status===200, "登录失败,用户名或密码错误")
client.global.set("token", response.body.data.token);
%}
### 查询用户基本信息
GET http://localhost:6800/base/user/info
Accept: application/json
token: {{token}}
- 简单不?爽不爽?什么,还不爽?请求地址能不能全局定义,且支持分环境?当然可以,继续看
- 略加改造,指定环境运行
### 查询用户基本信息
GET {{baseUrl}}/base/user/info
Accept: application/json
token: {{token}}
轻松搞定,这里我遇到了一个问题提下,就是看我的环境变量名称本来是local、dev、uat,结果dev死活不行,提示找到多个dev,其他名字都行,不知道是不是不过,于是我都加了个前缀,如果你也遇到了,欢迎交流
四、最后总结下(日常够用了)
######################## 语法说明 ########################
### 使用三个 # 来分隔多个请求
# GET/POST 请求地址(可拼接查询参数)
# 请求头键值对
# 请求体
# > {% %}
# 响应处理
# 使用 >符号 打头,和 shell 很像,然后用 {% %} 括起来的脚本内容
# 在脚本中可以使用 javascript 原生语法
# 脚本中有几个内置对象 client 表示当前客户端,response 表示响应结果
# 注释 : // 或者 #
# 支持 basic / digest 认证,Authorization: Basic|Digest username password
# 断言 client.assert()
# 脚本日志 client.log()
# 存储/获取全局变量 client.global.set/get {{xxx}}
# 环境变量文件 配置全局环境参数 http-client.env.json
# 学以上这么多够用了
# 扩展了解:文件上传怎么弄,我日常用不到,因为都是异步上传
# 扩展了解:断言,我觉得用处不大
最后要注意下,创建的.http文件都放在 scratches 下,返回值才可以正常回写到.http文中,如果将文件放在你的其他模块目录下,运行都正常,就是没有回写json结果,具体看你自己需求了。