什么是接口测试?

发布于 2021-03-30  746 次阅读


工作中很多同事对接口测试不够重视,甚至不知道接口测试该怎么测[捂脸][捂脸][捂脸][捂脸],今天说说接口测试。

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。

生活中的接口如手机充电口,网页搜索,接口就是一个位于复杂系统之上并且能简化你的任务,它就像一个中间人让你不需要了解详细的所有细节。

例如淘宝手机充值,淘宝提供了充值接口,简化了你的充值任务

为什么要做接口测试?

越底层发现bug,它的修复成本是越低的,接口属于金字塔模型 的中间层,属于收益产出比最高的

金字塔模型

前端随便变,接口测好了,后端不用变

  1. 互联网的快速发展,公司内部系统或与外部系统的关联越来越多(微服务模式下),一个业务流程关联多个后端系统,它们的关联都是基于接口来实现,接口测试可以将复杂的系统关联进行简化,只要做好每个接口的测试就能够较好的保证系统质量
  2. 单个系统的变更,是否会影响到关联业务系统,比较难用常规的测试方面来覆盖相关的应用系统,但可以通过对接口功能的覆盖来验证是否影响它人对接口的调用(更有效的方法是引入契约测试)
  3. 接口功能比较单一,能够比较好的进行测试覆盖,测试更加轻量级,也相对容易实现自动化持续集成,可以减少人工回归成本与时间,缩短测试周期
  4. 接口相对于界面功能,会更底层一些,测试覆盖会更容易

接口测试常用工具

  • postman
  • jmeter
  • soapUI
  • 其它

接口测试的范围有哪些呢?

关于接口的测试的范围,主要从以下两个方面进行介绍。

1、是否所有的接口都需要测试?

随着系统复杂度越来越高,接口越来越多,想完全覆盖所有接口是一件很困难的事情。

通常情况下,主要测试最外层(外网调用)的两类接口:数据进入系统的接口(调用外部系统的参数为本系统使用)和数据流出系统的接口(验证系统处理后的数据是否正常)

2、被测接口需要测试哪些方面?

测试人员需要关注被测接口的功能是否实现,性能是否达标,安全性是否满足,重点关注数据的交换,传递,处理次数以及控制管理的过程。

  • 检查接口返回的数据是否与预期结果一致
  • 检查接口的容错性,假如传递数据的类型错误时是否可以处理
  • 接口参数的边界值。例如,传递的参数足够大或为负数时,接口是否可以正常处理
  • 接口的性能,http请求接口大多与后端执行的SQL语句性能、算法等比较相关
  • 接口的安全性,外部调用的接口尤为重要

接口架构的分类?

依据所遵循协议的不同,常见接口架构可以分为以下四类。

RPC接口:调用另一个系统的函数

soap接口:使数据作为服务可用

REST接口:使数据作为资源可用

GraphQL:仅请求所需要的数据

以上四种架构风格的接口,各有优劣使用的场景也不一样

接口测试流程?

1、编写接口测试计划

接口测试计划跟功能测试计划是一样的,都是为了确认是否满足需求,确定测试环境及测试计划,为设计测试用例做准备,一般来说,接口测试计划包含概述,测试资源,测试功能及重点,测试策略,测试风险及测试标准

2、编写,评审接口测试用例

根据需求文档,接口文档写测试用例,然后开发,测试一起评审测试用例是否符合需求和相关要求。下面的图里面的内容可以供大家写测试用例的时候参考。

3、执行接口测试

执行接口测试的时候,可以借助已经开发好的工具,如比较主流Jmeter,Postman,SoapUI,或者直接自己写代码进行相应的接口测试。

1、针对输入

输入主要针对接口的入参,测试过程中首先会考虑的是正常入参,其次是异常入参。异常情况包括参数异常、数据异常,测试用例主要用到的方法是等价类和边界值

  • 正常入参
  • 参数异常(参数多填、少填、不填、填入错误的)
  • 数据异常(参数错误类型、长度不符、非空参数为空,不合法的成员、特殊字符、敏感字符)

2、针对逻辑

接口测试研发一般会提供接口文档或业务相关的设计图、流程图,针对业务流程的处理逻辑,可以从入参的限制条件、事件的操作对象、状态的转换来分析

  1. 限制条件分析
    1. 数值的限制(如数据类型,如金额的限制)
    2. 状态的限制(如在线和不在线,黑名单和白名单)
    3. 关系的限制(如存在和不存在,绑定和解绑)
    4. 权限的限制(如管理员、普通用户)
  2. 对象分析(主要对合法和不合法的对象进行操作)
  3. 状态转换分析(如支付类业务,支付成功后,订单如何更新、退款后如何更新)
  4. 时序分析(如工作流)

3、针对输出

在考虑异常时通常比较容易想到正常的情况、异常的情况,但不一定能覆盖到所有的错误码,而接口定义的错误码可以帮助我们丰富测试用例。如代码异常、网络异常、服务器异常,这种根据输出设计测试用例,可以发现前后端是否正常输出结果,提示是否友好,是否输出敏感信息。

4、接口自动化测试持续集成

对接口测试而言,加入CI流程是核心内容,通过持自动化的手段我们才能做到低成本高收益,包括但不限于下面的内容:

  • 流程方面,完善测试用例(正常、异常),实现测试左移(契约测试),加速回归测试
  • 结果展示,更加丰富的结果展示,趋势分析,质量统计和工作量统计等
  • 问题定位,报错信息,日志更精准,方便问题复现与定位
  • 结果校验,加强自动化校验能力(json断言、完全效验、正则匹配),数据库效验(重复数据、乱码、数据不完整)
  • 代码覆盖率(正在尝试精准测试,推荐测试用例)
  • 性能需求,完善性能测试体系,通过自动化的手段监控接口性能指标是否正常

5、接口测试质量评估标准:

  • 业务功能覆盖是否完整
  • 业务规则覆盖是否完整
  • 参数验证是否达到要求(边界、业务规则)
  • 接口异常场景覆盖是否完整
  • 接口覆盖率是否达到要求
  • 代码覆盖率是否达到要求
  • 性能指标是否满足要求(如响应时间,什么场景下会出现并发)
  • 安全指标是否满足要求(如用户密码、手机号、银行卡、ip地址、身份账号是否加密)
  • 与历史版本是否兼容
  • 设计是否合理、是否可扩展、是否有多余字段

最后有个问题大家认为什么样的测试用例是好的测试用例?


一名测试工作者,专注接口测试、自动化测试、性能测试、Python技术。