Scala 如果未设置会话变量,如何执行身份验证调用
我正在尝试编写一些负载测试,进行身份验证调用,然后对场景中的每个调用使用相同的令牌 我很难让它检查令牌是否已设置,如果未设置,则调用获取令牌。否则设置令牌,然后执行调用 执行此检查的代码如下所示:Scala 如果未设置会话变量,如何执行身份验证调用,scala,gatling,Scala,Gatling,我正在尝试编写一些负载测试,进行身份验证调用,然后对场景中的每个调用使用相同的令牌 我很难让它检查令牌是否已设置,如果未设置,则调用获取令牌。否则设置令牌,然后执行调用 执行此检查的代码如下所示: val scn = scenario("Get All Events") .doIf(session => session("bearerToken").asOption[String].isEmpty) { exec(getAuth.getBearerToken)
val scn = scenario("Get All Events")
.doIf(session => session("bearerToken").asOption[String].isEmpty) {
exec(getAuth.getBearerToken)
}
.pause(2)
.exec (http("Get Events")
.get("v1/events")
.header("x-request-id", "perf-test")
.header("HttpLogRequestId", s"${BaseHelpers.getUUID}")
.header("x-api-key", s"${BaseHelpers.getXAPIKey}")
.header("Authorization", "Bearer ${bearerToken}")
.check(status.is(200))
)
val getBearerToken = exec(http("Get Authorization Token")
.post(baseAuthURL + "v1/oauth2/token?grant_type=password&client_id=" + client_id + "&username=" + username + "&password=" + password)
.basicAuth(client_id, client_secret)
.header("x-request-id", "perf-test")
.header("HttpLogRequestId", s"${BaseHelpers.getUUID}")
.check(status.is(200))
.check(jsonPath("$.id_token").saveAs("bearerToken"))
)
当它调用以设置身份验证令牌时,如下所示:
val scn = scenario("Get All Events")
.doIf(session => session("bearerToken").asOption[String].isEmpty) {
exec(getAuth.getBearerToken)
}
.pause(2)
.exec (http("Get Events")
.get("v1/events")
.header("x-request-id", "perf-test")
.header("HttpLogRequestId", s"${BaseHelpers.getUUID}")
.header("x-api-key", s"${BaseHelpers.getXAPIKey}")
.header("Authorization", "Bearer ${bearerToken}")
.check(status.is(200))
)
val getBearerToken = exec(http("Get Authorization Token")
.post(baseAuthURL + "v1/oauth2/token?grant_type=password&client_id=" + client_id + "&username=" + username + "&password=" + password)
.basicAuth(client_id, client_secret)
.header("x-request-id", "perf-test")
.header("HttpLogRequestId", s"${BaseHelpers.getUUID}")
.check(status.is(200))
.check(jsonPath("$.id_token").saveAs("bearerToken"))
)
对我来说,结果通常是两件事之一。要么它每次都会打这个电话,不知何故忽略了检查,要么它会错误地告诉我找不到钥匙
我尝试过几种不同的方法,但仍然没有成功。希望第二双眼睛可以指出我的错误所在。会话对每个用户都是私有的-因此我希望您编写的场景总是执行doIf块 gatlingel也支持您的用例(并不是说它会改变您看到的结果)。你可以写
doIf("${bearerToken.exists()}") {...}
但更大的问题是,您希望您的模拟实现什么?正如您所描述的,您希望一个用户登录,然后同时调用“v1/events”。正如您所写的,您希望每个登录都有多个用户,然后拨打该电话。感谢您的快速回答。你这么说很有道理,这就是它的工作原理。我确实有几种方法可以解决这个问题。如果一个授权“用户”一次又一次地到达端点,那么更合适的情况是许多用户到达端点。也许你可以给我一些指导,告诉我如何编写这些代码来实现这一点?要让用户登录,然后反复点击端点,你可以使用gatling的循环结构之一,如
repea
”或doWhile
。但这不会让同一用户同时调用端点。如果您想要同一用户的并发性(这是一个奇怪的场景),您可以像上一个场景(最有可能的场景)中所描述的那样,有多个用户登录并点击端点,您可以有一个场景,在这个场景中,他们登录后进行api调用(这里不需要doIf)。然后将一个feeder与您所有的usersPerfect一起使用。这听起来像是给了我一些基本的东西,我需要把这些画出来。非常感谢,因为我知道这不是很标准。