接口测试概述1
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表示的资源的地点。
客户端向服务端发送Request请求:
A、请求方法
B、请求头(消息体)
C、请求地址
D、请求参数
服务端Response响应回复客户端的请求:
A、协议状态码
B、响应头(响应体)
C、响应数据
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的文件,下载需要半小时,要求下载期间可以进行做其他事情,通信模式是属于异步请求。
一、工具:
1.工具介绍
postman :很主流的API测试工具,也是工作里面使用最广泛的研发工具。
JMeter:
2.安装postman:
安装好直接打开,不用注册。
二、通信模式:
1、同步通信:
客户端请求服务端必须有回应,在回应之前不能做别的操作,有缺陷,会造成排队、等待、堵塞。
当任务太多时,服务器压力太大,可能会造成崩溃,为了防止崩溃这时就需要线程池技术,我们现在的软件都是使用这种技术。
线程池技术:(所有的请求都是task,每个task都是一个线程)线程池指定同时执行最大任务数。(如服务器指定最大任务数为90,客户端发来100个任务数,剩下的10个采取队列机制(先进先出原则))
queue:队列(先进先出的原则)
2、异步通信:
客户端向mq消息队列发送数据(商品名、价格),服务端从mq消息队列获取数据,向mq消息队列回应(扣款成功),mq消息队列向客户端回应(支付成功)
主流的MQ消息中间件:
Kafka、RabbitMQ、ActiveMQ
APache是Apache软件基金会的一个开放源码的网页服务器
Kafka在大数据领域主要使用在实时流数据方面非常优秀,能够处理千万亿的数据
RabbitMQ主要应用于一般的服务,对数据的一致性、可靠性、安全性要求高。
MQ组件:RabbitMQ和Kafka
RabbitMQ与Kafka的区别:
Kafka能够处理海量的数据(亿为单位),它的性能是非常好的,但是对数据的一致性要求不高
RabbitMQ:对数据的一致性可靠性的要求是非常高的,但是它的性能是很差劲的
三、请求与响应
1.在网页中抓取网络请求
京东网为例:右键检查→Network→刷新→www.jd.com
2.客户端向服务端发送Request请求:
2.1作用:
客户端(app、浏览器)发送请求给服务器时,使用的协议——http请求协议。
规定发送给服务器的数据传输的语法格式。
2.2格式:
1、请求方法
2、请求地址:(url:http协议+域名+资源路径)
3、请求头: Key:Value格式
User-Agent:描述请求发送端的浏览器类型
Content-Type:描述请求参数的数据类型 (json数据格式;form表单数据;xml)
referer:
cookie:
4、请求参数
post和put大部分有请求参数(在postman中有请求参数的方法需要在请求头中添加类型,在请求体中选择类型)
get和delete大部分没有请求参数
postman的介绍:(根据接口文档、模拟客户端向服务器发送请求)
3.请求方法:
常用的请求方法有8种,最常用的有4-5种:
GET请求方法:获取资源
POST请求方法:添加资源(对服务端已存在的资源也可以做修改和删除操作)
PUT:修改资源
DELETE:删除资源
OPTIONS:路由映射
3.1 GET请求方法:获取资源
例1:
步骤1:打开京东网,在获取到的数据种找一个图片类型pgn,获取请求地址复制到postman中用:
步骤2:在postman中选GET方法,粘贴获取到的地址,点击send就可以获取到图片了:
query params
例2:有请求参数的GET方法
http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?op=getMobileCodeInfo
步骤1:在接口文档中获取方法和地址:(协议加第二行的域名加第一行的资源路径)
步骤2:在postman中选择GET方法,复制地址,点击send会自动出现请求参数(KEY),我们进行填写(如下图的VALUE部分)
(GET方法的请求参数 在postman中是写在Params中的)
3.2 POST请求方法:添加资源(对服务端已存在的资源也可以做修改和删除操作)
请求方法:
请求地址:
请求头:
表现形式为key-value的形式
在请求头中关注”Content-Type“来获取请求参数的类型,如:
json数据格式:application/json
表单格式:application/x-www-form-urlencoded
XML数据格式:text/xml
请求参数:
(在postman请求体中选择数据类型时:form格式直接选择x-www-form-urlencoded,xml和json格式需要先点raw再选)
例1:http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?op=getMobileCodeInfo
步骤1:在接口文档中获取:请求方法;请求地址(地址要加协议);请求头中获取请求参数类型;具体的请求参数:
解析接口文档总结一下获取到的内容:
地址:http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx
方法:POST
请求头:
数据格式:Content-Type: text/xml; charset=utf-8
请求参数:
<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> soap:Body <getMobileCodeInfo xmlns="http://WebXml.com.cn/"> <mobileCode>string</mobileCode> <userID>string</userID></getMobileCodeInfo> /soap:Body /soap:Envelope
步骤2:打开postman工具:
1、选择请求方法
2、粘贴请求地址(前面加http协议)
3、点请求头Headers
4、点Body,选择获取到的数据的类型(form格式直接选择x-www-form-urlencoded,xml和json格式需要先点raw再选)选响应的数据数据类型,填写具体的请求参数
例2:
http://101.43.158.84/#/login 13484545195 asd888
步骤1:
步骤2:在postman中选择方法、填地址(要填协议http)、在请求头中添加数据类型、在请求体中选择参数类型、粘贴参数
2.3.3 PUT:修改资源
2.3.4 DELETE:删除资源
2.3.5 OPTIONS:路由映射
3.服务端响应客户端:
3.1作用:
服务器端,针对客户端发送的http请求,回发响应数据——http应答
规定回发给客户端的数据组织格式
3.2格式:
1、协议状态码
2、响应头 (key:value)
Content-Type:描述响应体中的数据类型
3、响应数据(绝大多数不为空。请求成功:回发数据,失败:回发错误信息)
4、响应时间(记):
指的是客户端发送的时间加上服务端响应回复客户端请求的时间之和。以毫秒为单位。
响应数据的大小以kb为单位。