gatling:如何只执行第一个请求一次?

voj3qocg  于 2021-07-14  发布在  Java
关注(0)|答案(0)|浏览(271)

我正在尝试运行一个有2个请求的场景
第一个通过api对用户进行身份验证并获得令牌。我希望每个用户只执行一次第一个请求。
第二个执行get through另一个api。
以下是场景代码:

val slot: ScenarioBuilder = scenario("Get slot")
    .doIf(_("connected").asOption[String].isEmpty) {
      exec(
        http("Get_token")
          .post(my_endpoint)
          .headers(specific_headers)
          .formParam("username", "my_username")
          .formParam("password", "my_password")
          .check(regex("""id_token":"(.*?)"""").saveAs("my_token"))
      )
        .exec { session =>
          println("Before: " + session("connected").as[String]) //prints nothing as expected
          session
        }
        .exec(_.set("connected", "true"))
        .exec { session =>
          println("After: " + session("connected").as[String]) //prints "true" as expected
          session
        }
    }
    .feed(fsid)
    .exec(
      http("Get_slot")
        .get("/slots")
        .headers(other_specific_headers) //including "my_token" extraced above
        .queryParam("specific_id", "${specific_id}") //from feeder fsid
        .check(regex("""id":"(.*?)"""").findRandom.saveAs("slot_id"))
    )

以下是模拟代码:

setUp(
    slot.inject(
      constantUsersPerSec(1).during(15.seconds)
    ).protocols(httpConfig)
  )

当我执行上面的模拟时,我可以在日志中看到这两个请求都执行了15次。我希望执行的“get\u token”少于“get\u slot”。
我读过一些关于加特林永恒元素的文档,我认为它可以完成这项工作。但我想理解为什么这不是我所期望的。
如果两个请求都执行了15次,是否意味着:
启动了15个用户,因此他们的会话在开始时是空的,所以他们执行get\u令牌是正常的吗?
我的“doif”写得不好?
我还缺什么?
任何帮助都会很好,提前谢谢你。
编辑:为了提供更多信息,根据simpleapp的评论,我在测试期间只看到2个actives用户(平均)

这就是为什么我希望看到4“get\ U token”,而不是更多。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题