接口测试不像UI自动化测试那样具有一些代表性的测试开发框架,当提到接口测试时,我们首先想到的应该是一些测试工具,如Postman、Fiddler、Charles等。
2.6.1 接口测试
要弄清楚利用接口测试工具完成的测试是不是接口自动化测试,先要了解接口是什么。维基百科对接口的定义如下。
应用程序接口(Application Program Interface,API)是一种计算接口,它定义多个软件中介之间的交互,以及可以进行的调用(call)或请求(request)的种类,如何进行调用或发出请求,应使用的数据格式,应遵循的惯例等。它还可以提供扩展机制,以便用户可以通过各种方式对现有功能进行不同程度的扩展。一个API可以是完全定制的,针对某个组件的,也可以是基于行业标准设计的,以确保互操作性。通过信息隐藏,API实现了模块化编程,从而允许用户独立地使用接口。
通过上面的定义,其实不难看出,接口就是提供系统或者软件之间相互调用关系的支持方式的统称。从接口实现者的角度看,接口定义了可以向外部提供的服务。从接口调用者的角度看,接口定义了实现者能提供哪些服务。接口测试就是实现者和服务调用者之间的一种契约。
接口也就是一种面向对象解决问题的思路,通过定义接口解决某一类问题,当其他系统需要解决相同问题时,可以调用该接口,从而节省开发时间,避免代码的冗余。软件开发中各式各样的设计模式就研究如何让抽象更合理。这里的系统调用者既可以是其他接口提供者,也可以是最终展现给最终用户的前端部分,如图2-13所示。
图2-13 接口的原理
站在上述角度,如果测试工程师要完成接口测试,那么测试就是一个调用者,依据接口实现者承诺的契约检测是否已达成约定,同时会考虑一些其他软件质量特性。这里的接口测试就通过模拟接口调用的客户端实现系统的检测。接口测试如图2-14所示。
图2-14 接口测试
接口测试工具通过单击或者较少的代码交互快速实现一个客户端,从而能够快速完成接口的测试工作。接口自动化测试指能够自动完成接口测试中执行的测试活动,包括接口测试和自动化测试。
接口测试指依托测试技术模拟协议客户端行为(该客户端是协议层的访问客户端,具体可表现为客户端系统,也可以是微服务的调用发起方等任何包含协议发起方代码或者实现的系统或软件),按照测试用例设计方法完成接口入参的设计,与被测服务器端发生交互并验证结果是否满足预期的测试行为。
自动化测试指能够提供按迭代、按需、定时完成无人或者较少人直接参与的测试活动。
我们可以将接口自动化测试应用于任何依托网络传输协议完成交互(客户-服务端类)的系统中,包含C-S架构的系统和B-S架构的系统。因此,一个接口自动化测试主要包含以下内容。
模拟协议客户端行为的测试技术,这既可以是测试脚本也可以是测试平台,甚至是测试工具。
接口逻辑模拟,这既可以通过录制后修改的方式完成,也可以通过在特定的编辑环境或者测试框架下的测试代码完成。
测试数据以某一种形式存储于接口逻辑模拟之外的文件或者服务中,在接口访问过程中按照某一种测试参数策略选取参数,通过不断地给同一个逻辑赋值检验各种不同的预期结果。
通过断言类操作,校验实际交互结果与预期设计结果是否一致,以自动化地完成测试结果评估,通过某种方式将不满足预期的测试用例告知接口自动化测试工程师。
随着自动化测试技术的发展,接口自动化测试中的接口逻辑模拟、测试数据设计、断言操作、测试缺陷自动提交、误报缺陷自动过滤等无人参与或者少人参与的功能越来越多,这些技术在质量效能方面都起着至关重要的作用,但是它们还不是接口自动化测试必备的功能模块。