配置运行细节
通过调用继承类的
setUp
方法配置要启动的用户类
通过调用用户群的inject
方法来设定注入的用户数量及注入方式
设定注入用户后调用protocols
方法来指定用户群请求的Http Head
setUp(
scn.inject(atOnceUsers(10)) // 调用用户类的inject方法
.protocols(httpProtocol)
)
一个简单的完整示例
import io.gatling.core.Predef._
import io.gatling.http.Predef._
class test extends Simulation {
val httpProtocol = http.baseUrl("http://localhost:4311")
val scn = scenario("blog request").repeat(10){exec(http("get index").get("/"))}
setUp(scn.inject(atOnceUsers(10)).protocols(httpProtocol))
}
setUp()
传入的参数类型为PopulationBuilder
inject()
和protocols()
方法返回值为PopulationBuilder类成员
inject()
是ScenarioBuilder的类方法
protocols()
是属于PopulationBuilder的类方法
scn
是ScenarioBuilder类成员,可以直接调用inject方法但不能直接调用protocols方法
因此必须先调用inject()
再调用protocols()
—— 链式调用所决定的
gatling官方文档提供了以下注入用户方式的API:
nothingFor(4):暂停4s
atOnceUsers(10):一次性注入10个用户
rampUsers(10) during(10):在10秒内将用户增加至10个(线性增加)
constantUsersPerSec(10) during(20):每秒注入10个用户 执行20秒 即共注入200个用户
constantUsersPerSec(10) during(20) randomized:每秒注入10个用户 在毫秒级别随机 如 1.234注入10个 2.981注入10个
rampUsersPerSec(10) to (20) during(20):在20秒内 用户从每秒注入10个逐渐均匀增加到每秒注入20个
rampUsersPerSec(10) to (20) during(20 ):在20秒内 用户从每秒注入10个以随机速度逐渐增加到每秒注入20个
注意:假如rampUsers(10) during(10) 增加用户的时间超过了定义用户群during的时间,则实际运行的时间则会比二者定义的都要长
val scn = scenario("blog request")
.during(10){
exec(http("get index").get("/"))
}
// 实际运行时间约为10+50s
setUp(scn.inject(rampUsers(10) during(50)).protocols(httpProtocol))
可以多次声明注入方式,注入顺序为编写顺序,不会同时执行互相干扰:
import io.gatling.core.Predef._
import io.gatling.http.Predef._
class test extends Simulation{
val httpProtocol = http.baseUrl("http://localhost:4311")
val scn = scenario("blog request")
.during(20){
exec(http("post login").post("/login")
.body(StringBody("{\"name\":\"node\",\"password\":\"passWord\"}")).asJson // josn发送要这样写 效果等同于上面两个
)
}
setUp(scn.inject(
constantUsersPerSec(5)during(5),
atOnceUsers(100)
).protocols(httpProtocol))
}
上面代码用户注入结果如图: