Gatling 条件判断
阅读原文时间:2023年07月15日阅读:1

在使用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()
)