Gatling:循环 x 次从馈线中提取值

Gatling: loop x times pulling values from a feeder

我想在这些方面有所成就

我的要求可以实现吗?与提要??这是我所拥有的内容的概述,但没有在循环的每次迭代中我可以从另一个提要获取数据的位:

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
      )

  }
// ...