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

如何让Karate中@setup场景在所有场景中仅执行一次?

实现单个Feature文件中@setup场景仅执行一次的方案

核心思路

利用karate.setupOnce()的特性,将初始化逻辑封装在@setup场景中,确保整个Feature文件执行周期内,初始化操作仅运行一次,所有Scenario Outline共享这一次的初始化结果。

具体实现步骤

  1. 定义@setup场景
    在Feature文件开头添加带@setup标签的场景,用karate.setupOnce()包裹你的初始化逻辑(比如获取测试数据、初始化环境等),并将需要共享的数据存入karate.setup()上下文:
@setup
Scenario: 全局初始化
  * def initData = karate.setupOnce(() => {
      // 这里写你的初始化逻辑,比如调用接口、读取配置
      return { kittens: ['波斯猫', '橘猫', '布偶猫'] }
    })
  * karate.set('setup', initData)
  1. 在多个Scenario Outline中使用初始化数据
    每个Scenario Outline的Examples里,直接引用karate.setup()中的数据即可,setupOnce已经确保初始化逻辑仅执行过一次:
Scenario Outline: 测试猫咪列表1
  * print '当前测试猫咪:', kitten
  * # 你的测试步骤

  Examples:
    | kitten |
    | karate.setup().kittens[0] |
    | karate.setup().kittens[1] |

Scenario Outline: 测试猫咪列表2
  * print '当前测试猫咪:', kitten
  * # 你的测试步骤

  Examples:
    | kitten |
    | karate.setup().kittens[1] |
    | karate.setup().kittens[2] |

关键说明

  • karate.setupOnce()接收一个lambda表达式,里面的代码只会在第一次被调用时执行,后续调用直接返回第一次的执行结果。
  • 把初始化结果存入karate.setup()上下文后,所有场景都能通过karate.setup().xxx访问到共享数据。
  • 整个Feature文件执行时,@setup场景会自动在所有测试场景前触发,而setupOnce保证了初始化逻辑仅运行一次,不受Scenario Outline数量或用例条数影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 04:35:04