4

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

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
4

1 回答 1

6

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

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

如果您尝试在一种情况下修改变量并期望它在下一次Scenario开始时具有该修改后的值,那么您误解了 a 的概念Scenario。只需将您的步骤合二为一Scenario,因为请考虑一下:这就是您要测试的“流程”。

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

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

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

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

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

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

于 2017-09-06T16:50:22.430 回答