为什么 TestMace 比 Postman 更好

为什么 TestMace 比 Postman 更好

大家好,就到这里啦 测试锤! 也许很多人认识我们是从 наших 以前 用品。 对于那些刚刚加入的人:我们正在开发一个 IDE 来使用 TestMace API。 在将 TestMace 与竞争产品进行比较时,最常见的问题是“你与 Postman 有何不同?” 我们决定是时候对这个问题给出详细的答案了。 下面我们概述了我们的优势 邮差.

分裂成节点

如果您使用 Postman,那么您就会知道请求接口包含所有必要的功能。 有脚本、测试,实际上还有查询本身。 这对于初学者来说比较容易,但是在大场景下这种方式并不灵活。 如果您想创建多个查询并对它们执行聚合该怎么办? 如果您想在没有请求的情况下执行脚本或连续执行多个逻辑上独立的脚本怎么办? 毕竟,将测试与常规实用程序脚本分开是个好主意。 此外,“将所有功能添加到一个节点中”的方法不可扩展 - 接口很快就会变得过载。

TestMace 最初将所有功能划分为不同类型的节点。 您想提出请求吗? 这是给你的 请求步骤 节点你想写一个脚本吗? 这是给你的 脚本 节点需要测试吗? 请 - 断言 节点哦,是的,你仍然可以把这整个事情包起来 节点所有这些都可以轻松地相互结合。 这种方式不仅非常灵活,而且按照单一职责的原则,可以让你只使用当前真正需要的东西。 如果我只想发出请求,为什么需要脚本和测试?

人类可读的项目格式

TestMace 和 Postman 之间在存储方式上存在概念上的差异。 在 Postman 中,所有请求都存储在本地存储中的某个位置。 如果需要在多个用户之间共享请求,那么您需要使用内置同步。 事实上,这是一种普遍接受的方法,但并非没有缺点。 数据安全怎么样? 毕竟,一些公司的政策可能不允许第三方存储数据。 然而,我们认为 TestMace 可以提供更好的东西! 这项改进的名称是“人类可读的项目格式”。

首先,在 TestMace 中,原则上有一个“项目”实体。 该应用程序最初是为了在版本控制系统中存储项目而开发的:项目树几乎一对一地投影到文件结构上,使用 yaml 作为存储格式(没有额外的括号和逗号),并且每个节点的文件表示在带有注释的文档中进行了详细描述。 但在大多数情况下,您不会看那里 - 所有字段名称都有逻辑名称。

这给用户带来了什么? 这使您可以使用熟悉的方法非常灵活地改变团队的工作流程。 例如,开发人员可以将项目存储在与后端相同的存储库中。 在分支中,除了更改代码库本身之外,开发人员还可以更正现有的查询脚本和测试。 将更改提交到存储库(git、svn、mercurial - 无论您最喜欢什么)后,CI(您最喜欢的,不是由任何人强加的)启动我们的控制台实用程序 testmace-cli,并将执行后收到的报告(例如,junit 格式,testmace-cli 中也支持)发送到相应的系统。 而上述的安全问题也不再是问题。

正如您所看到的,TestMace 并没有强加其生态系统和范式。 相反,它很容易融入既定的流程。

动态变量

TestMace 遵循无代码概念:如果问题可以在不使用代码的情况下解决,我们会尝试提供这个机会。 使用变量正是大多数情况下无需编程即可完成的功能。

示例:我们收到了来自服务器的响应,我们希望将部分响应保存到变量中。 在 Postman 中,在测试脚本(这本身很奇怪)中,我们会编写如下内容:

var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("data", jsonData.data);

但在我们看来,为这样一个简单且频繁使用的场景编写脚本看起来是多余的。 因此,在 TestMace 中,可以使用图形界面将一部分答案分配给变量。 看看它是多么简单:

为什么 TestMace 比 Postman 更好

现在,随着每个请求,这个动态变量都会更新。 但您可以反对,认为 Postman 方法更灵活,不仅允许您进行分配,还允许您执行一些预处理。 以下是修改前面示例的方法:

var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("data", CryptoJS.MD5(jsonData.data));

好吧,为此目的 TestMace 有 脚本 节点,涵盖了这种场景。 为了重现前面的情况,但已经由 TestMace 执行,您需要在请求后创建一个脚本节点,并使用以下代码作为脚本:

const data = tm.currentNode.prev.response.body.data;
tm.currentNode.parent.setDynamicVar('data', crypto.MD5(data));

正如您所看到的,节点的组合在这里也发挥了很好的作用。 对于如上所述的简单情况,您可以简单地分配表达式 ${crypto.MD5($response.data)} 通过 GUI 创建的变量!

通过 GUI 创建测试

Postman 允许您通过编写脚本来创建测试(对于 Postman,这是 JavaScript)。 这种方法有很多优点——几乎无限的灵活性、现成解决方案的可用性等。

然而现实往往是这样的(我们不是这样,生活就是这样),一个测试人员没有编程能力,但他现在就想给团队带来好处。 对于这种情况,遵循无代码概念,TestMace 允许您通过 GUI 创建简单的测试,而无需编写脚本。 例如,创建比较值是否相等的测试的过程如下所示:

为什么 TestMace 比 Postman 更好

然而,在图形编辑器中创建测试并不能消除这种可能性 在代码中编写测试。 所有相同的库都在这里,就像在脚本节点中一样,并且 湾仔 用于编写测试。

当某个查询甚至整个脚本需要在项目的不同部分执行多次时,经常会出现这种情况。 此类请求的一个示例可以是自定义多阶段授权,将环境带到所需的状态等。 一般来说,就编程语言而言,我们希望拥有可以在应用程序的不同部分中重用的函数。 在 TestMace 中,该函数由以下命令执行 链接 节点它非常容易使用:
1) 创建查询或脚本
2)创建Link类型的节点
3) 在参数中,指定指向第一步中创建的脚本的链接

在更高级的版本中,您可以指定将脚本中的哪些动态变量传递到相对于链接的更高级别。 听起来很混乱? 假设我们创建了一个名为 创建帖子,其中动态变量被分配给该节点 postId。 现在在链接节点中 创建帖子链接 您可以显式指定变量 postId 分配给祖先 创建帖子链接。 这种机制(同样是在编程语言中)可用于从“函数”返回结果。 总的来说,这很酷,DRY 正在全面展开,而且没有一行代码被损坏。

为什么 TestMace 比 Postman 更好

至于Postman,有一个重用请求的功能请求 自2015年起悬挂,而且似乎还有 一些提示他们正在解决这个问题。 当然,在目前的形式下,Postman 能够更改执行线程,这在理论上可能可以实现类似的行为,但这更像是一种肮脏的黑客行为,而不是真正有效的方法。

其他差异

  • 更好地控制变量的范围。 Postman 中可以定义变量的最小范围是集合。 TestMace 允许您为任何查询或文件夹定义变量。 在 Postman 中,共享集合允许您仅导出集合,而在 TestMace 中,共享适用于任何节点
  • TestMace 支持 可继承的标头,默认情况下可以替换为子查询。 邮递员对此有一些看法: 任务,甚至已经关闭,但它是作为解决方案提供的...... 使用脚本。 在 TestMace 中,这一切都是通过 GUI 配置的,并且有一个选项可以选择禁用特定后代中继承的标头
  • 撤销重做。 不仅在编辑节点时有效,而且在移动、删除、重命名和其他更改项目结构的操作时也有效
  • 与 Postman 不同,附加到请求的文件成为项目的一部分并与其一起存储,同时完美同步。 (是的,您不再需要每次启动时手动选择文件并将其传输给存档中的同事)

已经推出的功能

我们无法抗拒在下一个版本中揭开保密面纱的诱惑,尤其是当功能非常美味并且已经在进行预发布完善时。 那么,我们见面吧。

功能

如您所知,Postman 使用所谓的动态变量来生成值。 他们的名单令人印象深刻 绝大多数函数都用于生成假值。 例如,要生成随机电子邮件,您需要编写:

{{$randomEmail}}

但是,由于这些是变量(尽管是动态的),因此它们不能用作函数:它们不可参数化,因此无法从字符串中获取哈希值。

我们计划向 TestMace 添加“诚实”功能。 在 ${} 内部不仅可以访问变量,还可以调用函数。 那些。 如果您需要生成臭名昭著的假电子邮件,我们将简单地写

${faker.internet.email()}

除了它是一个函数这一事实之外,您还会注意到可以调用对象上的方法。 我们拥有一组逻辑分组的对象,而不是一大堆动态变量的平面列表。

如果我们想计算一个字符串的哈希值怎么办? 容易地!

${crypto.MD5($dynamicVar.data)}

您会注意到您甚至可以将变量作为参数传递! 此时,好奇的读者可能会怀疑出了什么问题......

在表达式中使用 JavaScript

...并且有充分的理由! 当函数的需求形成时,我们突然得出结论:有效的javascript应该用表达式来编写。 所以现在你可以自由地编写如下表达式:

${1 + '' + crypto.MD5('asdf')}

所有这一切都无需脚本,就在输入字段中!

至于Postman,在这里你只能使用变量,当你尝试编写最轻微的表达式时,验证器会咒骂并拒绝计算它。

为什么 TestMace 比 Postman 更好

高级自动完成

目前 TestMace 有一个标准的自动完成功能,如下所示:

为什么 TestMace 比 Postman 更好

这里,除了自动完成行之外,还指示该行属于什么。 此机制仅适用于用方括号 ${} 括起来的表达式。

如您所见,已添加视觉标记来指示变量的类型(例如字符串、数字、数组等)。 您还可以更改自动完成模式(例如,您可以选择使用变量或标题自动完成)。 但这还不是最重要的!

首先,自动补全功能甚至可以在表达式中发挥作用(如果可能)。 它看起来是这样的:

为什么 TestMace 比 Postman 更好

其次,自动完成功能现在可以在脚本中使用。 看看它是如何工作的!

为什么 TestMace 比 Postman 更好

将此功能与 Postman 进行比较是没有意义的 - 自动补全仅限于变量、标头及其值的静态列表(如果我忘记了什么,请纠正我)。 脚本不会自动完成:)

结论

十月标志着我们产品开发开始的一年。 在这段时间里,我们做了很多事情,并且在某些方面赶上了竞争对手。 但无论如何,我们的目标是打造一个真正方便的 API 工具。 我们还有很多工作要做,以下是我们来年项目发展的粗略计划: https://testmace.com/roadmap.

您的反馈将使我们能够更好地浏览丰富的功能,您的支持给了我们力量和信心,让我们相信我们正在做正确的事情。 恰巧今天对我们的项目来说是一个重要的日子——TestMace 发布的日子 ProductHunt。 请支持我们的项目,这对我们非常重要。 而且,今天我们的PH页面有一个诱人的优惠,而且数量有限

来源: habr.com

添加评论