空手道 API 测试 - 在同一功能文件中的不同场景中重用变量

Karate API Testing - Reusing variables in different scenarios in the same feature file

空手道是否支持您可以在场景中定义变量并在同一功能文件中的其他场景中重用它的功能。我尝试做同样的事情,但出现错误。在同一功能文件中重用变量的最佳方法是什么?

Scenario: Get the request Id
    * url baseUrl
    Given path 'eam'
    When method get
    Then status 200
    And def reqId = response.teams[0]resourceRequestId

Scenario: Use the above generated Id
   * url baseUrl
   * print 'From the previous Scenario: ' + reqId

错误:

Caused by: javax.script.ScriptException: ReferenceError: "reqId" is not defined in <eval> at line number 1

使用 Background: 部分。这是一个 example.

编辑:Background: 中的变量 if 将针对标准测试框架“设置”行为的每个场景重新初始化。您可以使用 hooks such as callonce - 如果您希望初始化只发生一次。

如果您试图在一种情况下修改一个变量,并期望它现在在下一个 Scenario 开始时具有修改后的值,那么您误解了 Scenario 的概念。只需将您的步骤合并为一个 Scenario,因为想一想:这就是您要测试的“flow”。

每个 Scenario 应该能够 运行 独立 。将来 Scenario-s 的执行顺序甚至可以是随机的或 运行 并行的。

另一种解释方式是 - 如果您注释掉一个 Scenario 其他的应该继续工作。

请不要将 Scenario 视为“记录”测试重要部分的方法。您始终可以使用注释(例如 # foo bar)。一些团队假设每个 HTTP“端点”都应该存在于一个单独的 Scenario 中——但绝对不推荐这样做。查看 Hello World example 本身,它故意显示 2 个调用,一个 POST 和一个 GET !

您可以使用 call 轻松重用代码,因此您不必担心代码重复是否会成为问题。

另外 - 有一些代码重复是很好的,如果它使流程更容易阅读的话。参见 - and also read this article by Google

编辑:如果您想阅读另一个回答类似问题的答案: