接口测试
一、接口测试——接口测试又被称为API测试
1、协议协议:http websocket Dubbo gRPC
2、接口测试的工具:PostMan,JMeter
3、接口测试的框架:
单体架构、微服务架构、面向服务架构(B/S模型)、分布式架构
4、MockServer
二、接口测试是目前所有测试人员必须掌握的技术栈
1、流量回放
2、混沌工程(混沌理论)
3、全链路监控&分布式
三、接口测试的框架
(一)单体架构的开发模式
1、定义
单体架构的模式是把前后以及所有的业务场景的代码都整合到一起
2、模式图示
(二)微服务架构
1、定义
把每个独立业务场景单独分离成一个服务,这样服务和服务之间通信通过REST API或者gRPC的协议来进行交互
2、模式图示
3、微服务的架构模式
(1)saas化:Software As A Service 软件即服务
(2)pass化:Platform As A Service 平台即服务
4、微服务的通信模式使用的方式有两种:
(1)一种是采用基于REST API的轻量级的基于HTTP的协议
(2)使用的是gRPC的协议
四、金字塔模型
测试的工作可以分为两个维度:质量管理+测试效率,API测试是提升测试效率最有利的⼀个⽅式。具体见金字塔的模型:
1、金字塔模型把开发测试的模型分为三层分别是:单元测试,接口测试,和UI测试
2、unit:单元测试;services:接口测试(API自动化测试);UI:UI测试(功能测试,ui自动化测试)
3、越底层的,越应该投入更多的精力去保障,越上层的,投入少量的精力去保障
4、在金字塔的模型中,在测试分为三个维度来进行思考,分别是:单元,服务和UI三个层级。
5、服务层的测试
在服务层的测试维度中,主要针对的是业务接口的测试,来验证接口功能是否完整且稳定,如内部逻辑,异常处理。
6、接口的测试相对而言比较容易而且更加高效,测试用例的维护成本也低。
7、有很多主流的测试工具都可以做接口测试
如PostMan,JMeter,SoupUi等,除了工具还有在Python语言中很多的第三方的库都是可以来做接口测试的,如:urllib,requests,aiohttp等。
五、数据
TCP/IP协议按层次主要为:应用层,传输层,网络层,数据链路层。
图为TCP/IP通信传输流。
(1)应用层
应用层决定了向用户提供应用服务时通信的活动。而HTTP的协议和gRPC的协议就是属于应用层的协议。
(2)传输层
应用层的下层是网络传输层,提供处于网络连接中的两台计算机之间的数据传输。核心的协议就是TCP/IP的协议,TCP/IP通信传输流
(3)网络层
主要是用来处理网络上流动的数据包,所谓数据包就是网络传输中的最小单位,在该层协议中,规范了通过怎样的路径到达目标计算机,并且把数据包传送给对方。
(4)链路层
主要是处理连接网络的硬件部分,如操作系统,硬件设备的驱动等。
六、三次握手
总结:
三次握手可以理解为:
1、服务端的确认:客户端发送数据出去,服务端需要确认我收到了
2、服务端反馈:服务端告诉客户端,你发送的数据我这边确认收到了
3、客户端确认:客户端需要向服务端再次反馈,客户端收到服务端的反馈了
七、URI和URL
URI可以称为统一资源标识符,而URL是统一资源定位符。URI可以理解为标识某一个互联网的资源,而URL表示资源的地点。HTTP协议中使⽤URI定位到互联⽹上的资源,这也是为什么互联网任意位置的资源我们都能够获取到的原因。
八、REST API
三个语言开发,但是需要之间需要通信,需要数据传输,标准化就是REST API 使用统一的标准来进行交互。
1、Java:企业级开发领域具备非常强大的生命力,开发的技术栈非常完善,其中阿里的生态开发语言基本是Java
2、Python:数据分析,数据科学领域非常具备优势
3、Go:容器化的语言,应用在Docker和K8S的开发
4、PHP:轻量级的语言
5、Net:微软系列
九、协议 web1.0 web2.0 移动互联网
HTTP:超文本传输协议,应用层协议;
最新版本HTTP/2.0(gRPC协议基于HTTP/2.0的版本来进行设计)。但广泛使用是HTTP/1.1。
如图所示,发送Requests的步骤:
1、请求地址
2、请求方法
3、请求头
4、请求参数(可能有,也可能没有)
而Response回复为:
1、协议状态码
2、响应数据
3、响应头
如图所示:
十、通信模式
1、异步通信
客户端和服务端不需要关注对方的存在,只需关注对应的MQ的消息。对于耗时操作,异步模式会在开启任务过后就立即往后执行下一个任务,对耗时操作的后续逻辑一般会通过回调函数的方式定义耗时任务执行完毕就会自动执行回调函数中的处理。
2、同步通信
客户端发送请求给服务端,服务端必回应客户端请求,易超时后一个任务必须等待前一个任务结束才能够开始执行,如果请求是存在大计算量和逻辑存在问题,就会导致请求堵塞。
注:
在微服务的架构模式下,使用的也是轻量级的通信模式(REST API),在微服务的架构模式中,需要清楚的是它的通信可以分为同步通信模式和异步通信模式, 或者更加具体本质的说就是请求/响应和异步请求/响应(发布/订阅模式)
即MQ:RabbitMQ,Kafka(linkyin),ActivityMQ(alibaba)
所有的 MQ 都可以说是队列机制(遵守先进先出的规则),也可以说是生产者消费者的模式。
生产者消费者模式:生产后,基于进行快速的消费。
十一、请求头/响应头
(一)请求
HTTP协议中常用的请求方法有4种:
1、GET:客户端从服务端获取资源
2、POST:客户端往服务端发送请求添加新的资源
3、PUT:客户端针对服务端已有的数据进行更新
4、DELETE:客户端删除服务端已有的数据
下图为所有的请求方法:
由于PUT和DELETE请求方法不安全,所以了很多时候,往往会使用POST来进行替代。
(二)响应
1、响应数据:响应数据返回的数据格式是由响应头里面的content-type来决定的
2、响应头(response headers)
content-type:指明返回的响应数据的数据格式是什么
set-cookie:服务端返回给客户端的登录凭证
其中:
Content-Type:指的是数据格式
Cookie:反爬虫,身份凭证
Referer:发送请求的地址是从哪里来的
User-Agent:发送网络请求的时候向服务端标注请求是通过什么浏览器
或者什么软件(PostMan,JMeter)发送的。
十二、请求参数
请求头中的数据格式决定了请求参数的格式
(一)常⽤请求数据格式
1、表单 application/x-www-form-urlencoded; charset=UTF-8(GBK)
2、json格式:application/json;charset=UTF-8
json数据格式:基于JSON的数据格式,但是数据类型是字符串
3、text/html :返回的是基于html的数据格式
4、text/xml:返回的是基于xml的数据格式
(二)cookie、session、tokeon请求
(1)cookie:主要是存储用户操作行为的数据,在早期的互联网产品中,用户登录系统的凭证都是由cookie来进行记录的,但是由于是存储在客户端的(本机的电脑),所以是不安全的,
基本目前登录认证的凭证不会再使用cookie的技术了。
(2)session:由于cookie是存储在客户端的,它不安全,所以session是把登录成功后的数据存储在服务端。
session流程:
一、客户端输入账户和密码,点击登录;
二、登录成功后,会在服务端把用户登录成功后的信息生成一个sessionid的凭证,并且存
储在服务端;
三、然后服务端通过响应头中的set-cookie把生成的sessionid返回给客户端;
四、客户端再次查看个人主页,客户端会通过请求头中的cookie,把set-cookie返回的
sessionid带上,发送给服务端;
五、服务端接收到客户端发送的sessionid,和存储在服务端的session ID作一个对比;
六、如果对比一致,用户可以继续反问系统的任何功能,如果对不一致,立刻跳转到登录的页面。
(3)token:本质上是session的原理,我们可以把它理解为一个令牌,每次登录成功后,返回的token都是随机的字符串 jwt的技术来实现。
token流程:
一、客户端输入账户和密码,点击登录;
二、登录成功后,会在服务端把用户登录成功后的信息生成一个Token的凭证,同时了存储
在服务端;
三、服务端会通过响应数据或者是响应头中的set-cookie返回给客户端;
四、那么客户端再次向服务端发送请求,会在请求参数或者请求头中的Authuration中带上
返回来的token发送给服务端;
五、服务端接收到客户端发送的Token,和存储在服务端的Token作一个对比;
六、如果对比一致,用户可以继续反问系统的任何功能,如果对不一致,立刻跳转到登录的页面。
十三、常⽤状态码
当客户端向服务端发送⼀个请求后,服务端响应回复返回给客户端,在返回的信息中会包含⼀个HTTP请求头的状态码信息⽤以响应客户端的请求。
在⽹站https://http.cat中可以看⻅各个不同表情的状态码的显示,如调⽤https://http.cat/504就会显示如下对应的信息。常⽤的状态码具体为:
200 请求成功
301 永久重定向
302 临时重定项
400 Bad Request 客户端请求错误
401 Unauthorized ⽆权限访问该系统
403 Forbidden 有权限但是禁⽌访问
404 请求的资源不存在
405 不被允许的请求⽅法
500 服务器内部错误
504 GateWay Timeout
十四、常用的数据格式
(1)表单格式:application/x-www-form-urlencoded; charset=UTF-8;
(2)json格式:application/json;charset=UTF-8 json数据格式:基于JSON的数据格式,但是数据类型是字符串;
(3)text/html格式 :返回的是基于html的数据格式;
(4)text/xml:返回的是基于xml的数据格式。
十五、HTTPS协议
(一)HTTP协议的缺陷,这些缺陷主要为:
1、通信内容是明文,内容很可能被第三方获取到;
2、不验证通信方的身份信息,容易被伪装;
3、无法证明请求头的完整性;
(二)HTTPS协议
由于HTTP存在上述缺陷,也就有了HTTPS的协议,我们可以把HTTPS可以汇总为:HTTPS=HTTP+加密+认证+完 整性保护。基于这样一层的设计,相对来说TPS还是比较安全的,HTTPS不是全
新的协议,它只是HTTP的协议基础上新增SSL和 TLS。在前面中我们知道HTTP是和TCP直接通信,那么在HTTPS中,HTTP先和SSL通信,SSL再和TCP来进行通信。HTTPS也并不是最最安全
的,最典型的就是2016年发生的心脏流血事件。
(三)HTTP认证体系
HTTP认证体系 HTTP/1.1版本中,使用的认证方式具体为:BASIC认证,也就是基本认证 DIGEST认证,也就是摘要认证 SSL客户端认证 FormBase认证,也就是基于表单的认证。
1、BASIC(基本认证)
基本认证采用Base-64编码方式,但是不是加密的处理方式。不需要附加任何信息可对其进行解码,那么在HTTP等非加密通信的线路上进行BSCIC认证的过程中,很容易被人进行获取信息,安
全体系不够高。
2、DIGEST(摘要认证)
DIGEST的认证体系是为了解决BASIC的缺陷之一的,它也是采用质询/响应的模式,但是不会直接发送明文密码。 所谓质询/响应模式指的是一开始一方先发送认证要求给另外一方,接着使用从
另一方那接收到的质询码计算生成响应码,最后将响应码返回给对方进行认证的方式。
3、ssL客户端认证
事先需要把客户端证书分发给客户端,且客户端必须安装此证书。
4、FormBase认证
就是基于表单认证。