一、接口测试概念
①接口:不同的系统之间相互连接的部分,是一个传递数据的通道
②接口测试:检查数据的交换、传递和控制管理过程
二、常见的接口协议
1、网络模型
(1)OSI七层模型:
最基本的网络模型,设计非常完善,国际标准化组织提出来的网络模型。定义计算机或是通信系统之间互连的标准体系。
从上到下每一层完成各自的特定功能,且为上一层提供服务,且使用下一层提供的服务。
1)物理层:二进制数据形式,在物理媒介上进行传输数据,解决两个硬件之间怎么通信的问题
2)数据链路层:传输有地址的真,提供了错误检测的功能,物理层通过物理媒介发送一些数据,但是数据是否是对的,物理层无法验证,数据链路层提供一个纠错的功能,确保传输的数据是可靠的
3)网络层:为数据包选择路由。计算机网络中如果有多台计算机,怎么找到要发的那台?如果中间有多个节点,怎么选择路径?这就是路由要做的事。
4)传输层:提供端对端的接口协议,当发送大量数据时,很可能会出现丢包的情况,另一台电脑要告诉是否完整接收到全部的包。如果缺了,就告诉丢了哪些包,然后再发一次,直至全部接收为止。简单来说,传输层的主要功能就是:监控数据传输服务的质量,保证报文的正确传输。
5)会话层:建立或解除与别的接口的联系,虽然已经可以实现给正确的计算机,发送正确的封装过后的信息了。但我们总不可能每次都要调用传输层协议去打包,然后再调用IP协议去找路由,所以我们要建立一个自动收发包,自动寻址的功能。于是会话层出现了:它的作用就是建立和管理应用程序之间的通信。
6)表示层:进行一些代码转换、数据格式化、数据加密等操作,有了会话层之后,可以保证程序可以自动收发包和寻址了,但不同系统之间发送数据,语法会有不一样,表示层解决不同系统之间但通信语法转换,负责数据格式的转换,将应用处理的信息转换为适合网络传输的格式,或者将来自下一层的数据转换为上层能处理的格式
7)应用层:提供具体的服务,文件传输服务、电子邮件服务等;应用层是计算机用户,以及各种应用程序和网络之间的接口,其功能是直接向用户提供服务,完成用户希望在网络上完成的各种工作。前端同学对应用层肯定是最熟悉的。
(2)TCP/IP四层模型:
1)网络接口层:负责数据在主机与网络之间传输的交换
2)网络层:解决主机到主机的通信问题
3)传输层:提供端到端的通信功能,保证数据包的顺序和数据完整性
4)应用层:为用户提供各种所需要的具体服务
(3)TCP/IP协议栈
是TCP/IP四层模型所使用的具体网络协议,只要用到寻址,网络层大多数都是使用IP协议;传输层:TCP面向连接的,UDP是不需要建立连接
(4)五层体系结构:
物理层传输的是比特流,数据链路层传输帧,网络层是包,传输层是段
2、常见接口协议
1)LAN:局域网,分布相对比较小的区域,用户之间可以进行相互理解、共享数据,共享设备,几个局域网通过物理介质或无线电连接在一起之后就变成广域网
20WAN:广域网
3)IP:IP协议把所有的网络连接起来,为了网络互连通信而设计的协议。能让所有能连到网上的设备实现同样的一套规则,只要遵循这个规则,就可以和网络上的设备进行通信。网络当中所有的设备都有一个唯一的地址,即IP地址,通过二进制数字进行表示。
4)TCP:面向连接的、可靠的、基于字节流的传输层的通信协议,工作方式:建立连接时进行三次握手,断开连接时进行四次挥手
5)UDP:不需要建立连接,比较适合于传输一些实时性要求较高的场景,如语音传输或视频,中间丢失了一点也不影响,如卡顿,丢帧等
6)FTP:文件传输协议,传输文件,可以消除不同系统下文件的不兼容性
7)HTTP:超文本的传输协议,最基本的客户端和服务端之间采用的http协议,客户端发送请求,服务端响应
8)SMTP:邮件传输协议
9)DNS:域名解析协议,可以把域名转为IP地址的服务
10)TFTP:简单文件传输协议,只支持文件传输,不支持交互,代码占内存比较小,传输速度快
3、RPC 协议(Remote Procedure Call)
1)以本地代码调用的方式实现远程执行
2)主要用于公司内部的服务调用
3)优点:传输效率更高、性能损耗更低、自带负载均衡策略、更好的服务治理能力
4)常见的 RPC 协议
①Dubbo:Java 基础之上的高性能 RPC 协议
②gRPC:高性能通用 RPC 框架,基于 Protocol Buffers。PB 是一个语言中立、平台中立的数据序列化框架
③Thrift:与 gRPC 类似的多语言 RPC 框架
4、HTTP 协议
安全性不是很好,所以延伸了https协议,大部分都是用https协议,在http协议的基础上加入了安全协议,http协议默认端口是80,https协议默认端口是443
1)请求
①请求行:包含了请求方法method,URL 和协议版本protocol
②请求方法:GET、POST、PUT、DELETE、HEAD
③请求头: Host Cookie User-Agent
④请求参数 query
⑤请求体:JSON XML FORM
2)响应:
①响应状态行
②响应头
③响应体
5、URI 和 URL
1)URI,统一资源标识符,用来唯一的标识一个资源。用来传输数据建立连接。
2)URL,统一资源定位符,它是一种具体的 URI
3)URL 结构:https://www.baidu.com/s?wd=霍格沃兹&rsv_spt=1
①协议:http
②://作为分割
③域名:www.baidu.com
④端口:跟在域名后面,域名和端口之间使用“:”作为分隔符,非必须,如果省略端口部分将采用默认端口
⑤路径:/s
⑥请求参数:wd=name&rsv_spt=**1
6、HTTP 请求报文
例如:
#请求行
> GET /uploads/user/avatar/31438/8216a3.jpg HTTP/1.1
#主机地址
> Host: ceshiren.com
> Accept-Encoding: deflate, gzip
#客户端和服务端之间端连接类型(常见端keep-alive:长链接,保持一个连接状态,一次信息发完之后不会立马关闭连接,还可以继续发送)
> Connection: keep-alive
> Pragma: no-cache
> Cache-Control: no-cache
#谁发出去的请求,什么系统的什么类型的服务器发送的请求
> User-Agent: Mozilla/5.0
(Macintosh; Intel Mac OS X 10_15_0)
AppleWebKit/537.36
(KHTML, like Gecko)
Chrome/80.0.3987.116 Safari/537.36
> Accept: image/webp,image/apng,image/*,*/*;q=0.8
> Referer: https://ceshiren.com/
> Accept-Language: en,zh-CN;q=0.9,zh;q=0.8
> Cookie: user_id=xx;
_homeland_session=xx;
>
7、HTTP 响应报文
例如:
< HTTP/1.1 200 OK
< Server: nginx/1.10.2
< Date: Thu, 12 Mar 2020 09:13:44 GMT
< Content-Type: image/png
< Content-Length: 11390
< Connection: keep-alive
8、HTTP 响应状态码
1)1xx 临时响应,表示通知信息,请求收到了或正在进行处理
2)2xx 表示成功,接受或知道了
①200 成功
3)3xx 表示重定向,要完成请求还必须才去进一步的行动
①301 永久移动
②302 临时移动
4)4xx 表示客户端请求错误
①403 未授权
②404 未找到
5)5xx 表示服务端错误
①500 服务器内部错误
②503 服务不可用
9、RESTful 架构(Representational State Transfer)
一个系统中有很多接口,如果接口之间的交互没有统一的规则,接口的形式就会很复杂,可维护性就会很差,所以大部分使用的标准规则是RESTful 架构。它只是一个理念,设计规范,并不是一种协议,只是一种规范,在http协议基础之上去制定的一种资源请求操作的风格。
1)借助于 HTTP 协议的基本请求方法代表资源的状态切换
①GET:获取资源
②POST:新增或者更新
③PUT:更新资源
④DELETE:删除资源
三、接口测试用例设计
1、接口测试流程
2、接口测试用例设计思路
3、接口测试用例要素
①用例名称
②接口地址
③请求方式
④前置条件
⑤请求头部
⑥请求参数
⑦响应状态码
⑧预期响应结果
四、postman 基础使用
1、Postman 介绍
①快速构建请求
②提供响应结果的比较功能
③查看测试结果
④批量运行
⑤设置环境变量
2、Postman 使用
(1)发送 GET 请求
1)新建请求
2)填写请求方式:GET
3)填写请求 URL:
https://ceshiren.com/
https://httpbin.ceshiren.com/get
4)填写请求参数: para_key = para_value
(2)发送 POST 请求
1)请求方式:POST
2)请求 URL:https://httpbin.ceshiren.com/post
3)请求参数
FORM 格式:Body –> form-data
JSON 格式:Body –> raw –> JSON
文件格式:Body –> form-data –> File
(3)查看接口响应
1)响应体
2)响应头
3)响应状态
(4)操作头信息
1)添加请求头
2)修改请求头
五、postman 实战
1、Postman 完成接口测试
1)创建测试集
2)编写断言
3)运行测试集
4)查看测试结果
2、断言
1)验证响应状态码
2)验证响应体中是否包含某个字符串
3)验证 JSON 中的某个值是否等于预期的值
4)验证响应体是否与某个字符串完全相同
5)验证响应头信息中的 Content-Type 是否存在
6)验证响应时间是否小于某个值
// Test断言js脚本
/ Status Code:Code is 200
// 验证响应状态码
pm.test("响应状态码为 200", function () {
pm.response.to.have.status(200);
});
// Response Body:contains string
// 验证响应体中是否包含某个字符串
pm.test("响应体中包含预期的字符串", function () {
pm.expect(pm.response.text()).to.include("doggie");
});
// Response Body:JSON value check
// 验证 JSON 中的某个值是否等于预期的值
pm.test("宠物名称为 doggie", function () {
var jsonData = pm.response.json();
pm.expect(jsonData[0].name).to.eql("doggie");
});
// Response Body:Is equal to a string
// 验证响应体是否与某个字符串完全相同
pm.test("响应体正确", function () {
pm.response.to.have.body("response_body_string");
});
// Response Body:Content-Type header check
// 验证响应头信息中的 Content-Type 是否存在
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type");
});
// Response time is less than 200ms
// 验证响应时间是否小于某个值
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});
3、运行测试集
(1)测试集页面 → Run 按钮
(2)查看测试结果
4、变量
(1)Postman 中变量的种类与作用域
1)Data:在测试集中上传的数据
2)Environment:环境范围
3)Collection:集合范围
4)Global:全局范围
5)Local:在脚本中设置的变量
(2)变量定义
1)全局变量:Environments -> Globals
2)测试集变量:测试集页面 -> Variables
3)环境变量:Environments -> +
(3)变量的使用
1)请求 URL, Params 参数或 Body 表格或JSON/XML 文本中通过 {{变量名}} 使用
2)在 Pre-request Script 和 Tests 脚本中使用封装好的语句获取或者设置对应变量
// 获取全局变量
var status = pm.globals.get("status");
// 输入到控制台
console.log(status)
// 获取测试集变量
var petId = pm.collectionVariables.get("petId");
// 获取环境变量
var url = pm.environment.get("baseURL");
// 设置全局变量
pm.globals.set("status", "sold");
// 设置测试集变量
pm.collectionVariables.set("petId", 0);
// 设置环境变量
pm.environment.set("baseURL", "");
(4)变量的优先级
优先级从高至低为:Data -> Enviroment -> Collection -> Global -> Local
六、抓包工具charles
1、工具介绍
1)支持 SSL 代理
2)支持流量控制
3)支持重发网络请求,方便后端调试
4)支持修改网络请求参数
5)支持网络请求的截获并动态修改
6)可以自动将 json 或 xml 数据格式化,方便查看
2、安装
Charles 官网:https://www.charlesproxy.com/
七、抓包工具fiddler
1、工具介绍
1)官网:https://www.telerik.com/fiddler/fiddler-classic
2)Fiddler 是位于客户端和服务器端的 HTTP 代理
3)也是目前最常用的 HTTP 抓包工具之一
4)功能
①监控流量
②支持解密 HTTPS
③查看分析接口数据
④修改请求的数据
⑤修改服务器返回的数据
⑥设置断点
2、界面简介
1)菜单栏
2)工具栏
3)Session 面板
4)详情和数据统计面板
5)状态栏
3、抓取 HTTP 请求
1)设置:Tools -> Options -> Connections
2)确认抓包端口:默认为 8888
3)默认勾选 Act as system proxy on startup
session面板介绍:
4、抓取 HTTPS 请求
1)Tools -> Fiddler Options -> HTTPS
2)勾选 Decrypt HTTPS Traffic
3)弹出安装证书弹窗 -> 选择【Yes】-> 点击 【Yes】安装证书
4)点击 Actions -> Open Windows Certificate Manager 查看证书
5、抓取移动端请求
1)Tools -> Fiddler Options -> Connections
2)勾选 Allow remote computers to connect
3)移动端与电脑处于同一网络
4)移动端配置网络代理
①代理服务器主机:电脑IP
②代理服务器端口:8888
5)浏览器输入 http://电脑ip:8888 下载 Fiddler 证书进行安装
6、查看接口信息
1)Statistic:性能与统计数据
2)Inspectors:请求和响应数据
3)Filter:制定过滤规则
4)Composer:编辑发出请求
7、AutoResponder
1)拦截某一请求,并重定向到本地的资源,或者使用 Fiddler 的内置响应
2)用于调试服务器端代码而无需修改服务器端的代码和配置
8、断点
1)菜单栏 -> Rules -> Automatic Breakpoints ->选择断点方式
2)状态栏点击
①请求前断点:向上箭头
②响应后断点:向下箭头
3)命令行下输入
①请求前断点:bpu xxx
②响应后断点:bpafter xxx
9、弱网
1)菜单栏 -> Rules -> Performance -> Simulate Modem Speeds
2)修改网络配置参数
①菜单栏 -> Rules -> Customize Rules…
②搜索关键词 simulate
③修改延迟时间
八、抓包工具证书配置
1、Charles 基础设置
2、电脑证书配置
3、Mac 系统安装证书
4、Windows 系统安装证书
5、Charles 端设置 ssl
6、移动端代理配置
1)设备和电脑处于同一 WIFI(模拟器不需要配置)
2)移动端网络设置
①服务器 ip 地址
②设置端口
3)安装证书
①系统浏览器访问 chls.pro/ssl
②iOS:描述文件中安装证书
③iOS:信任证书
7、注意事项
1)Android 6 以上的系统 app 默认不信任抓包证书
①需要开发修改代码
②大部分测试 app 安装包默认打开状态
2)iPhone 10 系统以上需要在 设置->通用->关于本机->证书信任设置 中打开信任开关
九、弱网测试
1、什么是弱网测试
1)按照移动的特性,一般应用低于 3G、弱信号的 Wifi 可以划分为弱网
2)弱网测试是健壮性测试的重要部分,对移动端测试必不可少
3)弱网测试主要进行弱网状态下的功能测试,同时关注用户体验
2、弱网问题:
封闭环境,网速降低:丢包、数据无法加载、消息更新不及时等
3、使用 Charles 完成弱网测试
1)带宽
2)丢包
3)延迟
字段解释:
①带宽(Bandwidth):理论网速上限
②利用率(Utilization):总带宽的百分比
③请求往返延迟(Round-trip Latency):客户端和服务器第一次往返通信的延迟,单位毫秒
④最大传输单元(MTU):传输的TCP数据包的最大尺寸
⑤可靠性(Reliability):衡量连接完全失败的可能性