【接口测试】
一、接口测试工具
1、postman
postman官方下载地址:
https://www.postman.com/downloads
2、charles
1)charles下载地址
charles官方下载地址:
https://www.charlesproxy.com/
学社下载地址:
https://download.ceshiren.com/charles/
2)charles功能
- 支持 SSL 代理
- 支持流量控制
- 支持重发网络请求,方便后端调试
- 支持修改网络请求参数
- 支持网络请求的截获并动态修改
- 可以自动将 json 或 xml 数据格式化,方便查看
3、fiddler
Fiddler 是位于客户端和服务器端的 HTTP 代理
也是目前最常用的 HTTP 抓包工具之一
1)fiddler下载地址
fiddler官方下载地址:
https://www.telerik.com/fiddler/fiddler-classic
2)fiddler功能
- 监控流量
- 支持解密 HTTPS
- 查看分析接口数据
- 修改请求的数据
- 修改服务器返回的数据
- 设置断点
二、接口自动化测试
1、分层测试理论:
UI测试(测试成本最高,发现BUG时间最晚)
接口测试
单元测试
2、协议分析工具
1)网络监听
TcpDump + Wireshark
2)协议客户端工具
curl、postman
3)代理Proxy
推荐工具:手工测试charles【全平台】、安全测试burpsuite【全平台java】
自动化测试:mitmproxy
其他代理:fiddler【仅windows】、Anyproxy【全平台】
3、常见的接口协议
1)HTTP协议
端口号:80
(1)HTTP请求报文:
请求行:method url protocol
eg.
GET /uploads/user/avatar/31438/8216a3.jpg HTTP/1.1
请求方法:GET、POST、PUT、DELETE、HEAD
请求头:Host Cookie User-Agent
包括:
host: 主机和端口号。 eg.www.baidu.com
Connection: 客户端与服务 端之间的链接类型。 eg. 常见的keep-alive,表示长连接,一次信息发完不会立刻关闭TCP链接,还可以继续发送内容。
User-Agent: 客户端类型
Accept: 传输文件类型。eg. image表示让服务器知道自己需要发图片。
Referer: 追踪页面跳转。看看我的访问是从哪个网站来的,或者统计网站流量
Application-Encoding: 文件编解码方式。指出客户端接受的解码方式。
Accept-Language: 指出客户端接受的语言种类
Cookie: 记录和服务器相关的一些用户信息
请求参数: 拼接在URL中
请求体:JSON XML FORM
(2)HTTP响应报文:
响应状态行:
HTTP版本 响应码。 eg. HTTP/1.1 200 OK
响应头:
connection: 链接类型
content-type: 实际发送的数据格式。 eg. image/png
date: 响应是什么时候发送出去的
Server: 服务器本身的额信息
Transfer-Encoding: 数据传输的方式。 eg.分段传输方式
keep-alive: 可以规定长连接的连接过期时间
响应体:
服务端返回给客户端的内容。body 是我们很关注的内容
HTTP响应状态码:
1xx:临时响应,表示通知信息,请求收到了或正在进行处理
2xx:成功,接受或知道了
200OK
3xx:重定向,
301永久移动
302临时移动
4xx:表示客户端请求错误
403未授权
404未找到
5xx:服务器错误
500服务器内部错误
503服务不可用
URI 和 URL
URI:统一资源标识符,标识资源
URL:统一资源定位符,定位资源
eg.
URL
https://www.baidu.com/s?tn=baidu&wd=接口测试
协议https
域名www.baidu.com
端口跟在域名后面,域名和端口之间使用":"作为分隔符,非必须,如果省略端口部分都将采用默认端口
路径/s,即资源在服务器www.baidu.com的哪个路径下
请求参数tn=baidu&wd=接口测试
2)HTTPS协议
端口号:443
RESTful架构
URL定位资源
用请求方法实现资源的状态切换:
GET: 获取资源
POST: 新增或更新
PUT: 更新
DELETE: 删除
4、JSONPath语法
$ 查询根节点对象,用于表示一个json数据,可以时数组或对象
@ 过滤器处理的当前节点对象
* 获取所有节点
. 获取子节点
.. 递归搜索,搜索所有符合条件的节点
?() 过滤器表达式,筛选操作
[start:end] 数组片段,区间为[start,end),不包含end
[A]或[A,B] 迭代器下标,表示一个或多个数组下标