简化我的方案以确认用法。
我在会话中存储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))
答案 0 :(得分:0)
在实现这一目标的过程中,没有任何隐含的功能可用。
我必须在每次运行结束时显式删除会话中的属性,例如在场景结束时 -
session.removeAll("itemId", "customerId")