接口测试面试
为什么要做接口测试
新功能前期工具接口测试:
- 一般后端接口比前端页面先开发完,所以测试可以更早的介入测试,更早地暴露接口问题,减少前端开发的返工。
- 如果后端接口参数未作限制,可以通过像fiddler这样的代理请求工具绕过前端限制任意修改参数,当传入不合法参数时可能造成系统出错等严重问题。
- 部分接口功能没有对接前端页面,功能测试无法覆盖,需通过接口测试覆盖测试点。
- 检查接口报文敏感信息是否加密,账号鉴权等问题。
冒烟或回归的脚本接口测试:
- 接口功能稳定,较少变动,容易实现自动化持续集成,可以减少人工回归成本与时间,缩短测试周期。
如何开展接口测试
- 分析接口文档或需求文档,找出测试点,测试点分三个类:
- 编写接口测试计划
测试计划就是功能测试计划基本一样就是知名的5w1h了
1) why——为什么要进行接口测试;
2) what——测试接口包括哪些;
3) when——测试接口不同阶段的起止时间;
4) where——相应接口文档,接口缺陷的存放位置,测试环境等;
5) who——项目有关人员组成,哪些接口分配给哪些人;
6) how——使用哪些测试工具以及测试方法进行测试。
- 设计测试用例
依据文档分析出来的测试点,分为单接口场景和多接口场景进行设计
单接口
- 正向数据:也就是能正常发送请求,正常获取响应的数据
- 反向测试:用不属于规定范围的数据区发送请求检查服务器能否正常处理
多接口场景测试
- 业务场景功能测试(站在用户角度考虑常用的使用场景)
- 多业务场景功能测试主要是测试接口之间数据依赖
- 使用接口工具执行用例
postman、jmeter
考虑:关联,加密、动态参数,签名等。
如何设计接口测试用例
- 请求body的完整性、正确性
- 请求参数必填项和选填项
- 请求参数合法性(上传文件接口关注文件类型和大小,查询接口考虑数据排序、数据分页)
- 请求参数的边界值
- 数据不可重复性
- 响应字段的正确性、完整性
- 关联依赖接口
- 性能,TPS(每秒事务数),接口响应时间、最大并发量
- 安全,构造恶意的字符请求,如SQL注入;敏感信息加密;鉴权(缺少、错误和过期)
- 链路接口考虑业务逻辑。
关联接口怎么测
根据完整业务场景去设计关联接口,在一条业务场景接口用例中去依赖每一步的用例
第三方支付接口怎么测
接口测试常见的bug类型
功能:
- 接口功能没实现,接口逻辑没按需求处理数据
- 接口功能错误,接口逻辑错误处理数据
- 接口功能正常,响应内容错误
- 接口入参未对异常值作处理
- 接口入参数量非法未作处理
安全:
- 未对敏感信息加密传输
- 返回敏感数据未脱敏显示
性能:
- 响应时间较长
- 并发量未满足业务需求
接口鉴权如何处理
接口参数加密如何处理
HTTP与HTTPS协议的区别?
- http协议是超文本传输协议,信息是明文传输;https协议是由SSL+HTTP协议构建的加密传输协议,
- 默认工作在tcp协议的端口不一样,http:80,http:443
- 由于SSL加密的关系,https页面响应速度比http页面慢
常见的post的提交数据的方式有哪些?
主要有四种方式,四种方式取决于Content-Type这个请求头:
- Content-Type:application/x-www-form-urlencoded:数据报文是字典,相当于通过表单方式去提交数据,数据的格式:a=1&b=2&c=3。
- Content-Type:multipart/form-data:报文包含有文件上传。
- Content-Type:application/json(text/plain,text/xml...):报文都是字符串类型。
- Content-Type:binary:报文类型是以二进制的方式上传文件。
常见的请求头以及它们的作用
- accept:客户端接收的数据格式。
- X-Requested-With:异步请求。ajax异步请求。无刷新。
- User-Agent:发送请求的客户端的类型。
- Content-Type:请求报文格式。
- Cookie:Cookie信息
get和post的区别
get和post都可以向服务器提交数据,并且都会从服务器获取数据。
区别:
- 传参方式不同:get通过地址栏的方式传参,post通过表单报文传参。
- 参数长度不同:get的参数有长度限制,post没有限制。
- 常用作用不同:get一般是获取数据,比如查询,post提交数据,比如:增删改。
- 发送过程不同:get只发送一个tcp数据报文(包含请求头和请求体),post发送两个报文(1.请求头,返回100;2.请求体,返回200)
接口请求中常用的返回状态码
- 1xx 信息提示
- 2xx 成功
- 3xx 重定向(发送一个请求时,这个请求多次请求了服务器的多个资源)
- 4xx 客户端错误
- 500 服务端错误
200 Ok:请求成功并返回数据
302 把这个请求重定向到别的地方了。
400 代表客户端发送的请求有语法错误。
403 服务端已理解请求,但请求被拒绝。通常是资源权限问题。
404 表示请求失败,服务端找不到资源,可能是url错误或文件已被删除。
500 表示服务器端程序或者配置错误,导致了它无法完成对请求的处理。
502 代表网络环境有问题。
503 代表服务不可用,服务器当前无法处理请求,可能是服务未启动成功。
504 代表服务器端响应超时,没返回结果。
cookie,session,token有什么相同点和不同点。
相同点:都是用于鉴权并且都是服务器生成的。
不同点:
cookie保存在客户端的浏览器上,不安全,可以去分析存在本地的cookie进行cookie欺骗。
session保存在服务器的内存,默认保存30分钟,比cookie安全,缺点就是当登录的用户越多,比较占用服务器资源。session一般会生成sessionID(名称自定义),可以通过cookie传输。
token存在服务器的数据库里面,通常通过一个接口或通过登录获取,后续所有的接口都必须传token才可以请求成功。token也可以通过cookie传输。
请问你们公司是如何做接口测试的?(包括:接口测试流程、方案以及用例设计)
- 获取接口文档,熟悉但接口以及链路接口的业务,包括接口地址,鉴权方式,入参,出参,错误码等。
- 编写接口测试用例并评审
正例:单接口返回成功场景,链路接口业务流程实现。
反例:
鉴权异常:空,错误,过期......
参数异常:空,类型异常,长度异常。
错误码异常
其他异常:接口黑名单,接口调用次数限制。分页。 - 使用接口测试工具或代码的方式执行接口测试。
重要考虑一下情况:
1)接口关联,接口参数加密,是否动态参数,接口参数是否前面,是否需要带请求头。 - 实现持续集成并输出接口测试报告电子邮件,记录bug。
没有接口文档,如何做接口测试?
方式一:可以使用fiddler等抓包工具抓取接口数据之后整理成接口文档,如果有不清楚的字段,找时间集中找开发验证,然后再进行接口测试。
方式二:可以通过jmeter的代理录制功能,先把接口请求录制下来形成接口文档,然后再逐一的进行接口测试。
你平常做接口测试的过程中发现过哪些bug?
常规bug:接口没实现,没有按接口文档返回结果,未对异常值参数作处理。
权限bug:通过一个账号的token去请求操作另一个账号的内容。
- 创建一个业务对象时,未对参数作字符长度限制导致系统报错。
- 下单商品时将数量参数设置为负数导致系统错误。
- 下单商品时将价格设置为负数,发现余额反而增加了。
- 接口未对用户开放权限,调用时报403。
- 缺少必填项参数正常请求。
你在接口测试中是怎么校验结果是否正确的?
有两种需要校验:
第一种:状态码校验,验证返回的状态码为200,200代表接口请求成功有返回数据,但数据不一定正确。
第二种:业务校验:基于接口文档,
- 错误码为0,错误码为开发自定义。
- 当接口响应报文比较短,比较固定的情况下,校验完全一致。
- 当接口响应报文比较长,比较多的情况下,校验包含最核心的业务信息。
- 当接口响应报文为非常复杂的多层级XML格式或JSON格式,通过XPath,JSONpath,正则表达式的匹配方式获取到最关键的业务节点,然后再校验。
- 当接口无响应体时,可通过查询数据库校验或者是通过其他接口校验。
如何分析一个bug是前端还是后端?
通过抓包工具抓包,然后查看请求报文。如果请求报文对比接口文档有问题,那么就是前端的问题。如果请求报文没问题,那就看返回报文,返回的数据不对,那就是后端问题。
依赖于第三方数据的接口如何进行测试?
接口关联(依赖)是项目中的接口依赖于本项目的接口。
可以通过postman搭建Mock服务,但是postman的mock服务有访问次数限制,一天只能访问1000次。也可以通过servlet,Flask等技术来实现接口mock服务。
对于加密接口,签名接口如何进行测试?
加密接口:
在调用接口的时候,首先要弄清楚接口的加密方式是什么?
如:
- 对称式的加密方式(私钥加密):不常用的有DES,AES,常用是Base64加密方式。
- 非对称的加密方式(双钥加密):RSA加密方式。
由一个密钥密码生成双钥(公钥和私钥),公钥加密,私钥解密,私钥加密,公钥解密。 - 只加密不解密。
1)MD5加密
2)SHA1,SHA3... - 自定义加密规则。混合加密方式。
了解加密规则之后,在请求接口之前先要对参数做对应的加密之后再发送请求。单一加密方式,postman和jmeter有些是支持的,postman使用JavaScript脚本实现,jmeter使用bashshell中的Java代码实现。
当一个接口出现异常时候,你是如何分析异常的?
一个接口请求不通该如何排查?
- 检查请求四要素:请求方式,请求路径,请求参数,请求头。
- 检查客户端和服务端之间的网络是否能ping通
- 检查项目服务是否部署成功正常运行
- 检查鉴权码是否有效
- 检查客户端是否开了代理服务器,如fiddler
本文作者:强哥不强
本文链接:https://www.cnblogs.com/roronoazoro77/p/16436673.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步