Gatling模拟自动完成

时间:2015-11-10 18:47:26

标签: scala gatling

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

在加特林这样做的最佳方式是什么?

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

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

2 个答案:

答案 0 :(得分:1)

您错过了如何构建Gatling场景:在加载时将操作链接在一起,然后工作流是静态的。

您尝试构建此方法的方法是错误的:您尝试构建请求序列,具体取决于仅在运行时可用的某些信息,即稍后的信息。

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

答案 1 :(得分:0)

感谢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}"))

请评论是否有任何我可以做的改进此代码,特别是从性能或可读性/风格角度。