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

Sau*_*abh 4 karate

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

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
Run Code Online (Sandbox Code Playgroud)

错误:

Caused by: javax.script.ScriptException: ReferenceError: "reqId" is not defined in <eval> at line number 1
Run Code Online (Sandbox Code Playgroud)

Pet*_*mas 6

使用一个Background:部分。这是一个例子

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

如果您试图在一个场景中修改一个变量,并期望它在下一个场景Scenario开始时具有该修改后的值,那么您就误解了Scenario. 只需将您的步骤合二为一Scenario,因为想一想:这就是您要测试的“流程”。

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

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

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

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

另外 - 如果可以使流程更易于阅读,则可以有一些代码重复。有关详细信息,请参阅此答案- 并阅读Google 的这篇文章

编辑:如果您想阅读另一个回答类似问题的答案:https : //stackoverflow.com/a/59433600/143475