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

在Gatling的ScenarioBuilder中正确使用doSwitch及报错原因排查

Gatling doSwitch 使用${data}报错原因分析

问题描述

在Gatling场景构建代码中,使用doSwitch("${data}")时触发类型错误,报错信息如下:

Expected type was: (Any, io.gatling.core.structure.ChainBuilder).doSwitch("${data}")

对应的代码片段:

val builder: ScenarioBuilder = scenario("Test")
  .repeat(3) {
    pace(10.seconds)
      .feed(new DataFeeder())
      .exec { session =>
        val data = session("data").as[String]
        println(s"data: $data")
        session
      }
      .doSwitch("${data}") {
        // Define cases for different data values
        case "P1" =>
          exec(myFunc(1000000))
        case "P2" =>
          exec(myFunc(2000000))
      }
  }

报错原因

  • doSwitch参数用法错误:Gatling的doSwitch方法要求传入的是Session中属性的名称(字符串字面量),它会自动从Session中读取该属性的值来匹配分支。而你用"${data}"会被当作一个固定的字符串键(即Gatling会去Session里找名为${data}的属性,而不是名为data的属性),这完全不符合方法的参数要求,直接导致类型不匹配错误。
  • 冗余代码干扰理解:你添加的那个打印data的exec块完全多余,feed操作已经把data放入Session中,这个块只是读取打印,没有修改Session状态,反而容易混淆变量的作用域和传递方式。

修正后的代码

val builder: ScenarioBuilder = scenario("Test")
  .repeat(3) {
    pace(10.seconds)
      .feed(new DataFeeder())
      .doSwitch("data") { // 直接传入Session属性名的字符串字面量
        case "P1" => exec(myFunc(1000000))
        case "P2" => exec(myFunc(2000000))
      }
  }

补充说明

如果需要基于动态计算的表达式做分支判断,可以使用doSwitchOrElse或者switch方法,但针对当前的场景,直接传递Session属性名给doSwitch就可以完美解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:12:48