在服务层的测试维度中,主要针对的是业务接⼝的测试,来验证接⼝功能是否完整,如内部逻辑, 异常处理。这样的⽬的是验证接⼝它是否稳定,所以接⼝的测试相对⽽⾔⽐较容易⽽且更加⾼效,测试⽤例的维护成 本也低。有很多主流的测试⼯具都可以做接⼝测试,如PostMan,JMeter,SoupUi等,除了⼯具还有在Python语⾔中 很多的第三⽅的库都是可以来做接⼝测试的,如:urllib,requests,aiohttp等
一、协议分别有哪些
http、https、grpc、
二、http协议
HTTP是应⽤层的协议,它不需要刻意的去关注底层⽹络传输层协议的东⻄。在整体应⽤层的协议中,通俗的说在 整个API的测试维度上,需要关注的是⼀个完整的HTTP请求流程,请求⽅法,请求头响应头,COOKIE请求流程, SESSION的请求流程和TOKEN的请求流程,以及HTTPS的请求流程。在微服务的架构师模式下,使⽤的也是轻量级 的通信模式(REST API),在微服务的架构模式中,需要清楚的是它的通信可以分为同步通信模式和异步通信模 式,或者更加具体本质的说就是请求/响应和异步请求/响应(发布/订阅模式)。⼀个完整的HTTP请求流程如下:
1、三次握手
当然在这个过程中,我们还需要关注三次握⼿之间的⽹络交互,它的具体信息为Client端发送连接请求报⽂, Server段接受连接后回复ACK报⽂,并为这次连接分配资源。Client端接收到ACK报⽂后也向Server段发⽣ACK报 ⽂,并分配资源,这样TCP连接就建⽴了。
1、三次握手 (1)起初两端都处于CLOSED关闭状态,Client将标志位SYN置为1,随机产⽣⼀个值seq=x,并将该 数据包发送给Server,Client进⼊SYN-SENT状态,等待Server确认; (2)第⼆次握⼿:Server收到数据包后由标志位SYN=1得知Client请求建⽴连接,Server将标志位SYN和ACK都置 为1,ack=x+1,随机产⽣⼀个值seq=y,并将该数据包发送给Client以确认连接请求,Server进⼊SYN-RCVD 状态,此时操作系统为该TCP连接分配TCP缓存和变量; (3)第三次握⼿:Client收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1, ack=y+1,并且此时操作系统为该TCP连接分配TCP缓存和变量,并将该数据包发送给Server,Server检查ack 是否为y+1,ACK是否为1,如果正确则连接建⽴成功,Client和Server进⼊ESTABLISHED状态,完成三次握 ⼿,随后Client和Server就可以开始传输数据。
2、http完整请求
在API的⾃动化测试中,我们更多关注的是HTTP应⽤层的交互,因为即使主流的架构如微服务架构,它的通信模式 也是基于REST API轻量级的通信模式。在HTTP的协议中,⼀个完整的HTTP请求流程具体为:
一个完整的HTTP请求流程
(1)客户端与服务端之间建⽴TCP的连接请求
(2)客户端向服务端发送Request的请求
(3)服务端Response相应回复给客户端
(4)客户端与服务端之间关闭TCP的连接请求
需要明确的是客户端向服务端发送请求的过程中,这⾥的客户端不单纯的WEB,它包含了⼿机,PAD,PC以及其 他,⻅如下的请求流程:
3、通信模式
(1)同步交互
在客户端与服务端在进⾏交互的时候,通信模式主要分为同步通信和异步通信。同步通信简单的可以理解为客户端 发送请求给客户端,服务端必须得回应客户端的请求。所以同步通信它存在如下的缺点,具体为:
容易超时,客户端发送请求后,服务端迟迟没有回应客户端的请求
如果请求是存在⼤的计算量和逻辑存在问题,就会导致请求堵塞,后⾯的都积压
同步请求的交互具体为:
(2)异步交互
由于同步交互存在超时以及堵塞的情况,所以也就有了异步的交互。在异步的交互中,客户端和服务端互相不需要 关注对⽅的存在,只需要关注对应的MQ的消息,客户端与服务端的交互主要是会通过MQ的消息中间作为消息的 传递来进⾏交互的,具体交互如下:
4、http请求方式
在HTTP的应⽤层协议中,常⽤的请求⽅法具体为GET,P0ST,PUT,DELETE的请求⽅法,具体如下所示:
5、常用状态码
当客户端向服务端发送⼀个请求后,服务端响应回复返回给客户端,在返回的信息中会包含⼀个HTTP请求头的状 态码信息⽤以响应客户端的请求。在⽹站https://http.cat中可以看⻅各个不同表情的状态码的显示,如调⽤https:/ /http.cat/504就会显示如下对应的信息。常⽤的状态码具体为: 200 请求成功
301 永久重定向
302 临时重定项
400 Bad Request 客户端请求错误
401 Unauthorized
403 Forbidden
404 请求的资源不存在
500 服务器内部错误
504 GateWay Timeout
6、请求头和响应头
7、cookie请求
(1)客户端发送请求登录系统 (2)Set-cookie管理cookie返回给客户端 (3)请求头带cookie带上返回cookie发送给服务
8、SESSION请求
8、session请求
(1)发送登录信息(用户ID和密码) (2)Set-cookie管理session返回给客户端 (3)请求头带cookie带上返回session发送给服务端
实例
9、token请求
(1)用户登录到系统 (2)服务端通过响应数据或者响应头返回token (3)客户端在请求参数或者请求头带上返回token
三、grpc协议
gRPC协议概述 gRPC协议是⼀个⾼性能、开源和通⽤的 RPC 框架,⾯向移动和 HTTP/2 设计。⽬前提供 C、Java 和 Go 语⾔版 本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本⽀持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# ⽀持.gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复⽤请求等特。这些特 性使得其在移动设备上表现更好,更省电和节省空间占⽤。在 gRPC 中,客户端应⽤程序可以直接调⽤其他计算机 上的服务器应⽤程序上的⽅法,就好像它是本地对象⼀样,从⽽使您更容易创建分布式应⽤程序和服务。与许多 RPC 系统⼀样,gRPC 基于定义服务的想法,具体说明可以远程称为其参数和返回类型的⽅法。在服务器⽅⾯,服 务器实现此界⾯并运⾏ gRPC 服务器来处理客户端呼叫。在客户端⽅⾯,客户端有⼀个存根(在某些语⾔中称 为"客户端"),提供与服务器相同的⽅法