大家好,就到这里啦
分裂成节点
如果您使用 Postman,那么您就会知道请求接口包含所有必要的功能。 有脚本、测试,实际上还有查询本身。 这对于初学者来说比较容易,但是在大场景下这种方式并不灵活。 如果您想创建多个查询并对它们执行聚合该怎么办? 如果您想在没有请求的情况下执行脚本或连续执行多个逻辑上独立的脚本怎么办? 毕竟,将测试与常规实用程序脚本分开是个好主意。 此外,“将所有功能添加到一个节点中”的方法不可扩展 - 接口很快就会变得过载。
TestMace 最初将所有功能划分为不同类型的节点。 您想提出请求吗? 这是给你的
人类可读的项目格式
TestMace 和 Postman 之间在存储方式上存在概念上的差异。 在 Postman 中,所有请求都存储在本地存储中的某个位置。 如果需要在多个用户之间共享请求,那么您需要使用内置同步。 事实上,这是一种普遍接受的方法,但并非没有缺点。 数据安全怎么样? 毕竟,一些公司的政策可能不允许第三方存储数据。 然而,我们认为 TestMace 可以提供更好的东西! 这项改进的名称是“人类可读的项目格式”。
首先,在 TestMace 中,原则上有一个“项目”实体。 该应用程序最初是为了在版本控制系统中存储项目而开发的:项目树几乎一对一地投影到文件结构上,使用 yaml 作为存储格式(没有额外的括号和逗号),并且每个节点的文件表示在带有注释的文档中进行了详细描述。 但在大多数情况下,您不会看那里 - 所有字段名称都有逻辑名称。
这给用户带来了什么? 这使您可以使用熟悉的方法非常灵活地改变团队的工作流程。 例如,开发人员可以将项目存储在与后端相同的存储库中。 在分支中,除了更改代码库本身之外,开发人员还可以更正现有的查询脚本和测试。 将更改提交到存储库(git、svn、mercurial - 无论您最喜欢什么)后,CI(您最喜欢的,不是由任何人强加的)启动我们的控制台实用程序
正如您所看到的,TestMace 并没有强加其生态系统和范式。 相反,它很容易融入既定的流程。
动态变量
TestMace 遵循无代码概念:如果问题可以在不使用代码的情况下解决,我们会尝试提供这个机会。 使用变量正是大多数情况下无需编程即可完成的功能。
示例:我们收到了来自服务器的响应,我们希望将部分响应保存到变量中。 在 Postman 中,在测试脚本(这本身很奇怪)中,我们会编写如下内容:
var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("data", jsonData.data);
但在我们看来,为这样一个简单且频繁使用的场景编写脚本看起来是多余的。 因此,在 TestMace 中,可以使用图形界面将一部分答案分配给变量。 看看它是多么简单:
现在,随着每个请求,这个动态变量都会更新。 但您可以反对,认为 Postman 方法更灵活,不仅允许您进行分配,还允许您执行一些预处理。 以下是修改前面示例的方法:
var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("data", CryptoJS.MD5(jsonData.data));
好吧,为此目的 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 中,该函数由以下命令执行
1) 创建查询或脚本
2)创建Link类型的节点
3) 在参数中,指定指向第一步中创建的脚本的链接
在更高级的版本中,您可以指定将脚本中的哪些动态变量传递到相对于链接的更高级别。 听起来很混乱? 假设我们创建了一个名为 创建帖子,其中动态变量被分配给该节点 postId
。 现在在链接节点中 创建帖子链接 您可以显式指定变量 postId
分配给祖先 创建帖子链接。 这种机制(同样是在编程语言中)可用于从“函数”返回结果。 总的来说,这很酷,DRY 正在全面展开,而且没有一行代码被损坏。
至于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 进行比较是没有意义的 - 自动补全仅限于变量、标头及其值的静态列表(如果我忘记了什么,请纠正我)。 脚本不会自动完成:)
结论
十月标志着我们产品开发开始的一年。 在这段时间里,我们做了很多事情,并且在某些方面赶上了竞争对手。 但无论如何,我们的目标是打造一个真正方便的 API 工具。 我们还有很多工作要做,以下是我们来年项目发展的粗略计划:
您的反馈将使我们能够更好地浏览丰富的功能,您的支持给了我们力量和信心,让我们相信我们正在做正确的事情。 恰巧今天对我们的项目来说是一个重要的日子——TestMace 发布的日子
来源: habr.com