【发布时间】: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