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

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

提问人:Saurabh 提问时间:9/6/2017 更新时间:11/19/2020 访问量:17900

问:

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

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
空手道

评论


答:

9赞 Peter Thomas 9/7/2017 #1

使用一个部分。下面是一个示例Background:

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

如果您尝试在一种方案中修改变量,并希望它在下一个方案开始时具有该修改后的值,那么您误解了 .只需将您的步骤组合成一个,因为请仔细想想:这就是您要测试的“流程”。ScenarioScenarioScenario

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

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

请不要将其视为“记录”测试重要部分的一种方式。您可以随时使用注释(例如 )。一些团队认为每个 HTTP“端点”都应该单独存在 - 但绝对不建议这样做。看看 Hello World 示例本身,它故意显示 2 个调用,a 和 a !Scenario# foo barScenarioPOSTGET

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

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

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

评论

0赞 Saurabh 9/7/2017
因此,如果我们在后台声明一个变量,我们可以通过一个场景更新它,并且更新后的值可以被后续场景使用?
0赞 virendra chaudhary 11/10/2017
@PeterThomas如何更新背景变量?由于背景在每个场景之前都会更新,因此它将初始化回上一个变量。
0赞 Venkat 4/27/2020
@PeterThomas,Authorization 标头未传递到下一个请求。怎么做呢?
0赞 Peter Thomas 4/27/2020
@Venkat您确实需要阅读文档:github.com/intuit/karate#http-header-manipulation