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

Karate 空手道API测试-在同一功能文件中的不同场景中重用变量,karate,Karate,“空手道”是否支持这样一种功能:您可以在场景中定义变量,并在同一功能文件中的其他场景中重用它。我试着做同样的事情,但还是出错了。在同一要素文件中重用变量的最佳方法是什么 Scenario: Get the request Id * url baseUrl Given path 'eam' When method get Then status 200 And def reqId = response.teams[0]resourceRequestId S

“空手道”是否支持这样一种功能:您可以在场景中定义变量,并在同一功能文件中的其他场景中重用它。我试着做同样的事情,但还是出错了。在同一要素文件中重用变量的最佳方法是什么

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
原因:javax.script.ScriptException:ReferenceError:在第1行中未定义“reqId”

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

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

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

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

另一种解释方法是——如果你注释掉一个
场景
,其他场景应该继续工作

请不要将
场景看作是“记录”测试重要部分的一种方式。您可以随时使用注释(例如
#foo bar
)。一些团队假设每个HTTP“端点”应该位于一个单独的
场景中,但这绝对不是推荐的。看看它本身,它故意显示了两个调用,一个是
POST
,一个是
GET

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

此外,如果代码复制可以使流程更易于阅读,那么也可以进行一些代码复制。请参阅-并阅读


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

请使用
背景:
部分。这是一个例子

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

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

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

另一种解释方法是——如果你注释掉一个
场景
,其他场景应该继续工作

请不要将
场景看作是“记录”测试重要部分的一种方式。您可以随时使用注释(例如
#foo bar
)。一些团队假设每个HTTP“端点”应该位于一个单独的
场景中,但这绝对不是推荐的。看看它本身,它故意显示了两个调用,一个是
POST
,一个是
GET

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

此外,如果代码复制可以使流程更易于阅读,那么也可以进行一些代码复制。请参阅-并阅读


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

那么如果我们在后台声明一个变量,我们可以在一个场景中更新它,更新后的值可以被后续场景使用?@PeterThomas如何更新后台变量?由于在每个场景之前都会更新后台,因此会将其初始化回上一个变量。@PeterThomas,授权标头未传递到下一个请求。如何做到这一点?@Venkat您确实需要阅读文档:因此,如果我们在后台声明一个变量,我们可以通过一个场景对其进行更新,更新后的值可以被后续场景使用?@PeterThomas如何更新后台变量?由于在每个场景之前都会更新后台,因此会将其初始化回上一个变量。@PeterThomas,授权标头未传递到下一个请求。如何做到这一点?@Venkat您确实需要阅读文档: