首页 > 解决方案 > 我想从场景中获取值并在 QueryParam 中设置值

问题描述

我想从场景中获取一个值并在 queryParam 中设置值。我的代码是..

val scen1 = scenario("Home page").repeat(1) {
 exec(session => session
   .set("queryEnc", URLEncoder.encode(updateQueueItemCreatedTime(fileContents).toString.replace(" ", "%20"), "UTF-8"))
   .set("authroization", AwsSigner(AwsCredentialsProviderWithSession, region, Service, () => LocalDateTime.now(ZoneOffset.UTC)).getSignedHeaders(Uri, PostMethod, EmptyQueryParams ++ Map("Action" -> "SendMessage", "MessageBody" ->"${queryEnc}"), headers, emptyPayload)("Authorization"))
 )
 .exec(
    http("Custom headers")
     .get(queueUrl + "?Action=SendMessage&MessageBody=" + "${queryEnc}")
     .header("Authorization", "${authroization}")
   )
}

当我在.get使用它的方法中获取值时"${queryEnc}"。然后按我想要的值传递。但是当我在其中获取值时, Map("Action" -> "SendMessage", "MessageBody" ->"${queryEnc}")它会得到与 相同的字符串"${queryEnc}",而不是从会话中获取值。

我将如何传递 MessageBody 中的值?

标签: gatling

解决方案


当您在调用 session.set 时处于会话函数中时,您不能使用加特林表达式语言“${var}”作为获取会话值的简写。

相反,您必须直接使用会话 api。

所以而不是

.set("authroization", ... EmptyQueryParams ++ Map("Action" -> "SendMessage", "MessageBody" ->"${queryEnc}"), headers, emptyPayload)("Authorization"))

你需要

.set("authroization", ... EmptyQueryParams ++ Map("Action" -> "SendMessage", "MessageBody" -> session("queryEnc").as[String], headers, emptyPayload)("Authorization"))

推荐阅读