大家好,这里是架构资源栈!点击上方关注,添加“星标”,一起学习大厂前沿架构!
测试 API 的需求经常会突然出现。
探针与探针错误所在,传统的探针测试方法已失效。同时,构建过程缓慢且庞大,难以隔离单个API进行故障修复。
技术人员需要精细的工具来诊断问题并实施修复。然而,在选择这些工具时,“愿望清单”式的方法往往会最终导致公司一无所获,只能自行开发定制工具,或者购买一个表面上功能齐全但实际效果不佳的工具。
不要试图用一种工具来满足公司的所有需求,而要根据其优势、劣势、风险和成本来寻找一种工具。
为什么 API 测试很重要
由于 API 是大多数现代应用程序的核心,因此团队必须能够发现 API 层中的问题。能够测试各个 API 端点有助于前置和跟踪团队独立工作并加快构建速度。团队可以实现真正独立的功能,从而实现独立处理和交付,而不会在系统的其他部分产生错误的风险。
API运行测试速度更快,更稳定,而且比通过UI进行的测试更准确,部分原因是它们直接与应用程序交互逻辑。虽然Web浏览器仍然从单个Web服务器获取图像和设计,但它很可能会通过API端点获取所有数据(包括登录、搜索结果和处理更新)。
十大 API 测试工具
为了可靠地测试 API 端点,团队需要一个 API 测试框架,该框架可以在每次构建时自动运行测试套件,并使用 API 测试工具来记录每个测试。
此列表中的工具是根据其市场占有率、适用性以及商业支持的可用性而筛选出来的。列表按复杂程度递增,旨在满足软件开发人员在需要额外功能时的需求。
1)浏览器内API测试
API端点的URL与网站URL相同。了解API的结构(即与API端点对应的URL)以及GET请求后,测试人员可以将URL复制并粘贴到Web浏览器的地址端点以获取API结果。
大多数现代API都要求用户登录到被测应用程序,并使用cookie管理会话。测试人员可以通过传统的接口登录环境(接口应该创建会话),然后通过浏览器访问URL。
这个方法每次只能处理一个请求,而且非常难以感知。使用POST命令的API会遇到问题,因为POST会在有效负载中提交额外的信息,而浏览器不允许用户修改这些信息。浏览器最适合HTTP GET命令。
浏览器内测试是进行检查和实验并查看网页的良好起点。,测试人员不应将其作为唯一的工具。可以考虑将浏览器内测试与 Fiddler 或 mitmproxy 结合使用。
2)CURL
cURL 是“客户端 URL”的缩写,它接受 URL 放置输出显示在屏幕上。cURL 是免费开源的,预装在 Linux 和 Mac 上。它还支持命令行选项,支持基本身份验证,并使用 TLS 握手发出可以 HTTP 请求。CURL 可以从文件读取有效负载,将结果重定向到单独的输出文件,从而成为 Linux 文本工具链的上部组件。因此,由于 cURL 具有纯文本界面,因此最适合作为自制 API测试框架的一部分。在自制框架中,cURL 最直接的替代方案是使用原生编程语言编写的代码,并使用语言的工具库直接连接到 URL。
CURL 是一个批处理程序,无法轻松实时地与 API 交互。因此,请考虑使用 Fiddler 或 mitmproxy。
3)Fiddler
Fiddler最初是Windows上Internet Explorer的一个扩展程序,位于浏览器和网络层之间。它允许用户拦截消息,评估URL和负载并进行修改。它有助于精确定位请求的内容和返回的内容,从而更容易确定错误是来自端点还是端点。
目前,Fiddler Classic 可在 Windows 上运行,并且仍然免费;而 Fiddler Everywhere 可在 Linux、Mac 和 Windows 上运行,每月服务费为 6 至 15 美元。虽然 Fiddler 因探索和实时检查工具而闻名,但经典版本确实提供了一种类似 JavaScript 的脚本语言,称为FiddlerScript。作为持续集成的策略部分,可以在 FiddlerScript 中运行测试场景并报告成功和失败,但还有更好的工具。
4)Mitmproxy
与 Fiddler 类似,mitmproxy 位于浏览器和操作系统之间。它可以记录会话中的所有流量,然后重放、保存、导出和重新导入。该应用程序提供三个主要界面——命令行、基于 Windows 的 GUI 以及一个 Python 扩展,用于编写将 mitmproxy 作为代码库访问的程序。虽然 mitm 在商业上下面,但它拥有一个活跃的开源社区和各种扩展,包括mitmproxy2swagger,它可以接收任何 API调用其转换为Swagger API 规范。
5)Swagger 和 API Hub
Swagger是最广为人知的一款API文档工具,它允许程序员使用任何语言编写API文档。Swagger和API Hub均来自SmartBear公司,该公司提供各种用于开发、测试和监控API及软件的工具。
然而,一旦 API 定义完毕,Swagger 就可以生成服务器存根和客户端代码,包括使任何 API 外观和代码感觉起来都像函数调用的库。虽然基础版 Swagger 应用是免费的,但在线工具 SwaggerHub 每月用户收费 20 至 50 美元。SwaggerHub 提供云版本控制、评论、多用户协作以及一系列附加功能和工具。
Swagger-test和SwaggerAssertions是命令行工具,用于将API的实际输出与Swagger定义的输出预期进行比较。由于SmartBear软件支持Swagger,因此它与其他SmartBear应用程序(例如API Hub)可以集成。API Hub可以使用Swagger规范或简单的API调用/结果来创建用于探索和测试该API的GUI。这种集成功能为软件测试人员创建了一个统一的测试流程,但也可能导致后续组件切换困难。
6)Postman
Postman 也许是最常用、功能最全面的 API 测试工具。用户可以实时探索 API 端点,然后标准化这些流程,并在回归测试中持续运行。Postman 提供网页版和桌面版,以及用于持续集成的命令行运行器,允许用户创建和运行集合,将 API 调用与请求前和响应后事件相结合。这些响应后事件可以包含断言,例如成功消息。
Postman 的结构还允许将身份作为验证请求之前的准备步骤,使用户能够在一个位置配置 API 测试。JavaScript 为 Postman 测试提供支持,设置比无代码测试工具更强大、更复杂。
Postman 最大的限制,情况下,将会在本地集合存储,用户无法看到。但用户可以将集合导出为 JSON 文件,把它们提交到版本控制中。这使得同时编辑会成为一个问题,但如果用户处理之间没有相互依赖关系的不同文件,则问题尚可解决。Postman 提供了一个名为 Workspaces 的基于 Web 的协作服务,该服务将集合存储在云端,目前每月收费 19 至 50 美元。
7)SoapUI
SmartBear 的另一款产品 SoapUI 采用了经典术语:
- 测试示例是一个或多个测试步骤。
- 测试套件是一个或多个测试用例。
SoapUI 完全支持 REST 风格的 API,以 XML 格式保存测试,这可能会带来与 Postman 类似的挑战。
SoapUI 的布局和设计采用拖放式设计,用户可以使用可重用组件构建测试用例,这些组件可以包含 JavaScript 或 Groovy 代码片段。SoapUI 还可以导入 Postman 集合,从而避免供应商锁定。与 Swagger、Postman 和 Fiddler 一样,SoapUI 是免费的,但它也是功能更广泛、更现代化的付费产品ReadyAP I 的子集。ReadyAPI 具备 SoapUI的所有功能,并添加了更多数据管理功能、支持服务虚拟化和模拟服务器、内置支持 Zephyr 集成(SmartBear 的报告工具)、内置支持Jenkins集成、能够从 Docker 镜像启动 ReadyAPI 以及性能测试管理。这些企业功能的价格为:API 测试每月 83 美元,服务虚拟化每月 110 美元,性能测试组件每月 570 美元——全部按年。
8)Tricentis Tosca API Scan
Tricentis以Tosca(一款GUI生成器)而出名,后来不断扩展并于新产品和新功能,Tosca API Scan。Tricentis的方法是基于模型的,这意味着工具可以从一组API规则中派生出结论或该多个测试。只要这些测试是独立的且彼此不冲突,Tosca就可以在曼哈顿上运行它们,从而将测试运行时间从几十分钟到几个。该产品系列包括与Windows网络紧密相关的测试,无法在Mac上进行测试上运行,并且可能不支持 Linux。Tosca 的定价结构尚未公开。
9)REST Assured
REST Assured 是一个完全免费开源代码库,用于测试 Java 中的 API。它支持行为驱动的开发风格语法,可在 JUnit 等 Java 单元测试框架中进行测试。它提供Maven、Gradle、Spring MVC 等常见 Java 基础架构框架的插件。REST Assured 为使用 Java 编写 API 并希望以与实际编程相同的方式进行测试的团队了。以下是 REST Assured 的价值中的一段示例代码,用于检查200 OK响应并验证joker.com是否出现在API输出中:
@测试
公共无效域名请求返回200带有预期id和获胜者(){
什么时候()。
获取(“v1/domains/search?domain=xndev.com”)。
然后()。
状态代码(200)。
主体(包含字符串("joker.com"));
}
10)性能测试:JMeter and Gatling
有些程序员的错误,即使只有两个三个用户同时在线,也会导致问题。一旦解决了这个问题,下一个问题通常会出现在20到30个用户在线时。随着使用量的增长,应用程序可能会达到单台服务器的极限,随之而来的是高效扩展的挑战,就是网络规模性能的需求。
Apache JMeter 是一款免费的开源工具,可以有效地测试该阶梯的前几级——模拟几十个并发用户,甚至上百个并发 API 请求。使用 JMeter,用户可以记录客户端发出的 API ,并在逐渐增加用户数量的进行重放,使用数据文件更改登录凭据,并自定义其他参数以模拟实际使用情况。小型系统的性能测试上限很可能是客户端或网络连接,从而限制其效果。BlazeMeter 是JMeter的云托管版本,承诺提供可扩展性,每月费用在 99 美元到 500 美元之间。
从事拥有更大用户群产品的测试人员可以完全控制大量计算机来运行性能测试会话。Gatling 提供两种极端的 API 测试:本地测试和大规模测试。Gatling 测试的价格从每月 90 美元到 500 美元不等,使用领域特定语言(一种提供对创建测试函数的访问的代码库)以 Java、JavaScript 或 TypeScript 编写。由于 Gatling 测试在云端运行,因此供应商可以模拟来自世界各地的请求。公司可能会对在云端存储测试和测试数据有所顾虑。Gatling 总部位于欧盟,其安全、隐私和数据保护措施比美国更为严格。
如何选择 API 测试工具
根据测试需求选择最佳工具。如果不需要性能测试,Gatling 和 JMeter 就不适用。如果不需要用 Java 编写 API 和相应的测试,REST Assured 可能不太合适。Tricentis 不适合全 Macintosh 环境。
使用下面涵盖的每个工具的细分来根据测试需求找到匹配项:
工具 | 好处 | 挑战/限制 | 成本 |
---|---|---|---|
浏览器内 API 测试 | 无需设置,快速检查 GET 请求。 | 没有自动化,没有测试内存,仅限于 GET 请求。 | 自由的 |
cURL | 可从命令行编写脚本,并可通过请求发送数据。 | 没有用于可视化调试和测试编辑的 GUI 或实时 API 交互。 | 自由的 |
Fiddler | 实时请求/响应检查和脚本支持。 | 自动化程度有限,不适合结构化测试用例的执行。 | 经典: |
Fiddler 随处免费:每月 6 至 15 美元 | |||
Mitmproxy | 可以拦截并记录HTTP/S流量,多种接口。 | 没有传统的带有测试用例的定义步骤,需要搭建脚手架才能在持续集成下运行。 | 自由的 |
Swagger 和 API Hub | 适合测试生成和协作的行业标准 API 文档工具。 | 工具锁定,复杂的集成。 | Swagger UI:免费 |
SwaggerHub:每月 20 至 50 美元 | |||
Postman | 用户友好的 GUI、测试套件支持、可扩展至不同环境。 | 默认本地存储,容易出现合并冲突和协作问题。 | 免费套餐, |
云工作区:每位用户每月 19 至 50 美元 | |||
SoapUI/ReadyAPI | 拖放、可编写脚本、支持 REST。 | 以 XML 格式保存测试,某些脚本任务的学习曲线较高。 | SoapUI 开源:免费 |
ReadyAPI 套件: | |||
每月 83-570 美元 | |||
Tosca | 适用于基于模型的测试和并行执行,支持 CI/CD 集成。 | 以 Windows 为中心。 | 没有公开定价 |
REST Assured | 基于 Java 的测试库,Java 框架的插件。 | 以 Java 开发人员为中心。 | 自由的 |
JMeter/Gatling | 可以模拟高流量以进行性能/负载测试、CI/CD 支持。 | 需要基础设施进行压力测试、云安全问题。 | JMeter:免费加特林企业云:每月90-500美元 |
原文地址:https://mp.weixin.qq.com/s/nK2KNds0ANjKnI8506MHMg
本文由博客一文多发平台 OpenWrite 发布!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。