HTTP Client使用说明--共享的api调试文档

458 阅读5分钟

优势

  1. 脚本化 mock
  2. 免复制 token
  3. 最大优势:它可以作为项目文件,通过 Git 提交到仓库,大家共享文件,共同维护接口请求数据,就不会出现调试别人接口还要导入他人数据的情况啦

总之,就是方便 测试用例、测试参数、测试数据的 共享。 ..... 一大堆

对于企业版, HTTP Client 是 IDEA 默认安装,并且启用的插件

社区版, 不包含此功能了(手动安装插件 HTTP Client,该插件包含在idea内部了)

验证:点击菜单:Tools — HTTP Client — Create Request in HTTP Client

或者直接创建一个扩展名为 .http 或者 .rest 的普通文件 现在默认创建的.http

请求的语法基本上和 http 协议内容是一致的,结构如下

### 使用三个 
# 来分隔多个请求 GET/POST 请求地址(可拼接查询参数) 
请求头键值对 
请求体 
> {% %} 
# 响应处理 
# 使用 >符号 打头,和 shell 很像,然后用 {% %} 括起来的脚本内容 
# 在脚本中可以使用 javascript 原生语法,这就很强大了 # 脚本中有几个内置对象 client 表示当前客户端,response 表示响应结果

对于 .http 文件中的一些简单语法 :

  1. 注释 : // 或者 #
  2. 使用三个 # 号分割 request 请求 : ###
  3. web 的 basic 或者 digest 认证

eg: 普通请求体

POST http://127.0.0.1:8080/api/html/post
Content-Type: application/json 

{ "key" : "value", "list": [1, 2, 3] }

eg: 不添加执行日志

// @no-log
GET 127.0.0.1/api

eg: web 的 basic 或者 digest 认证

// Basic authentication
GET http://example.com
Authorization: Basic username password

###

// Digest authentication
GET http://example.com
Authorization: Digest username password

处理响应:

将脚本插入请求中

以 > 开头,然后把脚本包装在 {%%} 里面。

断言 client.assert

GET https://example.com/status/200

> {%
        client.test("Request executed successfully", function() {
        client.assert(response.status === 200, "Response status is not 200");
    });
%}


脚本日志 client.log

client.log("this is log");

存储变量

通过 client.global.set 存储全局变量,通过 client.global.get 获取变量。可以通过 client 对象在内存中存储数据,可以保留到 idea 关闭之前。

除了 get 获取值外,还可以通过变量获取值,如下:

### 获取 token 值
POST http://127.0.0.1:8080/v2/oauth/sso/code
Content-Type: application/json

{  
  "userName": "",
  "password": ""
}

> {%
client.global.set("token", response.body.data.access_token);
%}

### 待处理列表 使用token
GET {{baseUrl}}/v2/page/assign
Authorization: Bearer {{token}}

那么在一处存储了变量, 就可以在其他地方调用了,非常适合处理 token,就有点像浏览器登录了…

辅助功能说明

RestfulToolkit

RestfulToolkit 同样是个插件,在插件市场搜索安装即可

安装了这个插件后,打开侧边栏,项目的所有接口信息都会展现在此处: 我常用的功能就是把指定接口生成的JSON数据拷贝到 HTTP request 文件中,免去手写的麻烦了,你说方便不?

常用示例

配置环境信息

这也是它比较强大的一方面,使用一个 json 来配置所有环境,只要在请求脚本目录下就可以读到,遵循约定大于配置的原则,文件名 http-client.env.json 表示普通变量可放的地方 http-client.private.env.json 表示密码等私有变量配置的地方,配置大致如下。在运行请求脚本的时候,idea 会提示你要选哪个环境

{
  "core-local": {
    "baseUrl": "http://localhsot:10091/"
  },
  "core-dev": {
    "baseUrl": "http://dev/"
  }
}

上面的文件,放在rest接口文件的同一个目录下。

上面的文件, 定义了2个环境类型:local,dev,执行的时候,需要选择 环境 的 类型:

登录 token 示例

用一个接口获取到 token ,然后保存到全局变量中,然后后面的接口就可以直接使用了,代码如下,

但是如果两步才能登录成功 ,就有点问题。 如:先登录,然后再校验 验证码

### 获取 token 值
GET {{checkCode}}
Content-Type: application/json

> {%
client.global.set("token", response.body.token);
%}

### 获取列表
POST {{baseUrl}}/list
Content-Type: application/json
Authorization: {{token}}

{
  "pageNo": 1,
  "pageSize": 10
}

上面这个是有问题的,返回值 response.body 其它是个 json 字符串并非 javascript 对象,需要解析一下,前面也说了,这里可以使用原生 javascript 脚本,所以 JSON.parse(response.body).token 才能正确获取到 token ,

第二个问题,我们现在这个 token 是存在 redis 的,所以我可以绕过验证码,另写一个接口去 redis 直接获取 token ,脚本最终如下

### 获取 token 值
GET {{checkCode}}
Content-Type: application/json

> {%
client.global.set("token", JSON.parse(response.body).token);
%}

### 获取列表
POST {{baseUrl}}/list
Content-Type: application/json
Authorization: {{token}}

{
  "pageNo": 1,
  "pageSize": 10
}

文件传输实践

前面说了,输入输出和 shell 中很像,所以这里输入一个文件使用 < 文件地址,随便找个 multipart/form-data 的数据格式查看一下,就知道文件怎么传了,其实在示例中也有,如下面脚本所示,它使用一个 boundary 的 key 绑定当前所要提交多个 part 的数据,每个 part 可以是不同的数据格式 ;

### 测试发送文件信息(文件元数据信息查询)
POST {{baseUrl}}/media/upload/fileMetaData
Content-Type: multipart/form-data; boundary=WebAppBoundary
Authorization: {{token}}

--WebAppBoundary
Content-Disposition: form-data; name="fileSize"
Content-Type: application/json

1024
--WebAppBoundary
Content-Disposition: form-data; name="md5"
Content-Type: application/json

sdafasdfasfd
--WebAppBoundary
Content-Disposition: form-data; name="partFile"; filename="zhongwenbuxin.avi"
Content-Type: application/octet-stream

< C:\Users\Videos/V01.avi
--WebAppBoundary--

对于返回信息乱码我没有碰到,也没有设置网上说的消息头和启动配置,返回消息是正常编码的;我只碰到了上传上去的文件名中文是乱码的,怎么设置都不生效,没找到解决办法,但自测的话,取个英文名也没关系。