接口自动化:
什么是接口:
请求和响应的过程
接口测试:测试请求和响应的过程,异常容错,接口测试的重点是要检查接口参数传递的正确性,接口功能实现的正确性,输出结果的正确性,以及对各种异常情况的处理的完整性和合理性。针对软件接口的分类一般有如下几种情况:
- 系统与系统之间的调用
- 同一系统内部上层服务对下层服务的调用
接口测试的意义:
有些bug 功能测试压根测不出来(接口测试可以发现功能测试发现不了的bug)
- 功能测试(受前端页面的限制) 接口测试是直接绕开前端验证,所以可以直接测试后端逻辑是否存在问题
- 功能测试必须要在前后端联调完成之后,才可以基于页面上进行功能测试
- 接口测试只需要后端逻辑接口写完,直接通过工具或者代码进行接口测试(提前入场)
- 更早的发现问题,减少修复的成本,提高测试的效率
单元测试——接口测试——UI测试
web交互的流程(从你在浏览器上输入一个地址)
异步加载:地址没有改变,只是内容发生改变
DNS:域名系统——记录域名对应的ip地址
URL:统一资源定位 ,互联网上任意数据,都可以通过url访问到
URL的组成:
- 协议 http https ws wss ftb smtp
- 域名/ip:域名就是ip的别名,通过ip确定唯一一个服务器
- 端口:mysal 3306 服务默认端口(tomcat):8080 https协议默认端口 443 http协议默认端口 80,端口是确定唯一一个服务器,u、ip+端口——确定目标服务器上的目标服务
- 资源路径:默认 / 根路径一般就是项目的首页资源
- 参数部分:不一定必须存在,可有可无。 查询字符串参数 ? 后面接的就是查询字符串参数——格式:键=值&键2=值2&..
前四个部分一定有,没有的话就是省略了
TCP/IP模型:
应用层:HTP, HTTPS , FPP, SMTP , Websocket(ws)
传输层:TCP UDP
网络层:
TCP与UDP之间的差别:
- TCP 面向连接 存在数据校验,传输稳定,不会丢包,但是速度慢
- UDP 不面向连接 传输速度快,但是容易丢包,支持广播发送(群发)
TCP面向连接(三次握手):
四次挥手
HTTP协议:
超文本传输协议,是一个简单的请求——响应协议,它通常运行在TCP之上
特点:
- 简单,快速,灵活(支持多种请求方式),支持B/S架构,
- 无连接,在设计之初 故意为之 目的:释放内存资源,防止连接对象变多,内存爆满,,但是随着互联网时代的发展,前端样式效果越来越丰富,请求数越来越多,如果依旧无连接,会导致频繁三次握手,浪费效率,解决方案:浏览器默认在请求中的
Connection: Keep‑alive(让连接保持活跃),这样设置后,连接建立后不会立马断开,会维持 100s 左右(具体看浏览器), WS协议代替http,ws协议只建立一次连接,不关闭的话连接一直存在,ws协议是全双工通讯协议,既可以客户端主动发,也可以服务端主动发。http协议是单工通讯协议,只能由客户端主动发送,服务端被动响应。ws协议第一次连接是由http协议完成,完成之后和http协议没有任何关系。 - 无状态:每个请求互相独立,后面的请求无法知道前面请求的操作。状态保持机制:
- cookie,浏览器每次发送请求都会携带当前域名下所有的本地cookie,优点:实现状态保持,简单快速灵活。缺点:不安全,用户信息直接存储在用户本地,易劫持,用户可以认为操作删除cookie信息。
- session:随机字符串,优点:安全。缺点:多了存储读取过程,效率可能降低,用户量大的话会占用磁盘空间。
- token:加解密的过程,优点:安全。节约磁盘空间。缺点:多了加解密过程,效率可能更低。易劫持,用户可以认为操作删除cookie信息。
- 明文传输:
- http协议属于明文传输协议 相对不安全 传输效率相对较快 默认端口:80
- https 是加密协议——相对安全——多了一个加密过程,,传输效率相对较慢,默认端口:443,https需要证书认证,证书需要花钱购买
接口测试的流程:
通过抓包或者查看接口文档,确认接口信息
利用工具或者代码,模拟构建请求包(请求方式 url 请求头 请求正文)
发送请求获取响应(工具或者代码实现)
校验
fiddler的工作原理:
充当一个中间代理,网络请求先发给 fiddler ,再由 fiddler 转发给目标服务器 然后接收响应再返回给客户端
16进制显示,底层还是二进制
请求数据包:
第一部分:交代 ——请求方式 url 协议
第二部分:请求头
第三部分:空行
第四部分:请求正文
响应数据包:
第一部分:交代 —— 协议 状态码
第二部分:响应头
第三部分:空行
第四部分:响应正文
fiddler中断点的使用:篡改请求数据包,篡改返回给前端的响应数据包
请求方式: GET 和 POST
- 区别:get 表示拿去获取的意思 post 表示提交
- get 请求一般用于静态资源的获取 (css,js,png,html 等等) post 一般用于提交表单数据或者有参数条件输入框的动态请求
- 你在浏览器中输入 url 地址 默认就是 get 发送请求
- get 请求的参数直接放在 url 中 直接显示相对不安全 post 请求的参数放在请求正文 相对安全
- url 的长度存在限制所以 get 请求的参数存在长度限制 但 post 不会
- get 请求中如果存在特殊字符或者中文会被 url 编码 但是 post 不会,post 支持多种编码方式
- 浏览器只会记录 get 请求操作 不会记录 post (防止数据重复提交)
- 所以 get 可以回退前进 post 不可以
- get 请求发送一个请求数据包 post 发送两个 (post 先会将第一部分和第二部分单独发送服务器返回 100 再继续发送请求正文)
请求头:
常见头部:
Authorization:HTTP 授权的授权证书,一般请求头中出现这个需要添加
Cookie:状态保持机制,一般请求头中出现这个需要添加
Content‑Type:声明请求正文内容的类型
text/plain:纯文本格式application/json:json 格式application/x‑www‑form‑urlencoded:表单格式,form 表单数据被格式化成键=值&键2=值2&…,放到请求正文中发送到服务器multipart/form‑data:只要是文件上传必定是这种类型
User‑Agent:声明当前请求的发送设备(浏览器、操作系统、客户端版本)
状态码:
http 协议状态码:响应数据包的第一部分的状态码
- 1xx 信息类,继续:请求已接收,还要继续处理
- 2xx OK,成功:请求正常处理完成
- 3xx 重定向:需要跳转别的地址
- 4xx 客户端错误:请求有问题,是浏览器 / 请求方的错
- 5xx 服务端错误:服务器内部出错
常见协议状态码详细信息:【文档】Http状态码 - CoderMonkey - 博客园
业务状态码(是每个公司自己定义的,一般在响应正文中出现 code errorcode statuscode)