使用OpenAPI可复用组件创建可重用的测试和脚本

本文详细介绍了如何在OpenAPI定义中使用可复用组件存储Postman测试脚本,通过Postman API检索并执行这些脚本的方法,包括创建自定义组件、引用脚本的具体步骤以及该解决方案的优缺点分析。

在编程中,“hacking"历来意味着让某物做它原本不打算做的事情,比如用麦片盒奖品中的哨子向付费电话播放音调以获得免费长途通话。如今,它也指为问题找到不优雅的解决方案。这个词名声不好,因为它通常意味着恶意或犯罪活动。但许多公司提供公共API,使开发人员能够拼凑自己的定制解决方案,即使这些变通方法有点"hack”。

例如,如果用户界面不适应特定用例,并且您无法控制发布哪些功能以及何时发布,那么是时候发挥创造力了。API是创建适合您的变通解决方案的机会。

可重用测试和脚本的替代解决方案

Postman用户曾询问是否可以重用测试和脚本。Postman中没有按钮或部分写着"在此处存储您自己的可重用脚本",但有很多方法可以实现这一点。

一些可能适用于您特定情况的替代解决方案是:

  • 创建集合级别或文件夹级别的脚本,以在集合或文件夹中的每个请求运行时使用
  • 将脚本存储在全局变量中以便在工作空间内使用
  • 将脚本存储在环境变量中以便与不同集合一起使用
  • 在集合开头使用任何范围的Postman变量设置实用函数,然后可以在整个集合中使用
  • 访问本地文件系统以获取保存在计算机上的脚本
  • 在OpenAPI定义的可重用组件中存储脚本

在本文中,我们将更详细地探讨最后一个选项。

在OpenAPI的可重用组件中存储脚本

OpenAPI是推动API优先趋势的最流行的API定义格式。OpenAPI中的可重用组件是设计和记录API的强大功能。我们现在不探讨这种能力,但如果您有兴趣了解更多信息,请查看重用错误模式的示例。

在本文中,我们依赖可重用组件来存储脚本和测试,然后在需要时使用Postman API检索它们。

在OpenAPI可重用组件中创建脚本并在集合中引用这些脚本。

创建脚本

让我们在API定义的自定义组件中保存脚本。

  1. 创建API定义:在Postman中,选择侧边栏中的API,然后选择+。输入新API的名称,然后继续而不使用存储库。为您的API创建新的API定义,并从零开始编写定义。将定义配置为OpenAPI 3.0,YAML格式,并检查使用样板(预定义模板)的选项。

  2. 创建自定义组件:在名为index.yaml的生成文件中,向下滚动到名为components的部分。在components下创建一个以x-前缀开头的自定义组件。添加脚本、测试或您想要存储的任何其他数据的名称。添加描述,即您想要存储为文本的代码。请参阅此示例中的第38至49行。可选地,添加类型或其他元数据,用于提醒读者和您自己关于此代码。

使用x-前缀创建自定义组件。

引用脚本

让我们检索自定义脚本并在请求脚本中执行它。

步骤1:启用YAML解析:将此JavaScript的YAML解析器的源代码存储在名为yaml-js的全局变量中。换句话说,将此代码复制并粘贴到全局变量编辑器中:

将外部库的源代码存储为全局变量,以便在Postman脚本中使用。

然后,在请求的Tests选项卡下,导入yaml-js以便在脚本中使用:

导入yaml-js以便在脚本中使用。

步骤2:检索API定义:使用pm.sendRequest()通过在前几步中创建的Postman API检索我们的API定义。下面屏幕截图中的示例显示apiId和postman-api-key存储为集合变量。

使用pm.sendRequest()检索API定义。

步骤3:使用可重用组件:一旦我们从API定义中检索到可重用组件,就可以使用像eval()这样的函数来评估表示为字符串的JavaScript代码。注意:使用eval()存在很大的安全风险,因此请确保您知道正在运行什么代码。

确认脚本按预期执行,例如记录到控制台、运行测试和递增整数。

在Postman中尝试

通过单击"Run in Postman"按钮将集合分叉到您自己的工作空间。

  1. 分叉集合:通过单击"Run in Postman"按钮将上面的示例集合分叉到您自己的工作空间。

  2. 创建API定义:在您自己的工作空间中创建新的样板API定义,并确保包括从此示例中看到的第38至49行的代码。

  3. 定义变量:将上一步中的API ID和您的Postman API密钥添加为集合变量。将此YAML解析器的源代码存储在名为yaml-js的全局变量中。

  4. 确认脚本按预期工作:发送调用使用脚本查看组件的实际效果。

  5. 更新API以自定义函数或添加新函数

自定义您自己的组件

评估适用于您用例的变通方案

此解决方案的哪些部分运作良好?

  • 您可以使用OpenAPI定义中的x-前缀组织自定义脚本组,例如函数、测试和其他脚本。
  • OpenAPI定义已经在Postman中,因此您可以在不切换上下文的情况下在Postman中添加、编辑和运行新代码。
  • 您可以在团队工作空间中与团队成员共享这些可重用组件。

此解决方案的哪些部分运作不佳?

  • 这不是OpenAPI定义中可重用组件的预期用途。
  • 可重用组件不是在文本编辑器中编写的,因此缺少JavaScript的语法高亮和格式。更容易将代码复制并粘贴到API定义中。
  • eval()构成重大安全风险,用户可以运行恶意代码或具有意外后果的代码。

这满足您的特定用例吗?如果没有,这不是解决此问题的唯一方法。例如,YAML解析器保存为在工作空间内可用的全局变量,但我们也可以调用CDN来检索库的源代码。我们还使用Postman API检索包含可重用组件的API定义,但我们可以访问本地文件系统以获取保存的脚本。

请随意探索上面列出的一些其他替代方案。并在下面的评论中告诉我们您在Postman中使用的一些最喜欢的hack。

技术评审:Ian Douglas 最初发布于 https://blog.postman.com,2023年2月9日。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计