【问题标题】:Karate API Testing - Reusing variables in different scenarios in the same feature file空手道 API 测试 - 在同一功能文件中重用不同场景中的变量
【发布时间】:2018-02-15 04:12:51
【问题描述】:

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

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

【问题讨论】:

    标签: karate


    【解决方案1】:

    使用Background: 部分。这是example

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

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

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

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

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

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

    另外,如果可以使流程更易于阅读,则可以有一些代码重复。见this answer for details - 也读this article by Google

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

    【讨论】:

    • 所以如果我们在后台声明一个变量,我们可以通过一个场景更新它,并且更新后的值可以被后续场景使用?
    • @PeterThomas 如何更新背景变量?由于背景在每个场景之前都会更新,因此它将初始化回之前的变量。
    • @PeterThomas,授权标头未传递给下一个请求。该怎么做?
    • @Venkat 你真的需要阅读文档:github.com/intuit/karate#http-header-manipulation
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多