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
您可以使用户轻松地重用代码,因此不必担心代码重复是否会成为问题
此外,如果代码复制可以使流程更易于阅读,那么也可以进行一些代码复制。请参阅-并阅读
编辑:如果您想阅读另一个回答类似问题的答案:那么如果我们在后台声明一个变量,我们可以在一个场景中更新它,更新后的值可以被后续场景使用?@PeterThomas如何更新后台变量?由于在每个场景之前都会更新后台,因此会将其初始化回上一个变量。@PeterThomas,授权标头未传递到下一个请求。如何做到这一点?@Venkat您确实需要阅读文档: