TestMace - 一个用于处理 API 的强大 IDE

大家好! 今天,我们想向 IT 公众展示我们的产品 - 一个用于使用 API 的 IDE 测试锤。 也许你们中的一些人已经了解我们 以前的文章。 然而,还没有对该工具进行全面的审查,因此我们解决了这个不幸的缺点。

TestMace - 一个用于处理 API 的强大 IDE

动机

事实上,我想从我们如何来到这个生活并决定创建我们自己的工具来使用 API 进行高级工作开始。 让我们首先列出一个产品应该具备的功能,在我们看来,我们可以说它是一个“使用 API 的 IDE”:

  • 创建并执行查询和脚本(查询序列)
  • 编写各种测试
  • 测试生成
  • 使用 API 描述,包括从 Swagger、OpenAPI、WADL 等格式导入。
  • 模拟请求
  • 对一种或多种语言编写脚本的良好支持,包括与流行库的集成
  • 等等

该列表可以扩展以满足您的口味。 而且,不仅要创建IDE本身,还要创建一定的基础设施,例如云同步、命令行工具、在线监控服务等。 最后,近年来的趋势决定了我们不仅需要应用程序的强大功能,而且还需要其令人愉悦的界面。

谁需要这样的工具? 显然,所有至少以某种方式与 API 开发和测试有联系的人都是开发人员和测试人员 =)。 此外,如果对于前者来说,执行单个查询和简单脚本通常就足够了,那么对于测试人员来说,这是主要工具之一,除其他外,它应该包括一个强大的机制,用于编写测试并能够在其中运行测试CI。

因此,遵循这些指导方针,我们开始创建我们的产品。 让我们看看现阶段我们取得了哪些成果。

快速启动

让我们从初次了解该应用程序开始。 你可以下载它 在我们的网站上。 目前,所有 3 个主要平台均受支持 - Windows、Linux、MacOS。 下载、安装、启动。 当您第一次启动它时,您可能会看到以下窗口:

TestMace - 一个用于处理 API 的强大 IDE

单击内容区域顶部的加号以创建您的第一个请求。 查询选项卡如下所示:

TestMace - 一个用于处理 API 的强大 IDE

让我们更详细地看看它。 请求接口与流行的 REST 客户端的接口非常相似,这使得从类似工具的迁移变得更容易。 让我们向 url 发出第一个请求 https://next.json-generator.com/api/json/get/NJv-NT-U8

TestMace - 一个用于处理 API 的强大 IDE

总的来说,乍一看,反应面板也没有给人任何惊喜。 不过,我想提请大家注意以下几点:

  1. 响应的主体以树的形式表示,它首先添加信息内容,其次允许您添加一些有趣的功能,如下所示
  2. 有一个断言选项卡,它显示给定请求的测试列表

正如您所看到的,我们的工具可以用作方便的休息客户端。 然而,如果它的功能仅限于发送请求,我们就不会在这里。 接下来,我将概述 TestMace 的基本概念和功能。

基本概念和特点

节点

TestMace 功能分为不同类型的节点。 在上面的例子中,我们演示了RequestStep节点的操作。 但是,应用程序中现在还提供以下类型的节点:

  • 请求步骤。 您可以通过该节点创建请求。 它只能有一个 Assertion 节点作为子元素。
  • 断言。 该节点用于编写测试。 只能是RequestStep 节点的子节点。
  • 文件夹。 允许您将文件夹和 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 节点进行分组。

自动完成和表达式突出显示

为了方便地使用变量(而不仅仅是变量),自动完成是必要的。 当然,突出显示表达式的值可以更轻松、更方便地阐明特定变量的含义。 正是这种情况,百闻不如一见:

TestMace - 一个用于处理 API 的强大 IDE

值得注意的是,自动补全不仅针对变量实现,还针对标头、某些标头的值(例如 Content-Type 标头的自动补全)、协议等实现。 随着应用程序的增长,该列表会不断更新。

撤销重做

撤消/重做更改是一件非常方便的事情,但由于某种原因,它并没有在所有地方实现(使用 API 的工具也不例外)。 但我们不是其中之一!)我们在整个项目中实现了撤消/重做,这使您不仅可以撤消对特定节点的编辑,还可以撤消其创建、删除、移动等。 最关键的操作需要确认。

创建测试

断言节点负责创建测试。 主要功能之一是无需编程即可使用内置编辑器创建测试的能力。

断言节点由一组断言组成。 每个断言都有自己的类型;目前有多种类型的断言

  1. 比较值 - 简单地比较 2 个值。 有几种比较运算符:等于、不等于、大于、大于或等于、小于、小于或等于。

  2. 包含值 - 检查字符串中子字符串的出现情况。

  3. XPath - 检查 XML 中的选择器是否包含特定值。

  4. JavaScript 断言是任意 JavaScript 脚本,成功时返回 true,失败时返回 false。

我注意到只有最后一个需要用户的编程技能,其他 3 个断言是使用图形界面创建的。 例如,创建比较值断言的对话框如下所示:

TestMace - 一个用于处理 API 的强大 IDE

锦上添花的是根据响应快速创建断言,只需看看它!

TestMace - 一个用于处理 API 的强大 IDE

但是,此类断言有明显的局限性,您可能需要使用 javascript 断言来克服这些限制。 这里 TestMace 还提供了一个舒适的环境,具有自动完成、语法突出显示甚至静态分析器。

接口说明

TestMace 不仅允许您使用 API,还允许您记录它。 此外,描述本身也具有层次结构,并有机地融入项目的其余部分。 此外,目前还可以从 Swagger 2.0 / OpenAPI 3.0 格式导入 API 描述。 描述本身并不只是沉重的负担,而是与项目的其余部分紧密结合,特别是可以自动完成 URL、HTTP 标头、查询参数等,将来我们计划添加测试确保响应符合 API 描述。

共享节点

案例:您想与同事共享有问题的请求甚至整个脚本,或者只是将其附加到错误中。 TestMace 也涵盖了这种情况:该应用程序允许您序列化 URL 中的任何节点甚至子树。 复制粘贴,您可以轻松地将请求转移到另一台机器或项目。

人类可读的项目存储格式

目前,每个节点都存储在一个扩展名为 yml 的单独文件中(与断言节点的情况一样),或者存储在一个包含节点名称和 index.yml 文件的文件夹中。
例如,我们在上面的评论中创建的请求文件如下所示:

索引.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

正如你所看到的,一切都非常清楚。 如果需要,可以轻松地手动编辑此格式。

文件系统中文件夹的层次结构完全重复了项目中节点的层次结构。 例如,像这样的脚本:

TestMace - 一个用于处理 API 的强大 IDE

将文件系统映射为如下结构(仅展示了文件夹层次结构,但本质已经清晰)

TestMace - 一个用于处理 API 的强大 IDE

这使得项目审查过程更加容易。

从邮递员导入

阅读完上述所有内容后,一些用户会想要尝试(对吗?)新产品或(这不是开玩笑!)在他们的项目中完全使用它。 然而,同一个Postman中的大量开发可以阻止迁移。 对于这种情况,TestMace 支持从 Postman 导入集合。 目前支持未经测试的导入,但不排除将来支持它们。

计划

我希望到目前为止阅读过的许多人都喜欢我们的产品。 然而,这还不是全部! 该产品的开发工作正在紧锣密鼓地进行中,以下是我们计划很快添加的一些功能。

云同步

最受需求的功能之一。 目前,我们建议使用版本控制系统进行同步,为此我们正在使格式对于此类存储更加友好。 然而,这个工作流程并不适合所有人,因此我们计划通过我们的服务器添加许多人熟悉的同步机制。

CLI

如上所述,IDE 级产品离不开与现有应用程序或工作流程的各种集成。 CLI 正是将 TestMace 编写的测试集成到持续集成过程中所需要的。 CLI 的工作正在全面展开;早期版本将通过简单的控制台报告启动该项目。 将来我们计划添加 JUnit 格式的报告输出。

插件系统

尽管我们的工具非常强大,但需要解决方案的案例却是无限的。 毕竟,有些任务是特定于特定项目的。 这就是为什么未来我们计划添加一个用于开发插件的 SDK,每个开发人员都可以根据自己的喜好添加功能。

扩大节点类型范围

这组节点并没有涵盖用户所需的所有情况。 计划新增节点:

  • 脚本节点——使用js和相应的API转换和放置数据。 使用这种类型的节点,您可以在 Postman 中执行诸如预请求和后请求脚本之类的操作。
  • GraphQL 节点 - graphql 支持
  • 自定义断言节点 - 将允许您扩展项目中现有断言集
    当然,这不是最终列表;它会根据您的反馈等因素不断更新。

常见问题

你和邮递员有什么不同?

  1. 节点的概念,允许您几乎无限地扩展项目的功能
  2. 人类可读的项目格式,并将其保存在文件系统中,这简化了使用版本控制系统的工作
  3. 无需编程即可创建测试的能力以及测试编辑器中更高级的 js 支持(自动完成、静态分析器)
  4. 高级自动完成和突出显示变量的当前值

这是开源产品吗?

不,目前消息来源已关闭,但将来我们正在考虑开放消息来源的可能性

你靠什么生活?)

除了免费版本之外,我们还计划发布该产品的付费版本。 它主要包括需要服务器端的事情,例如同步。

结论

我们的项目正在突飞猛进地走向稳定版本。 然而,该产品已经可以使用了,我们早期用户的积极反馈就是证明。 我们积极收集反馈,因为如果没有与社区的密切合作,就不可能构建出一个好的工具。 您可以在这里找到我们:

官方网站

Telegram

松弛

Facebook

问题跟踪器

我们期待您的愿望和建议!

来源: habr.com

添加评论