exitBlockOnFail 或清除会话以控制流程
exitBlockOnFail or clear session to control a flow
简化我的场景以确认用法。
我将 itemId 存储在会话中以用于进一步执行。我添加了 doIf,以便仅当存在 itemId 时才会进一步执行。
用户将在场景中循环直到以分钟为单位的持续时间。
如果在第一次执行时 itemId 存储在会话中,但在第二次执行时 POST 调用无法生成 itemId。我仍然在会话中获得 itemId。
我的期望是同一用户的每个场景周期都有清晰的会话。我试过 session.reset 但出现此错误 java.util.NoSuchElementException: key not found: timestamp.
我可以使用 exitBlockOnFail() 并通过添加检查 itemId 是否不存在来更改我的 POST 失败。这是推荐的方法吗?
有什么办法吗?我使用正确吗?
val testScenario = scenario("Test scenario").during(durationInMinutes) {
exec(http("Create")
.post("/items")
.body(StringBody(session => write(Item(1, "Item name"))(DefaultFormats))).asJSON
.check(status.is(201), header("Location")
.transform(extractId(".*/items/(.*)".r, _))
.saveAs("itemId")))
.doIf(_.contains("itemId")) {
// do something with the itemId
}
}
setUp(testScenario.inject(atOnceUsers(10)))
.pauses(constantPauses)
.protocols(httpProtocol)
.assertions(global.failedRequests.count.is(0))
gatling 中没有任何隐式功能可用于实现此目的。
我必须像这样在每个 运行 结束时从会话中显式删除属性,即在场景结束时 -
session.removeAll("itemId", "customerId")
简化我的场景以确认用法。
我将 itemId 存储在会话中以用于进一步执行。我添加了 doIf,以便仅当存在 itemId 时才会进一步执行。
用户将在场景中循环直到以分钟为单位的持续时间。
如果在第一次执行时 itemId 存储在会话中,但在第二次执行时 POST 调用无法生成 itemId。我仍然在会话中获得 itemId。
我的期望是同一用户的每个场景周期都有清晰的会话。我试过 session.reset 但出现此错误 java.util.NoSuchElementException: key not found: timestamp.
我可以使用 exitBlockOnFail() 并通过添加检查 itemId 是否不存在来更改我的 POST 失败。这是推荐的方法吗?
有什么办法吗?我使用正确吗?
val testScenario = scenario("Test scenario").during(durationInMinutes) {
exec(http("Create")
.post("/items")
.body(StringBody(session => write(Item(1, "Item name"))(DefaultFormats))).asJSON
.check(status.is(201), header("Location")
.transform(extractId(".*/items/(.*)".r, _))
.saveAs("itemId")))
.doIf(_.contains("itemId")) {
// do something with the itemId
}
}
setUp(testScenario.inject(atOnceUsers(10)))
.pauses(constantPauses)
.protocols(httpProtocol)
.assertions(global.failedRequests.count.is(0))
gatling 中没有任何隐式功能可用于实现此目的。
我必须像这样在每个 运行 结束时从会话中显式删除属性,即在场景结束时 -
session.removeAll("itemId", "customerId")