当我们朝着更多敏捷的左移[译者注:左移测试]软件开发过程发展,比如持续集成和持续交付,需要不断增加对开发人员的快速反馈。
UI 测试的不足之处在于它们很慢,它很难让开发人员快速了解到他们的代码是否在最后一次构建中存在问题。而另一种方法,API 测试,往往比 GUI 测试更快更可靠。
在仔细研究 API 测试工具之前,让我们确保我们拥有一致的、实际的 API。
什么是 API?
应用程序编程接口(Application Programming Interfaces, API) 是一种软件组件接口的规范。
大多数功能测试都涉及用户界面,比如 Web 页面或 .NET 窗体。API 测试则会避开用户界面,通过调用 API 来和应用程序直接通信。
API 测试可以用于测试一些无头测试,比如 JMS HTTP、数据库和 Web 服务。
API 测试有时候也称为“无头”测试。多数无头测试会绕过 UI 并直接向应用后端或服务发送请求,然后接收响应,并验证响应内容以确保所有事件都和我们期望的一样在运作。
这个简单的例子通常被称为客户端/服务器关系。客户端产生一个需要资源的请求,然后去找到一个满足该请求的服务器。服务器定位所需资源并向客户端发送反馈。
可以使用什么 API 测试工具来自动进行 API 测试?
Selenium 只能用于基于浏览器的测试,而你可能需要一个工具来测试基于 Web 服务的 Rest 和 Soap。
这里有一些不错的工具可以用来测试基于 Web 服务的 Rest 和 Soap。
Postman
Postman 是一个 Rest 客户端,它一开始是 Chrome 浏览器的插件,不过最近推出了用于 Mac 和 Windows 的本地版本。
你可以在一个较高的级别上使用它,向 Web 服务器发送 POST 请求后,会收到它的响应。它允许你按照 API 的需要设置所有头信息和 Cookie,并在得到响应之后对其进行检查。
- 可用于自动化测试或探索性测试
- 可以在 Mac、Windows、Linux 和 Chrome 中运行
- 拥有不少集成工具,比如 Swagger 和 RAML 格式
- 可以运行、测试,并拥有文档和监控功能
- 不需要学习新的语言
Karate DSL
Karate 允许你创建一系列的测试,调用 Web 服务并判断响应是否与预期一致。
- 构建在 Cucumber-JVM 之上
- 可以像标准 Java 项目一样运行测试并生成报告
- 不需要 Java 知识就可以编写测试
- 即使不是程序员也很容易编写测试
看一个简单的例子,以此着手使用 Karate 和 BDD。
SoapUI
SoapUI 是来自 SmartBear 软件的无头测试工具。它有两个版本:免费开源版和专业版。免费版是开源的,所以你可以获得它的完全源码并根据需要来进行修改。Pro 版本的用户体验不错,拥有一些附加功能,包括表单编辑器,XPath 断言向导和 SQL 查询生成器。免费版本可以让你:
- 使用 Groovy 很容易创建自己的代码
- 通过拖放创建测试
- 构建复杂的场景
- 异步测试
- SoapUI 的 Mock Service(模拟服务) 可以让你在 Web 服务尚未实现之前先进行模拟
HttpMaster Express
HttpMaster 自我定位为一种可自动测试网站和服务的 Web 开发和测试工具。 它可用于测试RESTful Web Service 和 API 应用程序。 HttpMaster 还允许您监视 API 响应。
- HttpsMaster 项目提供全局选项来自定义您的 API 请求
- 参数功能使您能够在请求中包含动态数据
- 您可以使用“请求链“功能,使以前的请求返回的一些数据包含在下一个请求参数中
Rest- Assured
Rest-Assured 是一个开源的 Java 特定领域专用语言(DSL)。它让 REST 服务测试更加简单。它消除了很多套路化的模板代码,从而使测试和验证复杂响应更加简单。 它还支持 XML 和 JSON 请求/响应。
- 删除与 REST 服务交互所需的模板代码
- 支持 BDD Given / When / Then 语法
- 与 Java 项目无缝集成
RestSharp
RestSharp 是用于 .NET 的一个简单的 REST 和 HTTP API 客户端
- 支持 .NET 3.5+、Silverlight 5、Windows Phone 8、Mono、MonoTouch、Mono for Android
- 对多数 .NET 项目来说,很容易通过 NuGet 安装
- 支持 GET、POST、PUT、PATCH、HEAD、OPTIONS、DELETE
Rest Console
Rest Console 是一个具有 HTTP 客户端、请求可视化和构造函数的工具,致力于帮助开发者构建、调试和测试 RESTful API。
- 轻松创建查询参数
- 语法高亮
- 认证支持:Plain、Basic、OAuth 和自定义
RoboHydra Server
RoboHydra 是用于测试基于 HTTP 客户端的工具(比如,产生 HTTP 请求的软件)。也就是说,让被测试的客户端不连接到真实的服务器,而是连接到 RoboHydra 并让 RoboHydra 按你的需求发出响应。
- 可用于测试各种各样的客户端
- 用 Javascript 编写,运行于 Node 环境
Hippie-Swagger
hippie-swagger 是个用于测试 RESTful API 的工具。它可以自动测试 Swagger 断言。它不仅会验证 API 行为,还会检查文档。如果 Swagger 文档缺失或不准确,将会导致测试失败。
- 可以验证 Swagger 文件的各个方面;参数、请求/响应内容、路径等。
- 断言消息精确易懂
WebInject
WebInject 是用于自动测试 Web 应用和 Web 服务的开源解决方案。它可以用于测试具有 HTTP 接口的单个组件 (JSP、ASP、CGI、PHP]AJAX、Servlet、HTML Form、XML/SOAP Web 服务、REST 等)。
- 这是个命令行工具
- 使用 Perl 编写,可安装在 MS Windows、GNU/Linux、BSD、Solaris、MAC OS
Pyresttest
PyRestTest 是基于 Python 的工具,用于测试 REST 和微测
- 可以用 YAML 或 JSON 配置的方式编写测试,不需要写代码
- 失败的时候会返回错误代码
- 只能在 Mac 和 Linux 上运行
Airborne
Airborne 是个开源 API 测试框架,用 Ruby 编写,基于 RSpec 驱动。
- 可测试 Rack 应用,比如 Sinatra 和 Grape
- 可测试 Rails 写的 API
Unirest
由 Unmesh Gundecha Unirest 推荐,是轻型 HTTP 请求的客户端库。
- 可与 xUnit,BDD 运行工具组合起来,成为测试工具
Mockbin
Mockbin 由 Augusto Marietti 推荐。Mockbin 允许你在库、套接字和 API 中创建自定义端点,用于测试、模拟以及跟踪 HTTP 请求和响应。
- 模拟自定义端点
- 创建自定义 HTTP 模块
- 记录并检查进入自定义端点的调用