wangwt123

接口(API)测试(一)

一、金字塔模型

测试的工作可以分为两个维度:质量管理+测试效率,API测试是提升测试效率最有利的⼀个方式。具体见金字塔的模型:

1、从软件测试经济学解释:越底层的需要投入更多的精力和时间去做,越上层会投入少量的精力去做。

2、从测试效率解释: API测试效率很高的,执行是按毫秒、秒来计算的,而UI层执行效率是很慢的,执行是按秒来计算的。

在金字塔的模型中,测试分为三个维度来进行思考,分别是单元,服务和UI三个层级。

UI:UI自动化测试,功能测试。

Service:API自动化测试,服务端测试开发领域。

Unit:单元测试(业内做的很少),代码级别的测试,最底层的测试。

服务端测试领域有:

混沌工程:(Netfix和阿里巴巴)(通过科学试验的手段技术来模拟生产环境中出现故障后的技术解决方案)

流量回放:(把线上所有的请求在线下执行)

精准测试:(开发修改了哪些代码,测试这边很准确的知道修改了哪些代码,以及自动化的验证这些被修改的代码)

二、协议

于1989年的3月份,诞生了HTTP的协议,HTTP协议,也可以称呼为“超文本传输协议”。

分布式架构/微服务架构(SAAS/PAAS)交互的方式(微服务主流的协议):

a、HTTP的协议来进行交互(轻量级的REST API的协议来进行交互的);

b、gRPC的远程过程调用来进行交互的。

其中:

SAAS:software as a service 软件即服务

PAAS:platform as a service 平台即服务

1、HTTP协议

1-1、使用HTTP协议原因

目前企业使用的几乎都是前后端分离的开发的模式,而这种模式需要前端和后端通过HTTP的协议来进行交互,这是一种新的开发模式。

对于前端(客户端):

一般前端通过VUE&React组件来和后端来进行交互的。(前端的技术栈:VUE&React)

对于后端(服务端):

一般后端主流的开发语言:Java、Python、Go等。

举例说明:

eg1:以拉勾网为例

如何让用户拿到想要的数据反馈?

step1:WEB/APP/PAD前端发送请求到后端(拉钩网的服务器);

step2:服务器把招聘的数据返回过来;

step3:最后前端拿到返回来的数据,展示在WEB/APP/PAD等上。

erg2:以一码通为例

step1:我们拿出客户端(手机),扫描二维码;

step2:服务端(XX大数据中心)把扫描的结果信息返回给客户端(手机);

step3:客户端(手机)接收服务端返回来的数据;

step4:最后把结果信息展示在手机上。

1-2、目前使用的是HTTP/1.1的版本,目前最新的版本是HTTP/2.0的版本

HTTP/1.1:1997年发布的HTTP/1.1的版本是目前比较主流的HTTP的版本。 

HTTP/2.0:HTTP/2.0比起HTTP/1.1的版本来说是非常优秀的,支持海量数据的传输,但是没有大规模化的使用,目前gRPC的协议使用的是HTTP2.0的协议来进行设计的。

2、RPC协议

RPC 分布式框架的分支: a、Google--->gRPC协议 b、facebook--->apache thrift协议 c、alibaba-->dubbo协议

gRPC的协议又称为:远程过程调用(比如我访问的服务器是在西方或者是在欧美,等于我访问它的速度是在我自己家里访问的速度是一样的)。

三、网络分层

引言:在现实生活中,我们通过微信给对方转账,这个传输的过程中会设计客户端和服务端,在传输的过程中,如有一方出现问题,那么就会出现不可挽回的损失,这样会涉及数据安全问题,如何保障这一过程的安全性,就需要TCP/IP底层协议来为应用层的HTTP协议保驾护航。因而,对HTTP的协议来说,数据安全是非常核心非常重要的。

1、TCP/IP分层管理

TCP/IP协议按层次主要为:应用层,传输层,网络层,数据链路层

a、应用层:决定了向用户提供应用服务时通信的活动。而HTTP的协议和gRPC的协议就是属于应用层的协议。

b、传输层 :应用层的下层是网络传输层,提供处于网络连接中的两台计算机之间的数据传输。

c、网络层: 主要是用来处理网络上流动的数据包,所谓数据包就是网络层传输中的最小单位,在该层协议中,规范了通过怎样的路径到达目标计算机,并且把数据包传送给对方。

d、数据链路层: 主要是处理连接网络的硬件部分,如操作系统,硬件设备的驱动等。

2、TCP/IP通信传输流

3、三次握手

为了数据的安全性(客户端与服务端数据传输的安全性),设计了三次握手,来避免这个问题。

第一次握手:客户端和服务器端建立连接的时候,客户端会先发送一个syn包,它的序号是j,发送到服务器,进入syn send状态,等待服务器的确认;

第二次握手:服务器收到了客户端发送的这个syn包之后,必须确认客户端的syn包,发一个确认包就是ack包,这个ack包的序号就是j+1,就在原先包的基础上加1位,同时自己也发送一个syn包,这个包的序号是k,服务器就会发两个包给客户端,一个应答的ack包,一个是需要客户端确认的syn包;

第三次握手:客户端收到服务器的syn包和ack包之后,再向服务器发送一个确认包ack包,它的序号就是K+1,这个包发送完成后,客户端和服务器就进入一个连接成功的状态了,完成了三次握手。

通俗的说就是:

a、第一次握手:客户端发送请求到服务器,等待服务器确认;

b、第二次握手:服务器收到了客户端发送的请求,会给客户端发送一个确认包和应答包;

c、第三次握手:客户端收到服务器的确认包和应答包之后,会再向服务器发送一个确认包。

4、URI和URL

URI可以称为统一资源标识符,而URL是统一资源定位符。

这个里面URI指的是:image

URL指的是:http://gw.alicdn.com/bao/uploaded/i3/2841891633/O1CN01cYHqK61NvxN62Mb3t_!!2841891633.jpg_300x300q90.jpg_.webp

四、HTTP协议

HTTP是应用层的协议,它不需要刻意的去关注底层网络传输层协议的东西。(TCP/IP)

1、HTTP请求流程

HTTP的完整请求流程: 

a、客户端与服务端之间建立TCP的链接请求;

b、客户端发送Request请求给服务端;

c、服务端Response响应回复客户端的请求;

d、客户端与服务端之间的TCP链接请求关闭。

2、持久连接

引言:假设有10万张图片,而一次TCP的连接请求有多少资源,就有多少Request,以及Response回复一次TCP的连接关闭,那么针对10万张图片,就会有10万次请求和回应,对于这种情况,每次发送请求,都需要进行提次TCP的连接和断开,很明显这对服务端的性能损耗是非常大的,同时也是增加了通信量的开销,我们可以使用持久连接。

keep-alive:持久连接,它的特点是只要客户端或者是服务端没有明确断开连接,那么就得⼀直保持TCP的连接请求,持久连接减少了TCP 连接的重复连接和断开造成的性能损耗,减轻了服务端的负载,也提升了整体相求响应时间的性能。

五、通讯模式

引言:上述的clear,刷新等一系列操作就是一种通讯模式。

在客户端与服务端在进行交互的时候,通信模式主要分为同步通信和异步通信。

1、同步通信

同步通信简单的可以理解为客户端发送请求给服务端,服务端必须得回应客户端的请求。所以同步通信它存在如下的缺点,具体为:

容易超时,客户端发送请求后,服务端迟迟没有回应客户端的请求;

堵塞,如果请求是存在大量的计算量和逻辑存在问题,就会导致请求堵塞,后面的请求都会被积压

同步通信模式有时候又称呼为:请求/响应模式。

2、异步通信

由于同步交互存在超时以及堵塞的情况,所以也就有了异步的交互。在异步的交互中,客户端和服务端互相不需要关注对方的存在,只需要关注对应的MQ的消息,客户端与服务端的交互主要是会通过MQ的消息中间作为消息的传递来进行交互的,具体交互如下:

MQ(MQ=MQ消息队列服务器)组件:RabbitMQ和Kafka

RabbitMQ与Kafka的区别:

Kafka能够处理海量的数据(亿为单位),它的性能是非常好的,但是对数据的一致性要求不高;

RabbitMQ:对数据的一致性可靠性的要求是非常高的,但是它的性能是很差劲的。

3、常用请求方法

A、客户端向服务端发送Request请求(4个):a、请求方法 b、请求头(消息体)c、请求地址 d、请求参数

B、服务端Response响应回复客户端的请求(3个):a、协议状态码 b、响应头(响应体)c、响应数据

请求方法: a、GET:获取资源  b、POST:添加资源  c、PUT:修改资源  d、DELETE:删除资源

4、请求头/响应头

请求头:

其中:

Cookie:a、反爬虫、b、身份认证、c、记住用户之前的操作行为 

Referer:请求是从哪个页面发送过来的

User-Agent:通过什么客户端向服务端发送请求

Content-Type:指的是客户端通过什么样的数据格式向服务端发送请求(XML,表单,JSON)

如果是互联网的产品,请求头必须需要带:a、cookie、b、Referer、c、user-agent、d、content-type

如果是自己公司的产品:a、content-type、b、cookie

响应头:

其中:

Set-Cookie:服务端把身份认证信息返回给客户端。

5、常用请求数据格式

其中:

a、假设是JSON数据格式的,那么它的请求头是:
Content-Type:Application/Json

b、假设是XML数据格式的,那么它的请求头是:
Content-Type:Text/xml

c、假设是FORM数据格式的,那么它的请求头是:
Content-Type:multipart/form-data

6、常用状态码(Status Code)

当客户端向服务端发送⼀个请求后,服务端响应回复返回给客户端,在返回的信息中会包含⼀个HTTP请求头的状态码信息⽤以响应客户端的请求。

A:服务端正常:2XX、3XX

200 请求成功

201 创建成功(添加商品)

204 Not Content :删除资源

301 永久重定向

302 临时重定项

B:测试人员的问题,客户端有问题:4XX

400 Bad Request 客户端请求错误 :a、请求头不对 b、请求参数不对

401 Unauthorized 无权限访问但可以授权

403 Forbidden 无权限访问也不会授权

404 请求的资源不存在,网址不正确

405 请求方法错误,get\post\put\delect

415 请求头错误

C:程序员的问题,服务端的问题:5XX 

500:服务器内部错误

504:ApiGateWay TimeOut

ApiGateWay (网关):a、统一的API访问入口(限流)b、统一的认证授权体系 c、统一的安全体系

在同步通讯里,简单的可以理解为客户端发送请求给服务端,服务端必须得回应客户端的请求,但是在客户端和服务端之间其实还有一个网关。

7、COOKIE请求

HTTP的一个无状态的协议

7-1:COOKIE: a、记住用户之前的操作行为 b、用户认证授权c、反爬虫

7-2:COOKIE流程:它是存储在客户端的,它是不安全的

通俗的说:

(1)以登录为例,客户端输入账户和密码,登录成功,服务端会自动生成一个COOKIE的信息(用户唯一的认证授权信息);         

(2)服务端把生成的COOKIE认证授权信息通过响应头中的Set-Cookie管理Cookie返回给客户端,此时客户端拿到COOKIE认证授权信息;

(3)在系统的下一个请求中,比如查看个人主页,发送个人主页请求的时候,会在请求头中的Cookie中带上服务端返回来的COOKIE认证授权信息发送给服务端;

(4)服务端接收到,来进行对比信息是否一致。如果一致,就显示登录成功后的信息;如果不一致,就重定向到登录的页面。

8、SESSION请求

8-1:SESSION的流程:它是存储在服务端的 

通俗的说:

(1)以登录为例,客户端输入账户和密码,登录成功,服务端会自动生成一个SessionID的信息(用户唯一的认证授权信息)并存储起来;

(2)服务端把生成的SessionID认证授权信息通过响应头中的Set-Cookie管理SessionID返回给客户端,此时客户端拿到SessionID认证授权信息;

(3)在系统的下一个请求中,比如查看个人主页,发送个人主页请求的时候,会在请求头中的Cookie中带上服务端返回来的SessionID认证授权信息发送给服务端;

(4)服务端接收到,来进行对比信息是否一致。如果一致,就显示登录成功后的信息;如果不一致,就重定向到登录的页面。

8-2:COOKIE和SESSION请求练习

具体我们以网易云邮箱为例,login的请求方法是登录,s?sid=DAeiTUIZYgjxcQntMVZZNfoynyUpODKE&func是访问主页,具体如下:

客户端输入了账户和密码并且登录成功也可以访问主页,服务端也确实生成一个cookie的信息和set-cookie:,此时在如下红框的子目录下,鼠标右键,清除clear下面的内容,再次刷新页面,就会出现重新登录的界面。

9、TOKEN请求

9-1:本质上是SESSION原理来实现的,我们一般称呼它为令牌。前后端分类的产品使用的都是TOKEN。目前TOKEN使用的技术一般是JWT。

JWT: Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519),该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

9-2:TOKEN的特点:

1、每次登录成功后返回的token是不一样是的,是一个随机的字符串;
2、TOKEN一般通过响应数据返回给客户端;
3、客户端发送请求给服务端,是通过请求头里面的Authorization: JWT TOKEN。

9-3:TOKEN的流程如下:

通俗的说:

(1)以登录为例,客户端输入账户和密码;

(2)服务端收到客户端的请求参数,验证成功后,服务端会签发一个Token的值,并且会把Token返回给客户端;

(3)客户端将接收到Token后,客户端会把Token存储起来;

(4)当客户端再次向服务端发送请求的时候,需要带着服务端签发的Token,服务端接收到客户端发送的Token会进行检查校验,如果一致,就显示登录成功后的信息;如果不一致,直接跳转到登录的页面。

9-4:TOKEN请求练习

具体我们以风暴平台为例,打开该网址:http://101.43.158.84/#/

输入账户:13484545195

输入密码:add888

auth/的请求方法是登录,index是访问主页,具体如下:

 

posted on   DOUBLE快乐  阅读(322)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示