You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Karate测试:如何在不同场景间传递响应中的值

Karate跨场景传递Offer ID问题解决

你遇到的核心问题是Karate中每个Scenario的变量上下文是独立隔离的——第一个Scenario里用* def offerId = response.id定义的变量,只能在该Scenario内部使用,第二个Scenario无法直接访问,这就是跨场景传递失败的原因。你尝试的示例是在同一个Scenario里连续执行请求,变量在同一上下文内自然能复用,但跨Scenario就不适用了。

方案一:用call调用创建Offer的Scenario并获取返回值

把创建Offer的逻辑封装成可调用的Scenario,在查询Offer的Scenario里调用它拿到返回的offerId,这种方式符合测试隔离原则,是推荐的做法:

Scenario: create offer
    Given url 'url/to_create_offer'
    When request readJsonAsBody
    And method POST
    Then status 202
    * def offerId = response.id
    * return offerId  # 将offerId作为返回值

Scenario: get offer
    # 调用创建offer的Scenario,获取返回的offerId
    * def createdOfferId = call read('this.feature@create offer')
    # 拼接URL时直接使用返回的ID
    Given url 'url/to_get_created_offer/' + createdOfferId
    And method GET
    Then status 200

方案二:使用全局变量karate.set()

如果需要在多个Feature或Scenario间共享变量,可以用karate.set()设置全局变量,注意全局变量会在所有测试中共享,可能引发依赖问题,需谨慎使用:

Scenario: create offer
    Given url 'url/to_create_offer'
    When request readJsonAsBody
    And method POST
    Then status 202
    * def offerId = response.id
    * karate.set('globalOfferId', offerId)  # 设置全局变量
    Then print offerId

Scenario: get offer
    # 直接使用全局变量拼接URL
    Given url 'url/to_get_created_offer/' + globalOfferId
    And method GET
    Then status 200

内容的提问来源于stack exchange,提问作者declutec

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 10:35:13