1、接口测试的技术栈
(1)协议 HTTP、websocket、Dubbo、gRPC;
(2)接口测试的工具:PostMan,JMeter;
(3)接口测试的框架;
(4)MockServer;
2、 接口测试是目前所有测试人员必须掌握的技术栈
(1)流量回放;
(2)混沌工程(混沌理论);
(3)全链路监控&分布式;
3、接口测试的发展历程
(1)2016年,前后端分离开发模式在企业全面落地;如youyuxi. VUE
(2)2019年之后,UI
A.走向了API的自动化测试;
B.开发模式的彻底;
(3)2021年:
A.走向了API的自动化测试
B.开发模式的彻底
C.微服务的架构通信模式
4、接口测试(又称为API测试)的开发模式
主流的架构:单体架构 (单体架构发展到SOA面向服务的架构)、分布式的架构、微服务架构
(1)单体架构的开发模式:单体架构的模式是把前后以及所有的业务场景的代码都整合到一起,其模式如图(如电路的串联):
如:图书管理系统:
业务场景:大家看到自己喜欢的书,然后下单,支付,购买;
业务模块:书籍管理、支付模块、账户模块、物流模块。
(2)微服务架构模式:微服务架构就是根据业务场景,把每个独立的业务场景单独分离成一个服务,这样服务和服务之间通信,通信通过REST API 或者gRPC的协议来进行交互,其模式如图:
如:电路的并联。
(3)常规开发模式中接口测试的流程:
A.开发同学:
一、前端程序员把代码写完,后端程序员把代码写完;
二、前端和后端进行联调(前端把输入的账户和密码拿到,然后发送给(HTTP的协议)后端);
三、后端拿到前端发送的数据进行验证;
Element是一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库,其网址如下:
https://element.eleme.cn/#/zh-CN/component/input
B.测试同学:
一、验证这个过程中业务逻辑是否能够成功;
5、金字塔模型
在金字塔的模型中,测试分为三个维度来进行思考,分别是单元,服务和UI三个层级。
服务层的测试,在服务层的测试维度中,主要针对的是业务接口的测试,来验证接口功能是否完整,如内部逻辑,异常处理。这样的目的是验证接口它是否稳定,所以接口的测试相对而言比较容易而且更加高效。测试用例的维护成本也低。
有很多主流的测试工具都可以做接口测试,如PostMan,JMeter,SoupUi等,除了工具还有在Python语言中很多的第三方的库都是可以来做接口测试的,如:urllib,requests,aiohttp等。
在金字塔的模型中:
(1)金字塔模型把开发测试的模型分为三层,分别是单元测试、接口测试、和UI测试;
(2)unit:单元测试 services:接口测试(API自动化测试) UI:UI测试(功能测试、UI自动化测试);
(3)越底层的,越应该投入更多的精力去保障,越上层的,投入少量的精力去保障。
6、微服务构架
(1)微服务构架模式
saas化:Software As A Service 软件即服务;
pass化:Platform As A Service 平台即服务。
(2)微服务的架构通信模式
微服务的通信模式使用的方式有两种:
A.采用基于REST API(交互模式)的轻量级的基于HTTP的协议;
B.使用的是gRPC的协议。
7、协议(HTTP、websocket、gRPC)
HTTP即“超文本传输协议”诞生了 :web1.0、 web2.0 、移动互联网。
(1)版本(HTTP)
A.目前业界使用的主流的版本是1997年发布的HTTP/1.1的版本;
B.目前HTTP最新的版本是:HTTP/2.0(gRPC的协议就是基于HTTP/2.0的版本来进行设计的) 但是业界使用的版本是HTTP/1.1。
(2)网络分层
TCP/IP分层管理:TCP/IP协议按层次主要为:应用层,传输层,网络层,数据链路层。
A.应用层
应用层决定了向用户提供应用服务时通信的活动。而HTTP的协议和gRPC的协议就是属于应用层的协议。
B.传输层
应用层的下层是网络传输层,提供处于网络连接中的两台计算机之间的数据传输,传输层UR核心的协议就是TCP/IP的协议。
C.网络层
主要是用来处理网络上流动的数据包,所谓数据包就是网络传输中的最小单位,在该层协议中,规范了通过怎样的路径到达目标计算机,并且把数据包传送给对方。
D.链路层
主要是处理连接网络的硬件部分,如操作系统,硬件设备的驱动等。
(3)websocket协议(auth2.0):客户端与服务端始终保持持久连接不会断开。
物联网:互联网技术的深度发展,互联网使用的协议都是websocket的协议
如:微信
客户端:手机微信、电脑微信,都是客户端;
服务端:腾讯的微信服务器。
(4)TCP/IP通信传输流过程图:
(5)三次握手
三次握手的意义:应用层的协议是为了上层应用之间的交互,但是不需要关注底层网络传输层之间的事情,所以为了数据传输的安全和保障,就设计了三次握手。
如何理解三次握手:
A,第一次握手即服务端的确认:客户端发送数据出去,服务端需要确认我收到了;
B.第二次握手即服务端反馈:服务端告诉客户端,你发送的数据我这边确认收到了;
C.第三次握手即客户端确认:客户端需要向服务端再次反馈,客户端收到服务端的反馈了。
(6)URL和URI
URI可以称为统一资源标识符,而URL是统一资源定位符。URI可以理解为标识某一个互联网的资源,而URL表示的资源的地点。
8、HTTP协议(是应用层的协议)协议本质上就是双方说的话彼此都可以理解(双方指客户端和服务端)
(1)在微服务的架构模式下,使用的也是轻量级的通信模式(REST API),在微服务的架构模式中,需要清楚的是它的通信可以分为同步通信模式和异步通信模式, 或者更加具体本质的说就是请
求/响应和异步请求/响应(发布/订阅模式)。
(2)REST API
A.Java:企业级开发领域具备非常强大的生命力,开发的技术栈非常完善,其中阿里的生态开发语言基本是Java
B.Python:数据分析,数据科学领域非常具备优势
C.Go:容器化的语言,应用在Docker和K8S的开发
D.PHP:轻量级的语言
E.Net:微软系列
场景:如果一个公司用三个语言开发,但是语言之间需要通信,需要数据传输,标准化就是REST API ,使用统一的标准来进行交互。
(3)HTTP完整的请求流程:
简要描述:第一步:客户端与服务端建立TCP连接;
第二步:客户端向服务端发送requst请求;
第三步:服务端response客户端响应回复给客户端;
第四步:客户端与服务端关闭请求。
发送Requests请求包括:请求地址、请求方法、请求头、请求参数(可能有,也可能没有)。
Response回复包括:协议状态码、响应数据、响应头。
(4)持久连接(websocket协议)
在HTTP/1.0版本开始以及后面的版本中,有了持久连接,也就是keep-alive, 它的特点是只要客户端或者是服务端没有明确断开连接,那么就得一直保持TCP的连接请求,持久连接减少了TCP 连
接的重复连接和断开造成的性能损耗,减轻了服务端的负载,也提升了整体相求响应时间的性能。
(5)gRPC协议:流式(stream)的数据
9、通信模式
(1)同步通信:客户端发送请求给服务端,服务端必须得回应客户端的请求。同步通信又可以说是请求/响应的模式。
存在问题:
A.容易超时,客户端发送请求后,服务端迟迟没有回应客户端的请求;
B.如果请求是存在大的计算量和逻辑存在问题,就会导致请求堵塞,后面的都积压同步通信又可以说是请求/响应的模式
(2)异步通信:在异步的交互中,客户端和服务端互相不需要关注对方的存在,只需要关注对应的MQ的消息,客户端与服务端的交互主要是会通过MQ的消息中间间作为消息的传递来进行交
互的。(三大主流核心的MQ:RabbitMQ,Kafka(linkyin),ActivityMQ(alibaba)),所有的MQ都可以说是队列机制,也可以说是生产者消费者的模式。所谓队列机制,遵守先进先出的规则。生产者
消费者模式:生产后可以进行快速的消费。
场景:如下载500MB的文件,下载需要半小时,要求下载期间可以进行做其他事情,通信模式是属于异步请求。