7.27API测试总结

API测试总结

协议:HTTP、websocket、gRPC

1、接口测试工具:PostMan,JMeter;
2、接口测试的框架:
	1). postman + newman
	2).Jmeter +ant
3、websocket协议(auth2.0):
客户端与服务端始终保持持久连接不会断开。
4、grpc(protocol buffers):
	使用RPC进行通信,调用远程函数就像调用本地函数一样,RPC底层会做好数据的序列化与传输,从而能使我们更轻松地创建分布式应用和服务。grpc是RPC的一种,免费且开源的,由谷歌出品。使用gRPC,我们只需要定义好每个API的Request和Response,剩下的gRPC这个框架会帮我们自动搞定。

HTTP协议:超文本传输协议

1、概述:
   在整个API的测试维度上,需要关注的是⼀个完整的HTTP请求流程,请求⽅法,请求头响应头,COOKIE请求流程,SESSION的请求流程和TOKEN的请求流程,以及HTTPS的请求流程。
2、HTTP协议缺陷:
   ①通信内容是明⽂,内容很可能被第三⽅获取到。
   ②不验证通信⽅的身份信息,容易被伪装
   ③⽆法证明请求头的完整性

HTTP的完整请求流程:

1、客户端与服务端建立TCP连接。
2、客服端向服务端发送request请求。
3、服务端收到响应后Response回复给客户端。
4、客户端收到服务端的回应后关闭TCP的连接。

三次握手(TCP连接的建立)

为了确保把数据能够送到⽬标的服务器,TCP协议内部使⽤了三次握⼿的策略机制,也就是说在TCP协议中,TCP把数据包送去后,TCP会进⾏确认对⽅是否收到,或者是确认是否成功送达,那么三次握⼿主要使⽤了TCP的标志,具体为:SYN和ACK。⾸先Client端发送连接请求报⽂,Server段接受连接后回复ACK报⽂,并为这次连接分配资源。Client端接收到ACK报⽂后也向Server段发送ACK报⽂,并分配资源,这样TCP连接就建⽴了。

如何理解三次握手:
A,第一次握手即服务端的确认:客户端发送数据出去,服务端需要确认我收到了;
B.第二次握手即服务端反馈:服务端告诉客户端,你发送的数据我这边确认收到了;
C.第三次握手即客户端确认:客户端需要向服务端再次反馈,客户端收到服务端的反馈了。

通俗理解:image

HTTP的状态码

200:请求成功
201:用于创建服务器对象的请求,例如创建成功(添加商品)
301:永久重定向
302:临时重定向
400:BAD REQUEST,指的是客户端请求的语法错误,服务端无法理解
401:Unauthorized 无权限访问系统
403:有权限但是禁止访问
404:请求的资源不存在
405:请求方法错误
415:请求头错误
500:服务端内部错误
504:网关超时 (Gateway timeout)

HTTP协议的组成部分

Request组成部分:
请求地址:
请求方法:GET、POST、DELETE、PUT等
请求参数:
请求头(消息体)

Response组成部分:

协议状态码、
响应头(响应体)、
响应数据

术语:

前台/客户端/前端
后台/服务端/后端

请求方法:
GET:
1.从服务器获取数据,返回响应的实体部分,可以类比数据库的select操作,不会影响数据库本身。
2.没有请求体。
3.请求参数和对应的值附在URL后,以?号开始,参数用key=value键值对的方式书写,多个参数使用&分割。
4.通常对数据不敏感的请求使用get请求,因为参数跟在URL后不安全。
5.传输的参数长度是有限制的

POST:
1.指定资源提交表单数据进行处理请求(例如提交表单或者上传文件)。
2.通常post请求含有请求体。
3.请求参数存放在请求体中,可以是任意格式。
4.相对来说数据比较安全。
5.请求数据无大小限制,可以认为是无限制。

PUT:
1.从客户端向服务器传送的数据取代指定得文档得内容。

DELETE:
1.请求服务器删除指定的页面。

OPTIONS:
1.允许客户端查看服务器的性能。

TRACE:回显服务器收到的请求,主要用于测试或诊断。
请求方法:
url:http协议+域名+资源路径
常用请求头: Key:Value格式
Host:指定请求资源的主机IP地址和端口号
Cookie:维持当前访问会话
Referer:标识这个请求是从哪个页面发送过来的
User-Agent:可以使服务器能够识别客户使用的操作系统版本,浏览器以及版本信息。
Content-Type:互联网媒体类型
请求参数
post和put大部分有请求参数(在postman中有请求参数的方法需要在请求头中添加类型,在请求体中选择类型)
get和delete大部分没有请求参数

主流工具
Postman、JMwter

API的监控
监控,然后钉钉触发报警
JMeter
JMeter是怎么做API自动化测试的?
1、首先在JMeter里面创建测试计划,在测试计划里面创建线程组
2、在线程组里面添加HTTP的请求,以及添加API的测试用例
3、编写测试用例结束后,结合Ant构建工具,编写build.xml文件(执行脚本,测试报告目录,自动发送邮件)
4、在build.xml文件的目录下执行ant,就会自动执行
5、最后整合到Jenkins持续集成的平台,那么在下个版本中,只需要点击构建就能够自动化的执行
JMeter中动态参数的处理?
	以登录为案例,登录成功后返回的TOKEN每次都是不一样的,这个值就是动态参数,那么在登录成功后的接口中(例如首页)需要调用到这个TOKEN:
	1、在登录的接口中添加后置处理器中的JSON提取器,定义一个变量获取登录成功后返回的token的值。
	2、在下个接口中通过${}来调用这个变量。
	3、执行线程组中的任务,就能够实现参数的上下关联。
PostMan是怎么做API自动化测试的
在postman里面可以通过执行集合来执行集合里面所有的测试用例,如登录,对产品进行增删改查等操作。具体步骤如下:
①:先新建集合,在集合中在新建HTTP请求
②:每个请求中输入对应的请求地址,添加请求(),编写测试断言等,最后点击send发送请求,判断所测试的接口是否测试通过。
PostMan中动态参数是怎么处理的
以登录为例,每一次登录成功后,服务端都会生成一个随机的字符串也就是token,然后把token返回给客户端,客户端带着这个Token,就可以操作服务端系统的业务。
具体步骤
	(1):先请求登录接口;
	(2):登录成功后,返回Token;
	(3):把获取的Token存储到变量token中,当作下一个接口的请求参数:
{
  "token":"{{token}}"
}
	(4):通过{{动态参数}}的方式调用动态参数

以登录为例来说明session的流程:

1、客户端输入账户密码登录成功
2、在服务端生成sessionID,同时存储在服务端本地,通过响应头中的set-cookie把生成的sessionID返回给客户端
3、客户端接收到sessionID后再次请求服务端时(比如访问个人主页),会在请求头的cookie中带上sessionID发送给服务端
4、服务端接受到客户端发送过来的sessionID,与存储在服务端本地的sessionID之间进行对比。(一致允许访问个人主页;不一致,重定向到登录页面。)

怎么理解session会话对象?
所有请求之间的cookie是共享的
请求底层的tcp连接将会被重用,这样对服务端来说,不会造成不必要的性能上的损耗
JMeter做API测试常用组件:
1、HTTP信息头管理器
2、COOKIE管理器
3、查看结果树
4、JSON提取器/正则表达式提取器
5、JSON断言以及响应断言
6、HTTP请求默认值
7、用户定义的变量(分离的是公共的数据)

build.xml:
1. 定义执行的脚本、
2. 定义测试报告存储的目录
3. 定义自动发送邮件

MockServer
Mock本意就是模拟或者效仿,我们可以把Mock理解为一个替身,在软件开发领域,通常就是指模拟对象,故mockserver就可以理解为测试替身的服务。Mock是为了解决不同的单元之间由于耦合而难于开发、测试的问题。所以Mock既能出现在单元测试中,也会出现在集成测试、系统测试过程中。在官网选择下载  Standalone Moco Runner ,下载之后,你将会得到一个 moco-runner-1.3.0-standalone.jar 文件。

Mock:测试替身
场景:

1、前端开发完了,后端没完,前端怎么办?
自己模拟产品的数据
2、两个不同业务线的后端,A开发的服务需要B开发的数据,A开发完了,B请假就,A怎么办?
	A模拟B服务的数据
3、A测试的服务,依赖B业务线的数据,但是B这边请假了,A测试怎么办?
	①:A模拟B业务线的数据
	②:A自己造数据

通信模式:

同步通信
客户端发送请求给服务端,服务端必须得回应客户端的请求。同步通信又可以说是请求/响应的模式。

image

异步通信
在异步的交互中,客户端和服务端互相不需要关注对方的存在,只需要关注对应的MQ的消息,客户端与服务端的交互主要是会通过MQ的消息中间间作为消息的传递来进行交互的。
MQ消息队列服务器:RabbitMQ和Kafka 
RabbitMQ数据持久化使用的是那个参数?durable=true

image

怎么判断前端问题还是后端问题?

1、没有发送网络请求,错误提示信息不正确,是前端问题
2、如果有网络请求,并且错误提示信息不正确,那么是后端的问题
3、假设正确展示是456,页面展示信息是123,但是是错误的,查看后端返回的是不是123,如果后端返回的是456,那么是前端问题,如果后端返回的是123,那么是后端问题
针对一个服务,你怎么测试?
接口测试维度+稳定性测试+安全测试 token认证方式+性能测试+异常性
1. 测试正常情况下的接口
2. 测试异常情况下的接口
	. 请求参数是否为空,若不为空,测试为空的情况
	. 请求参数字符串类型是否有要求,若有要求,测试符合要求和不符合要求的情况
	. 请求参数字符串长度是否有要求,若有要求,测试符合要求和不符合要求的情况
3. 接口的性能测试
	接口的响应时间、响应速度等
4. 接口的安全性测试
   Token认证
5. 接口的稳定性测试
	在一定的时间内,使用jmeter线程组持续且稳定的进行测试,查看服务器是否会稳定运行
posted @ 2022-07-27 19:23  NANA~  阅读(76)  评论(0编辑  收藏  举报