http接口测试与Controller写法总结
探究不同类型的Controller方法该如何使用ApiPost进行接口测试。
常用的接口测试工具主要有以下几种:
- Postman(ApiPost): 简单方便的接口调试工具,便于分享和协作。具有接口调试,接口集管理,环境配置,参数化,断言,批量执行,录制接口,Mock Server, 接口文档, 接口监控等功能;
- JMeter: 开源接口测试及压测工具,支持Linux及无界面运行;
- LR: 商业版接口性能测试工具,简单易用,功能强大;
- SoupUI: 开源,WebService接口常用测试工具,也可以测试Rest接口及接口安全。
本文以接口测试工具ApiPost进行测试,探究不同类型的Controller方法该如何使用ApiPost进行接口测试。
请求类型
GET请求:请求指定的页面信息,并返回实体主体。(通常用来接收数据)。
POST请求:向指定资源提交数据进行处理请求,数据被包含在请求体中。POST请求可能会导致新的资源的建立、已有资源的修改。(通常用来发送数据)。
HEAD请求:类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。
PUT请求:从客户端向服务器传送的数据取代指定的文档的内容。
DELETE请求:请求服务器删除指定的页面。
CONNECT请求:能够将连接改为管道方式的代理服务器。
OPTIONS请求:允许客户端查看服务器的性能。
TRACE请求:显示服务器收到的请求,主要用于测试或诊断。
请求方式
- key-value参数(query):把参数拼接在url的后面由?相连,多个参数之间用&相连。
- Json串传参:需要在请求的body写中,入Json格式参数。
创建SpringBoot测试环境
对环境的要求不高,创建SpringBoot项目的时候需要导入web、lombok、thyleleaf的依赖。
- web依赖可以将项目持续运行在服务器中,供前端或者接口测试工具进行访问
- lombok方便我们后面返回json直接使用实体类进行返回
- thymeleaf方便我们直接返回试图名称
1 |
|
创建项目
本文以接口测试
- 选择方法GET/POST
- 请求路径要输入后端端口路径(不要输入前端网址,一定要好好查看请求路径)
- 参数/头部参数/body参数(如果是token要放在Header中)
Get请求
1、无参数的请求-原始-请求页面
用来接收简单的get请求,不需要前端传递参数,此请求一般用作页面跳转,后面不对这种原始的方法进行使用。
Controller写法
比较传统的Controller请求书写方式
1 |
|
浏览器测试
接口测试
- 设置请求方式为get
- 输入url
2、无参数的请求-简略-请求页面
 
@GetMapping
注解:是@RequestMapping(method = RequestMethod.GET)
的快捷方式,专门用于处理 GET 请求。
Controller写法
1 |
|
浏览器测试
接口测试
- 设置请求方式为get
- 输入url
3、对应RequestParam注解-请求页面
RequestParam可以用来接受前端的参数,需要前端访问的时候在url加上?以连接参数
Controller写法
1 |
|
浏览器请求
接口测试
- 设置请求方式为get
- 输入url
- 设置请求参数(在query中,query中的参数和url中的参数是会同步生成的)
4、对应PathVariable注解-请求页面
PathVariable相当于用于获取 URL 中的路径变量。通常在 RESTful API 的设计中使用,可以通过 GET 请求获取指定路径的资源信息。
Controller写法
1 |
|
浏览器请求
接口测试
- 设置请求方式为get
- 输入url并将参数通过拼接在里面(注意,这里的query参数是不需要写的,在url中写了也不会被识别)
5、ResponseBody请求json
使用
@ResponseBody
注解:可以将方法的返回值直接作为响应体返回,并自动进行序列化为 JSON 数据。
Controller写法
1 |
|
浏览器请求
接口测试
6、当参数需要传入对象
当Controller的参数列表需要传入一个或者多个对象该怎么办?
事实上,我们并不需要将这几个字段的完整json传入到参数列表中,并且get请求其实也不支持我们传入json格式。我们只需要将这几个对象中,需要传入的的字段进行传入就行,传入方法就是拼接在URL后面。
实体类文件
- Page对象
1 |
|
- UnitVo对象
1 |
|
Controller写法
1 |
|
浏览器请求
接口测试
注意,此时我们不需要使用RequestBody注解,因为那是Post才能用到的。
由此我们可以进一步得出一个结论,当我们需要前端传入UnitId过来时,我们可以将参数列表设置为Unit对象就行,然后从对象中获取到id。
如果有重复属性怎么办?
如果参数列表中的两个实体类有一个相同的属性,那当我们在url中传入一个数值,两个对象的此属性都会被给到值。
Post请求
关于form-data、x-www-form-urlencoded、raw、binary的区别
https://www.jb51.net/web/804328.html
form-data(可键值对可文件)
就是http请求中的multipart/form-data
,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。当上传的字段是文件时,会有Content-Type来表名文件类型;content-disposition,用来说明字段的一些信息;
由于有boundary隔离,所以multipart/form-data既可以上传文件,也可以上传键值对,它采用了键值对的方式,所以可以上传多个文件。
x-www-form-urlencoded
就是application/x-www-from-urlencoded
,会将表单内的数据转换为键值对,比如,name=java&age = 23
raw
可以上传任意格式的文本,可以上传text、json、xml、html等。
binary
相当于Content-Type:application/octet-stream
,从字面意思得知,只可以上传二进制数据,通常用来上传文件,由于没有键值,所以,一次只能上传一个文件。
1、使用RequestParam接收表单数据
后端Post请求使用RequestParam注解可以接收前端键值对格式的表单数据,使用form-data 和 x-www-form-urlencoded测试都可以。multipart/form-data:既可以上传文件等二进制数据,也可以上传表单键值对,只是最后会转化为一条信息;x-www-form-urlencoded:只能上传键值对,并且键值对都是间隔分开的。
通常情况下,普通的表单提交默认都是x-www-form-urlencoded,form-data也是可以的;而如果是文件上传,则必须是form-data。 
- 接收表单数据:通常用于接收 HTML 表单提交的数据。Controller 方法可以直接接收表单字段作为方法参数,使用
@RequestParam
注解或不加注解即可。示例代码如下:
Controller方法
1 |
|
接口测试
此Controller方法有三种测试方法,首先将请求方法中选择POST
- 在参数(Query)中测试,将Body请求设置为none
- 将参数(Query)关闭,在body中的form-data(表单数据进行设置)
- 将参数(Query)关闭,在body中的form-data(表单数据进行设置)
为什么使用raw发送json数据不行呢?因为raw发送的是一个json对象,RequestParam接收的是键值对。
2、使用RequestBody接收JSON数据(raw-json)
使用RequestBody注解可以接收前端的JSON数据,接口测试工具可以用raw-json进行发送测试。
Controller方法
如果Controller中直接用实体类来进行接收,一定要在实体类上面使用Lombok的Data注解。
1 |
|