如何在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
相关产品推荐
相关产品推荐

