从使用微信登录到滴滴平台来打车,几乎所有应用程序都依赖第三方 API 来实现某些功能。接口测试可能是软件和质量检查测试中最具挑战性的部分之一,因为接口可能很复杂,它们通常基于协议和标准,而在其他类型的测试中我们通常不会遇到。
注:下面我会使用 API 来表示接口,是一个意思。
这篇文章将教你所有需要了解的有关 API 测试的信息:
- 什么是API测试及其重要性
- API测试类型
- 如何做API测试
- API 自动化
- API 测试工具
1.什么是API测试及其重要性
API 是 应用程序编程接口的缩写。它使开发人员可以将其他应用程序的功能集成到自己的产品中,而不必从头开始构建它们。这意味着用户可以通过微信登录到你的其他应用,比如在滴滴上打车去到他们想要的地方,并通过微信支付服务付款。所有这些都无需离开你的应用程序。
在传统的三层体系结构中,API 代表应用程序的中间层。它们控制业务逻辑并连接其他两层(GUI 和数据库)。
过去,测试主要在 GUI 层进行,通过使用该应用程序的界面,测试人员可以发现其业务逻辑中的错误。但是要开始测试,他们必须等待开发人员完成 UI(也就是前端页面)。这减慢了测试过程,并增加了修复错误的成本。
敏捷的开发和测试自动化使得这种方法越来越过时了。API 测试是在最关键的层上进行的:业务,在业务层中执行业务逻辑处理,并且在用户界面和数据库层之间进行所有事务,是一种软件测试实践,可以直接测试 API(从功能,可靠性,性能到安全性)。
综上所述,API 测试的主要好处是:
1.早期测试
通过 API 测试,一旦设计了逻辑,就可以构建测试以验证响应和数据的正确性。我们不必等待各个团队完成工作或构建完整的应用程序-测试用例已隔离并且可以立即构建。
2.简化测试维护
页面会根据需求不断的变更而 API 更改可以受到更多的控制且不经常发生,也方便测试回归。
3.提高测试效率
300个 UI 测试可能需要 30 个小时才能完成,而 3 分钟内可以运行 300 个 API 测试。这意味着我们将在更短的时间内发现更多错误,同时也将立即修复它们,极大地提高整体测试策略的效率
4.更快的发布
当 API 测试失败时,我们确切地知道我们的系统在哪里损坏以及在哪里可以找到缺陷。这有助于减少构建,更快交付。
2.API 测试类型
根据测试范围,我们可能需要运行各种测试。除了功能测试外,还可能需要运行安全性,回归,可靠性,异常和集成测试,这里列举常见的类型:
2.1 功能测试
功能测试可确保 API 正常运行,并且可以轻松集成到其他系统中。在功能测试中,你必须从用户角度来检查是否满足要求,目的是确保系统可以正常处理所有可能的情况和错误。有一点:要记住添加断言(例如,API应该返回正确的响应代码)。
正向流程测试之后,可以继续进行反向流程或异常测试,目的是测试 API 如何响应错误的用户输入,并确保正确处理所有错误。
功能测试可以有:
2.1.1 组件测试(Component tests)
验证 API 中可用的每种方法:
- 请求和响应的结构是否合理;
- API 返回适当的响应代码;
- 响应正文中包含的错误消息是正确的;
- 输出达到预期;
- API符合预期的响应时间。
组件测试也许是测试 API 的最重要部分,因为它们可以为所有后续测试奠定基础。
2.1.2 场景测试(Scenario tests)
结合用户使用场景,将各个组件组合到各种方案中,了解在每种特定情况下发出了哪些 API 请求。发布 API 后,用户可能会以意想不到的方式开始使用它,这可能会导致错误。因此,重要的是要测试 API 调用的组合。
如果有新功能,可以重新写单个组件测试。
2.2 安全测试
测试安全性对于任何产品的成功都是至关重要的,因为被利用的漏洞很容易破坏产品的声誉。为了保护你的应用程序安全,必须验证访问控制,用户授权,敏感数据加密和其他安全要求。你可以使用现有的测试方案来发现攻击媒介,并在渗透测试中模拟黑客攻击。例如,可以将方案测试与 SQL 注入尝试或参数模糊化结合起来。
3. 如何做API测试
API 测试流程非常简单,只需三个主要步骤:
- 发送带有必要输入数据的请求
- 获取具有输出数据的响应
- 验证响应是否按要求返回
在开始测试 API 之前,你应该知道它们可以发出什么样的请求以及限制条件。这些在接口文档里都可以找到,你也可以直接问开发人员,向他们询问可用的端点,HTTP 方法及授权限制,必填字段及其验证限制,失败/通过的请求的响应代码以及失败的请求显示的错误消息。
现在,你可以设置一个环境,进行 API 调用并验证响应。由于 API 没有 GUI,因此必须在消息传递级别进行测试。你可以直接发送请求,但是有许多优秀的工具可以使 API 测试变得更加容易(稍后会详细介绍)。输入所需的 API 参数并配置数据库和服务器后,通过调用 API 检查是否能调通。之后,就可以开始 API 测试了。
要了解 API 是否符合预期,必须编写测试用例,其中包括:
- 输入参数;
- 预期结果;
- 最长响应时间;
- 解析输入;
- 错误处理;
- 正确格式化响应;
- 将每个测试用例添加到测试脚本中,并在构建后执行。
4. 接口自动化
现在,比较少的团队进行 API 测试的原因之一是根本没有时间。随着敏捷开发的发展,始终存在着加快交付产品的压力。你可以花足够的时间进行深度 API 测试的唯一方法是进行自动化,只需要编写一次测试脚本,然后在开发人员每次更改代码时自动运行它们。
自动化测试过程可以消除重复的任务,加快测试速度并增加覆盖范围。API 测试是自动化最有价值的领域之一。
但是,100% 的 接口测试自动化并不具有成本效益。在测试自动化方面,并非系统的所有部分都具有同等的优先级,知道哪些适合做接口自动化,哪些不适合做很重要。
下面是常见用来自动化的类型:
- 回归测试;
- 功能测试;
- 性能测试;
- 数据驱动的测试
当然,我们仍然需要手工测试,比如用在可用性测试、探索性测试等等。
5. API测试工具
有很多工具可以帮助你测试 API:
- Postman:谷歌提供的开源接口测试工具,支持 Http 接口的调用和验证
- Jmeter:Apache 提供的开源接口测试工具,除了支持 Http 接口还有很多扩展功能(Mysql,Redis,RabbitMQ....) ,可以看我写的 Jmeter 实践文章。
- Fiddler:抓包工具,常用于接口分析
- HttpComponents:Apache提供的开源包,可以基于它实现接口代码的编码
这里简单介绍一下 Postman:
Postman 是用于调试和探索性测试的最受欢迎的工具之一,有超过500万测试人员定期使用它。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如 Jmeter、soapUI 等。
它是一个简单的 REST 客户端,以Chrome扩展程序和适用于 Windows,Linux 或 Mac 的桌面应用程序的形式提供。你可以免费下载它们或订阅专业版。
与大多数类似工具不同,Postman 具有出色的 UI,对于那些不想陷入编码困境的测试人员来说,这是一个绝佳的选择。
你可以使用 Postman 的请求构建器独立运行 API 测试,也可以创建多个测试的集合。Postman 支持简单的知识共享和协作,也可以将 Postman 实例与 Jenkins 无缝集成,以创建自己的 CI / CD管道,也可以将其作为构建步骤添加到现有管道中。
结语
之后,我也会详细介绍一些常用的接口测试工具,今天希望大家可以理解什么是 API 以及什么是 API 测试。如果没有正确测试 API,可能会导致 API 应用程序出现问题,还会导致调用应用程序出现问题。它是软件工程中必不可少的测试。