仅在检查成功时才调用函数?

时间:2018-06-12 11:43:26

标签: gatling scala-gatling

我只想在响应返回字符串'Success'时将会话属性写入文件。

我正在尝试这样做:

.check(substring("success").onSuccess(writeThisToFile(<my variable here>))

我发现这不像IDE说的那样有效。有没有办法根据响应检查的结果调用函数?

2 个答案:

答案 0 :(得分:1)

为此,您可以在.transform()上使用方法bodyString。它需要String => T(String, Session) => T类型的函数参数并将其应用于响应主体,因此在您的情况下它将如下所示:

.check(
    bodyString.transform(
        (body: String, session: Session) => {
            if(body.contains("success")){
                File("/path/to/file")
                    .createFile()
                    .appendAll(session("attributeName").as[String])
            }
        }
    )
)

- 已编辑 -

因此,要将部分请求正文保存到会话中,您需要分别生成该部分,保存到会话属性并在创建正文时使用。例如,假设您要发送包含2个字段的JSON:一些常量值+当前时间戳,然后如果响应包含&#34;成功&#34;:

,则将时间戳保存到文件
val exampleScenario =  scenario("Example")
    .exec(session => {
        session.set("timestamp", System.currentTimeMillis)
    })
    .exec(http("Send data")
        .post("http://example.com")
        .body(StringBody("""{"constant":123, "timestamp": ${timestamp}}"""))
        .asJSON
        .check(
            bodyString.transform(
                (body: String, session: Session) => {
                    if(body.contains("success")){
                        File("/path/to/file")
                            .createFile()
                            .appendAll(session("timestamp").as[String])
                    }
                }
            )
        )
    )

答案 1 :(得分:-1)

这必须有效

 .asLongAs(session => ( YOUR CONDITION ) ) {
            exec(    http("Poll")  ) 
  }