加特林模拟自动完成
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 角度。
我正在尝试创建一些 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 角度。