大家好。 我们正在慢慢地走出阴影,继续撰写有关我们产品的系列文章。 后
安装
让我们从平庸开始。 该应用程序在三个平台上可用并经过实际测试 - Linux、Windows、MacOS。 您可以从以下位置下载您感兴趣的操作系统的安装程序
实验场景
我们选择以下标准场景作为我们的测试对象:
- 登录:用户-admin,密码-密码
- 添加新条目
- 我们来检查一下记录是否添加正确
我们将测试
创建项目并尝试未经授权创建实体
首先,让我们创建一个新项目(文件->新项目)。 如果您是第一次启动该应用程序,则会自动打开一个新项目。 首先,我们尝试发出创建新记录的请求(以防未经授权即可创建记录)。 从项目节点上下文菜单中选择项目 添加节点 -> 请求步骤。 将节点名称设置为 创建帖子。 结果,将在树中创建一个新节点,并且将打开该节点的选项卡。 让我们设置以下请求参数:
- 请求类型:POST
- 网址:
https://testmace-quick-start.herokuapp.com/posts - 请求正文:带有值的 json
{"title": "New testmace quick start post"}
如果一切正确,界面将如下所示:
但是,如果我们尝试满足请求,服务器将返回 401 代码,未经授权我们将无法在此服务器上获得任何内容。 嗯,总的来说,正如预期的那样)。
添加授权请求
正如已经说过的,我们有一个 POST 端点 /login
,它将 json 作为以下形式的请求正文: {"username": "<username>", "password": "<password>"}
哪里 username
и password
(再次,来自上面的介绍性段落)有含义 admin
и password
分别。 作为响应,此端点返回 json,例如 {"token": "<token>"}
。 我们将使用它来进行授权。 让我们来创建 请求步骤 带名称的节点 登录,将充当祖先 项目 节点使用拖放操作,将树中的给定节点移动到高于该节点的位置 创建帖子。 让我们为新创建的请求设置以下参数:
- 请求类型:POST
- 网址:
https://testmace-quick-start.herokuapp.com/login - 请求正文:带有值的 json
{"username": "admin", "password": "password"}
让我们执行请求并接收响应中带有令牌的第二百个代码。 像这样的东西:
重构:删除域重复
到目前为止,请求尚未链接到单个脚本中。 但这并不是唯一的缺点。 如果仔细观察,您会发现至少两个请求中的域都是重复的。 不好。 是时候重构未来脚本的这一部分了,变量将帮助我们做到这一点。
初步估计,变量与其他类似工具和编程语言中的作用相同——消除重复、增加可读性等。 您可以阅读有关变量的更多信息
让我们在项目节点级别定义一个变量 domain
有意义 https://testmace-quick-start.herokuapp.com
. 为此有必要
- 打开包含此节点的选项卡,然后单击右上角的计算器图标
- 点击 + 添加变量
- 输入变量名称和值
在我们的例子中,添加了变量的对话框将如下所示:
好的。 现在,由于继承,我们可以在任何嵌套级别的后代中使用此变量。 在我们的例子中,这些是节点 登录 и 创建帖子。 为了在文本字段中使用变量,您需要编写 ${<variable_name>}
。 例如,登录网址转换为 ${domain}/login
,分别为 创建帖子 节点 url 看起来像 ${domain}/posts
.
因此,在 DRY 原则的指导下,我们稍微改进了场景。
将令牌保存到变量中
既然我们正在讨论变量,那么让我们稍微扩展一下这个主题。 目前,如果登录成功,我们会从服务器收到一个授权令牌,在后续请求中将需要该令牌。 让我们将此标记保存到变量中。 因为变量的值将在脚本执行期间确定,我们为此使用一种特殊的机制 -
首先,让我们执行登录请求。 在选项卡中 已解析 答案,将光标移到标记上,然后在上下文菜单中(使用鼠标右键或单击按钮...调用)选择项目 分配给变量。 将出现一个对话框,其中包含以下字段:
- 途径 — 采用答案的哪一部分(在我们的例子中是
body.token
) - 当前值 — 路径上有什么值(在我们的例子中,这是令牌值)
- 变量名 — 变量名称,其中 当前值 将被保留。 在我们的例子中它将是
token
- Node — 将在哪个祖先中创建变量 变量名。 我们选择项目
完成的对话框如下所示:
现在每次执行节点时 登录 动态变量 token
将使用响应中的新值进行更新。 这个变量将被存储在 项目 节点,并且由于继承,将可供后代使用。
要访问动态变量,您必须使用 $dynamicVar
。 例如,要访问存储的令牌,您需要调用 ${$dynamicVar.token}
.
我们将授权令牌传递到请求中
在前面的步骤中,我们收到了授权令牌,我们需要做的就是添加一个标头 Authorization
有意义 Bearer <tokenValue>
在所有需要授权的请求中,包括 创建帖子。 做这件事有很多种方法:
使用第二种方法似乎很明显,但在本文的上下文中,这种方法......无趣。 嗯,真的:授权机制加减是您在其他工具中熟悉的(即使我们有类似的东西)
另一件事是默认标题! 简而言之,默认标头是继承的 HTTP 标头,除非明确禁用,否则默认情况下会将其添加到请求中。 例如,使用此功能,您可以实现自定义授权或简单地消除脚本中的重复。 让我们使用此功能在标头中传递令牌。
之前,我们谨慎地将令牌保存到动态变量中 $dynamicVar.token
在项目节点级别。 剩下的就是执行以下操作:
- 定义默认标题
Authorization
有意义Bearer ${$dynamicVar.token}
在项目节点级别。 为此,在节点的项目界面中,您需要打开一个带有默认标题的对话框(按钮 头 右上角)并添加相应的标题。 包含填充值的对话框将如下所示:
- 从登录请求中禁用此标头。 这是可以理解的:在登录时,我们还没有令牌,我们将通过此请求安装它。 因此,在tab中请求的登录界面 头 的区域中 遗传 取消选中授权标头。
就这样。 现在,授权标头将添加到项目节点子级的所有请求(登录节点除外)。 事实证明,在这个阶段我们已经准备好了一个脚本,我们所要做的就是启动它。 您可以通过选择来运行脚本 运行 在项目节点的上下文菜单中。
检查帖子创建的正确性
在此阶段,我们的脚本可以登录并使用授权令牌创建帖子。 但是,我们需要确保新创建的帖子具有正确的名称。 也就是说,本质上,剩下的就是执行以下操作:
- 通过 id 发送接收帖子的请求,
- 检查从服务器收到的名称是否与创建帖子时发送的名称匹配
让我们看一下第一步。 由于 id 值是在脚本执行期间确定的,因此您需要创建一个动态变量(我们称之为 postId
) 从节点 创建帖子 在项目节点级别。 我们已经知道如何做到这一点,只需参考 部分 将令牌保存到变量中。 剩下的就是创建一个使用此 ID 接收帖子的请求。 为此,我们创建一个 RequestStep 获取帖子 具有以下选项:
- 请求类型:GET
- 网址:${domain}/posts/${$dynamicVar.postId}
为了实现第二步,我们需要熟悉 Compare
带有运算符的断言 equal
。 有多种方法可以创建断言:
- 长的。 从 RequestStep 节点的上下文菜单手动创建 Assertion 节点。 在创建的断言节点中,添加感兴趣的断言并填写字段。
- 快速地。 使用上下文菜单创建一个断言节点以及来自 RequestStep 节点响应的断言
我们使用第二种方法。 这就是我们案例的样子。
对于那些不明白的人,这是发生的事情:
- 在节点中发起请求 获取帖子
- 在标签中 已解析 回答,调用上下文菜单并选择 创建断言 -> 对比其他款式 -> 等于
恭喜,我们已经创建了第一个测试! 很简单,不是吗? 现在您可以完全运行该脚本并享受结果。 剩下的就是稍微重构一下并将其取出 title
到一个单独的变量中。 但我们会把这个作为作业留给你)
结论
在本指南中,我们创建了一个完整的场景,同时回顾了我们产品的一些功能。 当然,我们并没有使用所有功能,在接下来的文章中我们将详细概述 TestMace 的功能。 敬请关注!
PS 对于那些懒得重现所有步骤的人,我们已经记录下来
来源: habr.com