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

如何在Gatling的status.in()中使用getOrElse方法?

解决Gatling getUsers方法的可选状态码校验问题

我来帮你搞定这个Gatling的状态码校验问题!你的核心需求是:当传入stat参数时校验单个状态码,没传的时候校验多个默认状态码。问题出在status.in()需要接收一个可迭代的状态码集合,直接用stat getOrElse时得确保两边的类型一致。

修正后的完整代码

import io.gatling.core.Predef._
import io.gatling.http.Predef._
import scala.concurrent.duration._

class UnitTestActions {
  def getUsers(stat: Option[Int]) = {
    // 处理状态码:有参数时包装为单元素Seq,无参数时用默认多状态码
    val targetStatuses = stat.map(Seq(_)).getOrElse(Seq(200, 204, 404))
    
    exec(http("[GET] /users")
      .get("/users")
      .check(status.in(targetStatuses))
    )
  }
}

代码解释

  • 类型统一:stat.map(Seq(_))会把Some(xxx)转换成Some(Seq(xxx)),调用getOrElse后返回的结果始终是Seq[Int]类型,完美匹配status.in()的参数要求(它接受Iterable[Int],Seq是其子类型)。
  • 灵活扩展:你可以把Seq(200,204,404)换成任何需要的默认状态码列表,比如常见的成功码Seq(200,201)或者包含错误码的集合。

简化版(无需中间变量)

如果觉得中间变量多余,也可以直接把逻辑内联到check方法里:

def getUsers(stat: Option[Int]) = {
  exec(http("[GET] /users")
    .get("/users")
    .check(status.in(stat.map(Seq(_)).getOrElse(Seq(200, 204))))
  )
}

这样修改后,你的方法就能正常工作了:传入Some(200)时只校验200,不传参数时校验默认的多个状态码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:37:27