Gatling:循环 x 次从馈线中提取值
Gatling: loop x times pulling values from a feeder
我想在这些方面有所成就
- 从用户馈送器加载用户场景
- 为用户执行登录
- 从另一个不同的随机馈送器
执行有限数量的(循环)http 调用
我的要求可以实现吗?与提要??这是我所拥有的内容的概述,但没有在循环的每次迭代中我可以从另一个提要获取数据的位:
val userFeeder = csv( "users.csv" )
val randomPagesFeeder = csv( "pages.csv" ).random
object login {
val dologin = exec(
http("login page")
.get("/login")
.headers(standardHeaders)
)
.exec(
http("post login form")
.post("/loginaction")
.headers(standardHeaders)
.formParam("loginid","${loginid}")
.formParam("password", "${password}")
)
)
)
object randompages {
val visitrandom = repeat(10){
// ??? how to pull from feeder in here so that exec( http ) calls
// have data from randomPagesFeeder, i.e.:
exec(
http("randompage")
.get("${uriFromAFeeder}")
)
}
)
def myload() = {
feed( userFeeder ).exec( login.dologin, randompages.visitrandom )
}
val scn = scenario( "My scenario" ).exec( myload() )
setUp( scn.inject( rampUsers( userCount ).during( userWarmup.toInt seconds ) ) ).protocols( httpProtocol )
我怀疑这是一道简单的题,答案就在眼前。我已经花了很长时间阅读文档和其他教程,并且在理解上遇到障碍。
LOOP OVER userFeeder
不要那样做,没有任何意义。让每个虚拟用户模拟真实用户并使用专用凭据而不是回收它们。
LOOP 10 times getting new entry from resourceFeeder each time
检查Gatling repeat loop. Honestly, those are basic questions, you should have a look at the official documentation and Gatling Academy。
我缺少的理解是喂食器的工作原理。当您调用 feed( feeder )
时,您正在将提要中的下一个值拉入要在您的链中使用的会话中。来自 the docs:
Every time a virtual user reaches this step, it will pop a record out of the Feeder, which will be injected into the user’s Session, resulting in a new Session instance.
这些 feed( feeder )
调用可以与 exec()
、pause()
、each()
等链接在一起。这意味着您可以从中提取下一个值例如,循环内的任何提要。 这种 feed( feeder )
调用的放置在文档中很难找到,并且是我误解的根源。
下面的代码说明了循环与提要的结合使用(不是完整或真实的测试场景,只是为了说明如何结合使用两个提要):
val usersFeeder = csv( "users.csv" )
val pagesFeeder = csv( "pages.csv" ).random
// ...
feed(userFeeder) // puts the next user from the feed in session
.exec(
http("Login page")
.get("/login")
)
.exec(
http( "Do login" )
.post( "/loginaction" )
.formParam("loginid","${loginid}") // loginid from userfeeder
.formParam("password", "${password}") // password from userfeeder
)
.repeat(5) {
feed(pagesFeeder) // puts the next page from pagesFeeder into session
.exec(
http("Visit random page")
.get("${pageuri}") // pageUrifrom pagesFeeder
)
}
// ...
我想在这些方面有所成就
- 从用户馈送器加载用户场景
- 为用户执行登录
- 从另一个不同的随机馈送器 执行有限数量的(循环)http 调用
我的要求可以实现吗?与提要??这是我所拥有的内容的概述,但没有在循环的每次迭代中我可以从另一个提要获取数据的位:
val userFeeder = csv( "users.csv" )
val randomPagesFeeder = csv( "pages.csv" ).random
object login {
val dologin = exec(
http("login page")
.get("/login")
.headers(standardHeaders)
)
.exec(
http("post login form")
.post("/loginaction")
.headers(standardHeaders)
.formParam("loginid","${loginid}")
.formParam("password", "${password}")
)
)
)
object randompages {
val visitrandom = repeat(10){
// ??? how to pull from feeder in here so that exec( http ) calls
// have data from randomPagesFeeder, i.e.:
exec(
http("randompage")
.get("${uriFromAFeeder}")
)
}
)
def myload() = {
feed( userFeeder ).exec( login.dologin, randompages.visitrandom )
}
val scn = scenario( "My scenario" ).exec( myload() )
setUp( scn.inject( rampUsers( userCount ).during( userWarmup.toInt seconds ) ) ).protocols( httpProtocol )
我怀疑这是一道简单的题,答案就在眼前。我已经花了很长时间阅读文档和其他教程,并且在理解上遇到障碍。
LOOP OVER userFeeder
不要那样做,没有任何意义。让每个虚拟用户模拟真实用户并使用专用凭据而不是回收它们。
LOOP 10 times getting new entry from resourceFeeder each time
检查Gatling repeat loop. Honestly, those are basic questions, you should have a look at the official documentation and Gatling Academy。
我缺少的理解是喂食器的工作原理。当您调用 feed( feeder )
时,您正在将提要中的下一个值拉入要在您的链中使用的会话中。来自 the docs:
Every time a virtual user reaches this step, it will pop a record out of the Feeder, which will be injected into the user’s Session, resulting in a new Session instance.
这些 feed( feeder )
调用可以与 exec()
、pause()
、each()
等链接在一起。这意味着您可以从中提取下一个值例如,循环内的任何提要。 这种 feed( feeder )
调用的放置在文档中很难找到,并且是我误解的根源。
下面的代码说明了循环与提要的结合使用(不是完整或真实的测试场景,只是为了说明如何结合使用两个提要):
val usersFeeder = csv( "users.csv" )
val pagesFeeder = csv( "pages.csv" ).random
// ...
feed(userFeeder) // puts the next user from the feed in session
.exec(
http("Login page")
.get("/login")
)
.exec(
http( "Do login" )
.post( "/loginaction" )
.formParam("loginid","${loginid}") // loginid from userfeeder
.formParam("password", "${password}") // password from userfeeder
)
.repeat(5) {
feed(pagesFeeder) // puts the next page from pagesFeeder into session
.exec(
http("Visit random page")
.get("${pageuri}") // pageUrifrom pagesFeeder
)
}
// ...