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

如何在Karate中跨Feature文件调用Scenario Outline并复用响应数据?

Karate调用多Scenario Outline Feature并遍历响应发请求的实现方案

第一步:修正登录Feature的写法

你之前用karate.set('loginRespone', response)会覆盖每次Scenario Outline的执行结果,Karate调用带Scenario Outline的Feature时,默认会返回所有迭代的执行结果数组,无需手动维护全局变量。调整后的登录Feature示例(login.feature):

Feature: 批量用户登录
  Scenario Outline: 单用户登录流程
    Given url 'https://your-login-domain.com/api/login'
    And request {username: '<username>', password: '<password>'}
    When method post
    Then status 200
    # 提取本次登录的响应到变量,方便后续调用时获取
    * def loginResp = response

    # 用CSV或直接写Examples都可以
    Examples: {read: 'user-credentials.csv'}
    # 或者直接写数据表:
    # Examples:
    #   | username | password |
    #   | alice    | pass123  |
    #   | bob      | pass456  |

第二步:在调用方Feature中遍历处理

调用登录Feature后,拿到的结果是一个数组,每个元素对应一次登录迭代的上下文(包含loginResp变量)。用Karate的forEach遍历数组,逐个发送POST请求并校验状态码:

示例调用方Feature(post-login-actions.feature):

Feature: 登录后批量执行POST请求
  Scenario: 批量登录并触发后续请求
    # 调用登录Feature,获取所有登录结果的数组
    * def allLoginResults = call read('login.feature')
    
    # 遍历每个登录结果
    * foreach allLoginResults as loginItem
        # 设置请求头(示例:用登录返回的token做认证)
        * configure headers = {
            Authorization: 'Bearer ' + loginItem.loginResp.accessToken,
            'Content-Type': 'application/json'
          }
        # 设置目标接口路径
        * url 'https://your-target-domain.com/api/resource'
        # 用登录响应作为请求体(按需调整,比如只传特定字段)
        * request loginItem.loginResp
        # 发送POST请求
        * method post
        # 校验响应状态码
        * status 200

核心注意事项

  • 调用Scenario Outline的返回值:Karate会自动将Scenario Outline的每一次迭代结果打包成数组返回,无需手动收集。
  • 遍历语法:可以用* foreach <array> as <item>的Gherkin语法,也可以用karate.forEach()函数式写法,根据习惯选择。
  • 变量作用域:foreach块内的变量是当前迭代的上下文,直接引用loginItem即可获取本次登录的所有变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 18:47:20