如何在加特林模拟期间为所有虚拟用户设置一个全局变量?
How to set a global variable for all virtual users during gatling simulation?
在我的模拟中,用户只是循环发送请求。每个请求都包含一个自定义 header 并且它的值是从一个变量中读取的。
但是,我想在模拟期间更改变量的值,以便所有虚拟用户(包括活动用户)从此时开始在自定义 header 中发送新值。
这是我尝试过但没有成功的方法:
class MySimulation extends Simulation {
var GLOBAL_LIMIT = "49"
def myRequest: HttpRequestBuilder =
http("My request")
.get("/")
.header("LIMIT", GLOBAL_LIMIT)
.check(status.is(200))
def myScenario: ScenarioBuilder =
scenario("Poll")
.forever(
pace(1.second)
.exec(myRequest)
)
def changeLimit(limit: String): ScenarioBuilder =
scenario("Change limit")
.exec(session => {
GLOBAL_LIMIT = limit
session
})
setUp(
myScenario.inject(
constantUsersPerSec(1) during 30.seconds
),
changeLimit("59").inject(
nothingFor(10.seconds),
atOnceUsers(1)
)
).protocols(http.baseUrl("http://localhost:8081"))
}
我也试过用 scala.util.Properties.setProp()
存储值,然后用 scala.util.Properties.propOrElse()
读取它,但这也不起作用。所有请求都将自定义 header 设置为初始值 "49"
。
有没有办法设置(然后更改)用于模拟的全局变量,类似于 session 但对所有虚拟用户通用?
那是因为当你写 .header("LIMIT", GLOBAL_LIMIT)
时,你传递了一个 值 作为 header
方法的第二个参数,并且这个值被评估一旦加载模拟。此时,GLOBAL_LIMIT
仍然为空,因为它只会在稍后模拟为 运行.
时填充
相反,您必须传递一个 函数,每次虚拟用户尝试生成此请求时都会对其进行评估:
.header("LIMIT", session => GLOBAL_LIMIT)
在我的模拟中,用户只是循环发送请求。每个请求都包含一个自定义 header 并且它的值是从一个变量中读取的。 但是,我想在模拟期间更改变量的值,以便所有虚拟用户(包括活动用户)从此时开始在自定义 header 中发送新值。
这是我尝试过但没有成功的方法:
class MySimulation extends Simulation {
var GLOBAL_LIMIT = "49"
def myRequest: HttpRequestBuilder =
http("My request")
.get("/")
.header("LIMIT", GLOBAL_LIMIT)
.check(status.is(200))
def myScenario: ScenarioBuilder =
scenario("Poll")
.forever(
pace(1.second)
.exec(myRequest)
)
def changeLimit(limit: String): ScenarioBuilder =
scenario("Change limit")
.exec(session => {
GLOBAL_LIMIT = limit
session
})
setUp(
myScenario.inject(
constantUsersPerSec(1) during 30.seconds
),
changeLimit("59").inject(
nothingFor(10.seconds),
atOnceUsers(1)
)
).protocols(http.baseUrl("http://localhost:8081"))
}
我也试过用 scala.util.Properties.setProp()
存储值,然后用 scala.util.Properties.propOrElse()
读取它,但这也不起作用。所有请求都将自定义 header 设置为初始值 "49"
。
有没有办法设置(然后更改)用于模拟的全局变量,类似于 session 但对所有虚拟用户通用?
那是因为当你写 .header("LIMIT", GLOBAL_LIMIT)
时,你传递了一个 值 作为 header
方法的第二个参数,并且这个值被评估一旦加载模拟。此时,GLOBAL_LIMIT
仍然为空,因为它只会在稍后模拟为 运行.
相反,您必须传递一个 函数,每次虚拟用户尝试生成此请求时都会对其进行评估:
.header("LIMIT", session => GLOBAL_LIMIT)