如何解决Gatling 方案检查状态,然后响应标头使用`checkIf`?
我希望创建一个场景,在其中执行以下速率限制测试:
- 每秒发出一个请求
- 检查状态
- 如果状态为
200
,则无需进一步 - 如果状态为
429
,则断言出现新的响应标头 (X-Ratelimited
)
到目前为止,我的场景是这样设置的:
val throttleTest = scenario("Throttle access-code").during(60 seconds) {
exec(http("put")
.put("/auth/code")
.check(
checkIf(status.is(429))(header("X-Ratelimited"))
)
.body(StringBody(s"""{"foo": "$bar"}""")))
.pause(1)
}
目前这给了我一个错误:
overloaded method value checkIf with alternatives:
[R,C <: io.gatling.core.check.Check[R]](condition: (R,io.gatling.core.session.Session) => io.gatling.commons.validation.Validation[Boolean])(thenCheck: C)(implicit cw: io.gatling.core.check.TypedConditionalCheckWrapper[R,C])C <and>
[C <: io.gatling.core.check.Check[_]](condition: io.gatling.core.session.Expression[Boolean])(thenCheck: C)(implicit cw: io.gatling.core.check.UntypedConditionalCheckWrapper[C])C
cannot be applied to (io.gatling.core.check.CheckBuilder[io.gatling.http.check.status.HttpStatusCheckType,io.gatling.http.response.Response,Int])
checkIf(status.is(429))(header("X-Ratelimited"))
在这种情况下我应该使用 checkIf
还是其他?
解决方法
您没有正确使用当前的 checkIf
。
没有将检查作为第一个参数的 checkIf
版本,请参阅 doc。
从 Gatling 3.5 开始,您必须自己制作条件:
checkIf((response: Response,_: Session) => response.status.code == 429) {
header("X-Ratelimited")
}
不过你的想法很有趣。也许我们可以在未来的版本中利用 matching 为 WebSockets 所做的事情。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。