我正在尝试创建一些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}"))
答案 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}"))
请评论是否有任何我可以做的改进此代码,特别是从性能或可读性/风格角度。