exitBlockOnFail或清除会话以控制流

时间:2016-02-21 21:20:34

标签: gatling

简化我的方案以确认用法。

我在会话中存储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))

1 个答案:

答案 0 :(得分:0)

在实现这一目标的过程中,没有任何隐含的功能可用。

我必须在每次运行结束时显式删除会话中的属性,例如在场景结束时 -

session.removeAll("itemId", "customerId")