Gatling 条件判断
在使用Gatling的过程中,当前置接口异常,无法获取到数据作为其他接口的请求参数室,接口是不能请求的。或者通过feeder获取的数据要区分不同的情况请求不同的接口。此时,使用gatling的判断语句来处理相应的请求, 组成完整的请求链。之前提到过,feeder和check中的saveAs都会将参数设置到session中,这里将使用session中保存的参数值作为判断依据
函数 | 解释 |
doif | 在判断成立的情况下执行特定的操作链 |
doIfEquals | 判断两个值相等 |
doIfOrElse和doIfEqualsOrElse | 判断成立执行第一个操作链,判断不成了是执行第二个操作链 |
doSwitch、doSwitchOrElse | 条件判断 |
randomSwitch和randomSwitchOrElse | 设置的概率值必须小于100%,命中概率不相等 |
uniformRandomSwitch | 随机执行,命中概率相等 |
roundRobinSwitch | 循环执行 |
脚本案例:
eg:doif
val demo_test = scenario("test") .exec(_.set("status",0)) .exec(_.set("OpenID","start-open-end")) .doIf( session=>session("status").as[Int]==0 ){ //判断status成功 exec() } .doIf(session=>session("OpenID").as[String].equals("start-open-end")){ //判断OpenID成功 exec() } .doIf(session=>session("OpenID").as[String].startsWith("start")){ //判断OpenID 是以start开头 exec() } .doIf(session=>session("OpenID").as[String].contains("open")){ //判断OpenID 包含 open exec() }
eg:doIfEquals
val demo_test = scenario("test") .exec(_.set("status",0)) .exec(_.set("OpenID","start-open-end")) .doIfEquals( "${status}", 0 ){ //判断status等于0 exec() } .doIfEquals("${OpenID}","start-open-end"){ //判断OpenID等于start-open-end exec() }
eg:doIfOrElse和doIfEqualsOrEls
val demo_test = scenario("test") .exec(_.set("status",0)) .exec(_.set("OpenID","start-open-end")) .doIfOrElse(session=>session("OpenID").as[String].endsWith("start")){ // 判断成立时执行 exec() }{ // 判断不成立是执行 exec() } .doIfEqualsOrElse( "${status}", 1 ){ exec() }{ exec() }
eg:doSwitch、doSwitchOrElse
val array_feeder = Array( Map("status" -> 1), Map("status" -> 2), Map("status" -> 3), Map("status" -> 4) ).random val demo_test = scenario("test") .feed(array_feeder) .doSwitch("${status}")( 1 -> exec(), 2 -> exec() ) .doSwitchOrElse("${status}")( 3 -> exec(), 4 -> exec() )( exec() )
eg:randomSwitch和randomSwitchOrElse
val demo_test = scenario("test") .randomSwitch( 50d -> exec(session=>{ println("50% 概率 执行") session }), 30d -> exec(session=>{ println("30% 概率 执行") session }) ).randomSwitchOrElse( 1d -> exec(session=>{ println("1% 概率 执行此处") session }) )( exec(session=>{ println("99% 概率 执行此处") session }) )
eg:uniformRandomSwitch
val demo_test = scenario("test") .uniformRandomSwitch( exec(), exec(), exec() )
eg:roundRobinSwitch
val demo_test = scenario("test") .roundRobinSwitch( exec(), exec(), exec() )