我们构建了一个用于 API 设计的 IDE。以下是我们的成果
动机
快速入门
TestMace 的主要功能和概念
我们的计划
常问问题
结论
大家好!今天,我们准备向 IT 社区推出TestMace,这是我们用于 API 设计的 IDE。有些人可能从上一篇文章中了解它。但是,我们还没有提供对我们工具的全面评测,所以现在就来介绍一下吧。
动机
首先,我们想先跟大家讲讲我们最初是如何萌生创建自己的高级 API 工具的想法的。以下是我们认为每个 API 设计 IDE 都应该具备的功能列表:
- 创建和发送请求和场景(请求链);
- 编写不同类型的测试;
- 测试生成;
- 处理 API 描述,包括从 Swagger、OpenAPI、WADL 等导入;
- 模拟请求;
- 大力支持一种或多种脚本语言并与最流行的库集成;
- 等等。
按照你的偏好完成列表。除了 IDE 之外,创建特定的基础架构也非常重要,例如云同步、CLI 工具、在线监控服务等。毕竟,最新的趋势不仅注重强大的功能,还注重美观的界面。
谁会从中受益?显然,那些与 API 开发和测试相关的人,尤其是开发人员和测试人员。开发人员通常只能发送单个请求并运行简单的场景,而测试人员则需要在他们的主要工具中添加更高级的功能,包括强大的测试编写功能以及在 CI 中运行测试的能力。
考虑到所有这些,我们开始设计产品。让我们看看目前为止我们取得了哪些成果。
快速入门
我们先来简单了解一下我们的应用。您可以从我们的网站下载。目前,它支持所有三大主流平台——Windows、Linux 和 MacOS。下载应用、安装并运行。首次运行,您会看到以下窗口:
点击内容区域顶部的“+”按钮,创建你的第一个请求。请求选项卡应如下所示:
让我们仔细看看。它的请求接口类似于流行的 REST 客户端接口,这使得从这类工具迁移变得更容易。让我们将第一个请求发送到https://next.json-generator.com/api/json/get/NJv-NT-U8
显然,回复小组没有什么让我们感到惊讶的。但你仍然需要知道的是:
- 响应主体代表一棵树,这使其更具信息量,并允许添加下面描述的一些有趣的功能。
- 有一个“断言”选项卡,其中包含针对此特定请求的测试列表。
如您所见,我们的工具可以用作一个功能齐全的 REST 客户端。但发送请求并非我们的目的。现在,我们来谈谈 TestMace 的主要功能和概念。
TestMace 的主要功能和概念
节点
TestMace 的工作流程分为不同的节点类型。前面的示例说明了RequestStep节点的工作原理。应用中现在还提供了其他一些节点类型:
- RequestStep:这是用于创建请求的节点。它只能包含一个Assertion节点作为子元素。
- 断言。用于编写测试。它只能是RequestStep节点的子节点。
- 文件夹。它允许将Folder和RequestStep节点分组在其下。
- 项目。这是一个根节点,当你启动一个新项目时会自动创建。它的功能与文件夹节点相同。
- 链接。这是指向 Folder 或 RequestStep 节点的链接。它允许重用请求和场景。
您可以在草稿(左下方面板,用于快速创建一次性请求)和项目(左上方面板)中找到节点,接下来我将向您展示。
项目
运行应用程序后,您会在屏幕左上角看到“项目”行。这是项目树的根目录。运行项目时,会创建一个临时项目,其路径取决于您的操作系统。您可以随时更改它。
该项目的主要目的是让您能够将草稿保存在文件系统中,通过版本控制系统进行同步,在 CI 中运行场景,审查更改等。
变量
变量是我们应用程序的核心机制之一。使用过类似 TestMace 工具的用户可能已经了解它了。变量是一种保存共享数据和节点间通信的方式。
Postman 和 Insomnia 中的环境变量就是一个很好的例子。但我们的扩展不止于此。在 TestMace 中,您可以在节点级别定义变量。任何节点都可以。此外,还提供了从父元素继承变量并在子元素中覆盖变量的机制。此外,还有几个默认变量,其名称以 $ 开头。以下是其中一些:
$prevStep
– 对前一个节点变量的引用;$nextStep
– 对下一个节点变量的引用;$parent
– 对父节点变量的引用;$response
– 服务器响应;$env
– 当前环境变量;$dynamicVar
– 动态变量,在场景或请求运行期间创建。$env
基本上只是项目节点变量,但每个环境的变量设置都不同。
您可以使用 访问变量${variable_name}
。该变量的值可能包含另一个变量,甚至是一个表达式。例如,url 变量的值可能如下所示:
http://${host}:${port}/${endpoint}
值得一提的是,您可以在运行脚本时分配变量。例如,成功登录后,保存来自服务器的授权数据(令牌或完整标头)通常很重要。TestMace 允许您将这些数据存储在父级的动态变量中。为了避免与现有的静态变量冲突,动态变量被放置在一个单独的对象中—— $dynamicVar
。
场景
利用上述功能,您可以运行请求场景。例如,创建实体->请求实体->删除实体。在这种情况下,您可以使用 Folder 节点将多个 RequestStep 节点分组。
自动完成功能和表达式值突出显示
为了更方便地使用变量,我们添加了自动完成功能和变量值高亮显示功能,可以显示每个变量的值。一图胜千言:
请注意,不仅变量,而且诸如标头、某些标头的值(例如 Cotent-Type)和协议等内容都会自动补全。随着我们产品的开发,此列表会定期更新。
撤消/重做
撤消/重做更改是一项实用功能,但并非所有工具(包括 API 工具)都自带此功能。我们就是来改变它的!撤消/重做功能适用于整个项目,它不仅允许您撤消对特定节点的更改,还允许您撤消该节点的创建、删除、移动等操作。最关键的操作需要确认。
创建测试
断言节点负责创建测试。它的主要功能之一是无需编程即可使用内置编辑器创建测试。
断言节点由多个断言组成,每个断言都有自己的类型。断言节点有以下几种类型:
- 比较值——它只是比较两个值。我们有几个比较运算符:
equal to
,not equal to
,greater than
,greater than or equal to
,less than
,less than or equal to
。 - 包含值——检查字符串中是否存在子字符串。
- XPath——通过选择器检查 XML 中是否存在某个值。
- JavaScript 断言——一个随机的 JavaScript 脚本,成功时返回 true,失败时返回 false。
请注意,只有后者需要一些编程技能,其他三个都是借助图形用户界面创建的。以下是创建比较值断言对话框的示例:
从响应中快速创建断言将是锦上添花。看看这个!
然而,这些断言显然有一定的局限性,所以你可以使用 JavaScript 断言。TestMace 提供了一个良好的环境,它具有自动完成功能、语法高亮,甚至静态分析器。
API 描述
TestMace 不仅允许使用 API,还允许编写文档。API 描述本身具有层级结构,与项目完美契合。此外,您还可以导入 Swagger 2.0 / OpenAPI 3.0 格式的 API 描述。API 描述并非孤立存在,而是与项目完全集成:支持 URL、HTTP 标头和查询参数的自动补全,并且我们计划添加测试来检查响应是否与 API 描述匹配。
节点共享
假设您需要与同事共享一个存在 bug 的请求或场景,或者只是将其附加到 bug 中。TestMace 可以帮您实现这一点:它允许您序列化 URL 中的任何节点或子树。只需复制粘贴,即可将您的请求共享给其他机器或项目。
人类可读的项目存储格式
每个节点要么存储在单独的 .yml 文件中(就像断言节点那样),要么存储在与节点同名且包含 index.yml 文件的文件夹中。
上例中请求的文件如下所示:
children: []
variables: {}
type: RequestStep
assignVariables: []
requestData:
request:
method: GET
url: 'https://next.json-generator.com/api/json/get/NJv-NT-U8'
headers: []
disabledInheritedHeaders: []
params: []
body:
type: Json
jsonBody: ''
xmlBody: ''
textBody: ''
formData: []
file: ''
formURLEncoded: []
strictSSL: Inherit
authData:
type: inherit
name: Scratch 1
如你所见,它完全可读。如有需要,你可以轻松地手动编辑它。
目录层次结构与节点层次结构相同。例如,此场景:
在文件系统中映射到以下结构(仅显示目录层次结构,但应该很清楚):
这简化了项目审查流程。
从 Postman 导入
读完这些,你们中的一些人可能想尝试一下我们的新产品(不是吗?),甚至想把它用在你的项目中(为什么不呢)。好吧,你肯定在犹豫,因为你已经在 Postman 中完成了所有工作。在这种情况下,TestMace 支持从 Postman导入集合。目前它还没有测试,但我们可能会在未来的版本中将其包含在内。
我们的计划
希望大家读完这些之后,对我们的产品感兴趣。这仅仅是个开始!目前我们正全力投入开发,接下来我会告诉大家我们接下来的计划。
云同步
这是最理想的功能之一。现在我们建议您使用版本控制系统,努力使我们应用中的所有内容都与之兼容。但是,有些人可能对此工作流程不太满意,因此我们计划添加您之前使用的云同步机制。
命令行界面
正如我之前提到的,很难想象任何 IDE 产品无法与现有项目或工作流集成。CLI 对于将用 TestMace 编写的测试集成到持续集成流程至关重要。我们目前正在开发它,但在早期版本中,项目运行时会生成一个简单的控制台报告。未来您将看到 JUnit 格式的报告。
插件系统
尽管我们的产品功能齐全,但无法涵盖所有可能的用例。每个项目都是独一无二的,并且可能存在太多特定任务。因此,我们一直在考虑添加用于插件开发的 SDK,以便每个用户都能满足自己的需求。
新的节点类型
某些用例可能需要比现有节点类型更多的节点类型。我们计划添加:
- 脚本节点,使用 JS 和相应的 API 进行数据转换和存储。这种节点类型可能适合在 Postman 中编写类似预请求和后请求脚本的内容;
- GraphQL 节点用于 graphql 支持;
- 自定义断言节点来扩展项目中现有的断言集;该列表肯定还不完整,您的反馈将帮助我们更新它。
常问问题
你们的产品和 Postman 有何不同?
- 节点概念允许无限制地扩展您的产品功能。
- 项目的人类可读格式及其在文件系统中的存储使得版本控制系统的使用变得更加容易。
- 无需编程即可在测试编辑器中创建测试并获得高级 js 支持(自动完成功能、静态分析器)。
- 更复杂的自动完成功能和当前变量值的突出显示。
这是一个开源产品吗?
不,源文件不可用,但将来我们正在考虑添加此选项。
你靠什么生活?:)
除了免费版,我们很快还会推出付费版。付费版将首先包含一些需要服务器端的功能,例如同步。
结论
我们正在努力最终发布 TestMace 的稳定版本。我们收到了首批用户的积极反馈,因此您可以放心试用我们的产品。我们也非常感谢您的反馈,因为如果没有与社区的密切合作,就不可能创造出一款优秀的工具。联系我们:
- 官方网站:https://testmace.com
- 电报:https://t.me/testmace
- Slack:https://testmaceslackin.herokuapp.com
- 脸书:https://www.facebook.com/testmace
- 问题跟踪器:https://github.com/TestMace/TestMace-issues
我们期待您的评论!
文章来源:https://dev.to/dimansny/we-built-an-ide-to-work-with-api-design-here-s-what-we-did-5dhe