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")