【问题标题】:Gatling - String interpolation in ScalaGatling - Scala 中的字符串插值
【发布时间】:2018-06-19 05:26:43
【问题描述】:

我想在一个变量中设置 StringBody 值:

exec(session => {session.set("searchBody", """{"productId":"${productID}","category":"${category}"}""")})

变量${productID}${category} 存在。我想使用该值作为函数 StringBody 的参数:

http("/products")           
  .post(appURL + "/search")
  .headers(jsonHeader)
  .body(StringBody("${searchBody}")).asJSON

但它没有按预期工作。我收到以下错误: i.g.h.a.ResponseProcessor - Request '/products' failed:status.find.is(200), but actually found 403

为什么变量searchBody的字符串中没有打印变量?

更新:

我正在尝试:

val search= exec(repeat(products.size, "n"){
    feed(products.circular)
        .uniformRandomSwitch( //5
            exec(session => {session.set("searchBody", """{"productId":"${productID}","minPrice":"${minPrice}"}""")}),
            exec(session => {session.set("searchBody", """{"productId":"${productID}","category":"${category}"}""")})
        )
    .exec(
        http("/products")           
            .post(appURL + "/search")
            .headers(jsonHeader)
            .body(StringBody("${searchBody}")).asJSON
            .check(status.is(200), responseTimeInMillis.lessThan("${expectedResponseTime}"))
    )
})

我想统一发送不同类型的请求,我不想复制 exec 部分。端点始终相同,只有主体不同。

【问题讨论】:

  • HTTP 403 响应代码是Forbidden,所以要么你缺乏一些授权,要么你正在尝试做一些你不应该做的事情。要验证请求是否正确发送,您可以将日志记录级别(请参阅:Gatling Debugging)更改为TRACE,这样您就可以将请求和响应打印到控制台。但我认为你的问题是双插值。您正在将带有 gatling el 占位符的字符串添加到会话中,然后尝试再次使用 gatling el 占位符读取该字符串,这将不起作用。尝试使用会话表达式构建 StringBody

标签: scala gatling


【解决方案1】:

你需要利用scala的s字符串插值方法。请在下面找到答案。

http("/products")           
  .post(appURL + "/search")
  .headers(jsonHeader)
  .body(StringBody(s"${searchBody}")).asJSON

【讨论】:

  • 这样他将把${searchBody} 替换为未设置的searchBody 变量的值。他正确使用了它,因为他使用的是加特林 el 字符串插值而不是 scala one。
  • 是否可以同时使用两个字符串插值?使用s"${variable}" 的Scala 字符串插值以及来自Gatling 的将会话变量注入模板而没有s"${variable}" 语法的插值?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-26
  • 2013-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多