1、之于接口
1.1、什么是接口测试
接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点,测试的重点是检查数据的交换,传递以及系统间的相互依赖关系等。
一般来说,测试接口是指测试接口的功能、性能和稳定性测试,当然还有大佬级别的安全性测试
1.2、接口的分类
按接口的调用层级
内部接口:程序内部方法、模块间的交互调用
对外接口:面向三方,对外界开放,供人引用以共享数据
按接口请求方式
webServices接口:
以soap协议通过http传输,请求报文和响应报文均为XML格式,测试时需要用工具调用(SoapUI、JMeter、LoadRunner)
http api 接口:
以http协议,通过路径区分调用的方法,请求报文为key-value键值对,响应报文为JSON结构。
常用请求方式:
get:多用于查询数据
请求数参数暴露在URL中不够安全,所以不能用来传递敏感信息,多个参数之间用"&"连接;请求参数会被完整保留在浏览器历史记录里,在URL中传送的参数是有长度限制的(一般255字节)
post:向指定资源位置提交数据(如提交表单、上传文件)来进行请求
不同于get方式,请求参数不会被保留在浏览器历史记录里,请求数据量大,安全性高
2、接口测试QA
2.1、接口测试相比于功能测试的优势?
现在很多系统前后端架构是分离的,因为前/后端的工作进度不一样,功能测试依赖前端页面,而接口无需依赖页面操作,所以从接口层面可以更早的介入测试,发现业务缺陷,同时节约测试成本。
基于安全的考虑,只依赖前端进行限制不能满足系统的安全要求(容易绕过前端验证),所以,我们需要从接口层面校验后端逻辑,暴露隐藏的缺陷。
2.2、接口测试怎么测
- 通过性验证:首先肯定要保证这个接口功能是通畅的,也就是正常的通过性测试,按照接口文档上的参数,正常传入,是否可以返回正确的结果。
-
参数组合:按照接口文档上定义的方法参数列表,用正交法组合出不同的参数组合形式(是否必填、入参可否为空、是否符合参数类型)
-
接口安全:
1、绕过验证,比如说购买了一个商品,它的价格是300元,那我在提交订单时候,我把这个商品的价格改成3元,后端有没有做验证
2、绕过身份授权,比如说修改商品信息接口,那必须得是卖家才能修改,那我传一个普通用户,能不能修改成功,我传一个其他的卖家能不能修改成功
3、参数是否加密,比如说我登陆的接口,用户名和密码是不是加密,如果不加密的话,别人拦截到你的请求,就能获取到你的信息了,加密规则是否容易破解。
4、密码安全规则,密码的复杂程度校验 -
异常验证:
按照接口文档上定义的方法参数列表,用正交法组合出不同的异常参数组合形式(不符合方法参数列表定义) -
性能测试
接口并发情况,如上面提到的:一个账号,同时(大于2个请求)对最后一个商品下单,或不同账号,对最后一个商品下单
接口响应时间,响应时间太长了,肯定需要优化,一般都是毫秒级别
2.3、 WebService接口如何测
2.4、当一个接口出现异常时,你是如何分析异常的
1.用fiddler抓包,或者浏览器上f12,app上的话,那就用fiddler设置代理,去看请求报文和返回报文了 [此为主]
2.查看后端日志,xshell连上服务器,查看日志
2.5、如何模拟弱网测试
Fiddler,Rules->Performance->勾选 Simulate Modem Speeds,勾选之后访问网站会发现网络慢了很多
2.6、如何分析一个bug是前端还是后端的
Fiddler抓包看请求报文,参照接口文档,看请求报文有没问题,有问题就是前端发的数据不对
请求报文没问题,那就看响应报文,返回的数据不对,那就是后端开发的问题
2.7、cookie和session的区别
(1)cookie数据存放在客户的浏览器上,session数据放在服务器上
(2)cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session
(3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面应当使用cookie
(4)单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie
(5)可以将登陆信息等重要信息存放为session;其他信息需要保存,可以放在cookie
2.8、请求接口中常见的返回状态码
1xx -- 信息提示(表示临时的响应。客户端在收到常规响应之前,准备接收一个或多个1xx响应)
2xx -- 成功(表明服务器成功地接受了客户端请求)
3xx -- 重定向(客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求)
4xx -- 客户端错误(发送错误,客户端有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份证验证信息)
5xx -- 服务器错误(服务器由于遇到错误而不能完成该请求)
常见的有
(1)200 OK - [GET]:服务器成功返回用户请求的数据
(2)201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功
(3)202 Aceepted - [*]:表示一个请求已经进入后台排队(异步任务)
(4)204 NO CONTENT - [DELETE]:用户删除数据成功
(5)400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作
(6)401 Unauthorized -[*] :表示用户没有权限(令牌、用户名、密码错误)
(7)403 Forbidden -[*] :表示用户得到授权(与401错误相对),但是访问被禁止
(8)404 NOT FOUND -[*]:用户发出的请求针对得到是不存在的记录,服务器没有进行操作,该操作是幂等的
(9)406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
(10)410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
(11)422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
(12)500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。
2.9、设计接口测试用例 [包含正向用例 和 异常用例]
(1)是否满足前提条件
有些接口需要满足前提,才可成功获取数据。常见的,需要登录Token
(2)参照接口文档上定义的方法参数列表,用正交法组合出不同的参数组合形式(是否必填、入参可否为空、是否符合参数类型)
2.10、上下游接口有数据依赖如何处理?
在JMeter工具中可以使用全局变量等方式将需要的数据进行传送
2.11、HTTP协议是无状态协议?怎么解决HTTP协议无状态问题
http:TCP/IP协议族的一个应用层协议,用以定义Web浏览器于Web服务器之间交换数据的过程。
特点:
简单快速:请求服务时只需传送请求方法和路径
灵活:http允许传送任意类型的数据对象
无连接:单次连接只处理一个请求,处理完请求即断开连接
无状态:协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态,服务器处理请求后返回响应数据,但是,发送完不会记录任何信息。
解决方案:通过浏览器cookie和session(服务器)来保持状态。