『居善地』接口测试 — 1、接口测试的概念
1、接口测试概念
接口测试是测试系统组件间接口的一种测试,它界于单元测试与系统测试中间。
接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。
测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。
换句话说,接口测试就是开发人员把这个接口实现了,我们需要去验证这个接口的实现是否正确。但这是一个后台的功能,不想让前端人员介入,因为让前端人员介入的话会比较麻烦。
总结概括:接口测试就是代替前端验证服务端程序是否正确。
2、接口测试原理
- 测试人员借助工具模拟客户端向服务器端发送请求。
- 服务器端接受请求后,对请求进行相应的处理并向客户端响应结果。
- 客户端接收响应数据后,测试人员对结果进行判断的一个过程。
接口测试是黑盒测试。作为黑盒测试,基本的测试思路是通过输入和输出判断被测系统或者对象的逻辑是否正确。
3、做接口测试的依据是什么
- 需求。熟悉实际的业务需求可以更好的帮我们设计测试用例,准备测试数据。
- 接口文档。根据接口说明文档开发接口测试脚本,执行脚本。
- 原型图。可以根据原型图更好的判断实际测试数据,是否符合接口之间的逻辑关系。
4、接口测试分类
- Web接口测试:
- 服务器接口测试:测试自己公司实现的接口(工作中的重点)
同一个系统内部不同模块、不同服务之间的调用。
比如:目前主流的系统架构为应用层、服务层和数据层。应用层:负责展示数据和发起数据请求。服务层:为应用层提供数据处理。数据层:用来存储数据,有关系型数据库等,各层之间的交互就是通过服务器接口。 - 第三方接口测试:测试别人公司实现的接口(不同系统甚至不同公司之间的接口调用)
在项目中会用到很多第三方接口,比如要做一个系统来展示每天的天气,那天气数据是怎么得到的呢?不可能自己去预测天气,有免费的第三方接口可使用,只需按照接口协议调用想要的天气数据即可。当然这是调用系统外部的数据。
还比如第三方登录时调用外部公司的微博登录、微信登录接口等。
- 服务器接口测试:测试自己公司实现的接口(工作中的重点)
- 模块接口测试:就是测试一个类中的方法,或者说模块中的一个接口。
一个程序内部接口的测试,模块接口测试是单元测试的基础,它主要测试模块的调用与返回。
5、接口测试的特点
- 无UI界面:在做接口测试的时候是无法看到应用界面的。
- 无UI交互操作:既然无UI页面,也就不可能在UI上进行点点点操作了。
- 不同于手工测试:接口自动化测试可用于持续集成,接口覆盖率也比较高。
- 基于协议:接口测试是带访问协议的测试,需要测试协议和协议中的内容是否正确。
- 数据验证:检查数据的交换,传递和控制管理过程,还包括处理的次数,业务逻辑是否正确。
- 格式校验:请求参数和返回值的数据格式校验,包括参数的缺省,返回的数据是否完全等。
6、接口测试的意义(优势)
(1)更早的发现问题
不少的测试资料中强调,测试应该更早的介入到项目开发中,因为越早的发现bug,修复的成本越低。
然而功能测试必须要等到系统提供可测试的界面才能对系统进行测试。
而接口测试可以在功能界面开发出来之前对系统进行测试。
系统接口是上层功能的基础,接口测试可以更早更低成本的发现和解决问题。
然而,在实际的开发过程中,开发人员并没有充足的时间去编写单元测试,并且他们往往对自己编写的代码有足够的信心,不愿意将“浪费”时间在编写单元测试上面。
这个时候接口测试的作用就会变得更加重要。
(2)缩短产品研发周期
对于产品研发周期来说,如果将所有测试工作都集中在功能测试阶段,那么测试的问题和修复周期就会变长。
因为测试可以更早的介入产品开发中,所以可以有效的控制功能测试阶段bug的数量,从而有效的缩短产品开发周期。
(3)发现更底层的问题
系统的有些底层逻辑是在UI功能测试中不太容易触发的,那么这些逻辑可能会存在问题。接口测试可以更容易更全面的测试到这些底层的逻辑。
(4)检查服务器的异常处理能力
我们通常把前端的验证称为弱验证,因为它很容易被绕过,这个时候如果只站在功能的层面进行测试,就很难发现一些安全的问题。
而不以功能为入口的接口测试就会很容易的验证这些异常情况。
- 比如订单接口是不允许重复提交的。
- 有些接口还要考虑性能问题。
- 比如购物车里有多个商品,全部勾选后去支付, 会判断商品库存,这时候能提交成功吗,处理逻辑又是什么?
- 安全性测试:
服务端提供API, 接口调用方在客户端,之间的通讯暴露在公网上,如果有不善意的用户抓包获取了支付接口,用1元价格购买到了100元商品,这是非常危险的,这就是安全性测试的一个方面。
SQL注入等也属于这类。
7、UI测试与接口测试对比
(1)UI测试特点
一般互联网公司,最大的特点就是快,产品需要不停的迭代,迭代时间基本在15天左右。
UI自动化测试的优点是,能够实际模拟真实用户的行为,直接验证软件的商业价值,缺点是用例的维护和执行代价很大。
另外,UI自动化测试的稳定性问题,是长期以来阻碍UI测试发展的重要原因。
在快速迭代的情况下(如不停的更新活动界面),页面的改动可能会很频繁,而UI自动化测试本身基于页面元素,前端小小的改动可能需要测试的非常大的改动。
所以总结如下:
- web应用和APP迭代速度非常快。
- 页面更新频繁。
- 测试成本高于效益。
- 可交付于第三方进行测试(云测、众测)。
(2)接口测试
针对服务端后台测试,接口规则一旦确定,后期的变化非常的小。
相对于变化频繁的UI来说,接口测试的性价比更高。
这就成为了企业内重点测试的对象,我们都知道服务端中保存着用户数据、业务数据、交易数据等。倘若任何一个接口实现有问题,都会影响所有用户。
正是由于服务端数据和业务逻辑关系着企业的命脉,所以极少会有企业把接口交于第三方测试。
作为测试人员,我们需要验证的是接口间数据传递的正确性和完整性。
参考: