加特林模拟自动完成

Gatling Simulating Auto Complete

我正在尝试创建一些 AJAX 自动完成功能的基本性能测试。

在 Gatling 中执行此操作的最佳方法是什么?

我有一个包含(许多)搜索词的 csv 文件,我使用的是 Gatling v2.1.7,我编写了以下内容。但是,我现在卡住了,无法从馈线访问作为字符串的实际术语以生成 ChainBuilder,此时是 recommended/possible 从会话中获取它还是有更简单的方法?

def autoCompleteChain(existingChain: ChainBuilder, searchTerm: String): ChainBuilder = {
    existingChain
        .exec(http("autocomplete")
            .get("http://localhost/autocomp?q=" + searchTerm)
            .check(substring(searchTerm)))
    .pause(1)
}

def autoCompleteTerm(term: String): ChainBuilder = {
    // build a chain of auto complete searches
    term.inits.toList.reverse.drop(1)
        .foldLeft(exec())(autoCompleteChain(_, _))
}

feed(feeder)
    // goto page
    .exec(http("home page").get("http://localhost"))
    // type query
    .exec(autoCompleteTerm("${term}"))
    // search for term etc.
    .exec(http("search").get("http://localhost/q=${term}"))

您错过了 Gatling 场景的构建方式:动作在加载时一劳永逸地链接在一起,然后工作流是静态的。

您尝试构建它的方式是错误的:您尝试根据一些仅在运行时可用的信息构建请求序列,即稍后。

您必须使用 Gatlin 循环之一,例如 asLongAs,并在运行时计算不同的子字符串。

感谢 Stephane 的澄清,我现在已经实施了以下内容:

feed(feeder)
    // goto page
    .exec(http("home page").get("http://localhost"))
    // type query
    .exec(
      foreach(session => session("term").as[String].toList, "char") {
        exec(session => session.set(
            "currentTerm",
            session("currentTerm").asOption[String].getOrElse("") + session("char").as[String]))
        .exec(http("auto-complete")
          .get("http://localhost/autocomp?q=${currentTerm}")
          .check(substring("${currentTerm}"))
        )
      }
    )
    // search for the full term
    .exec(http("search").get("http://localhost/q=${term}"))

请评论我是否可以改进此代码,尤其是从性能或 readability/style 角度。