如何使用 Gatling 2.1.2 测试包含大量(150+)formParam 的页面?
How do I use Gatling 2.1.2 to test a page with lots (150+) of formParams?
我有一个表单,我正在尝试使用 Gatling 2.1.2[*](在 Windows 上)进行测试,它有很多(150+)个输入。我可以使用记录器为输入较少的其他页面创建测试。当我通过提交此页面生成模拟并在模拟文件夹中使用该模拟运行 gatling.bat 时,编译器静默失败。记录器生成的代码如下所示:
.exec(http("request_1")
.post("/saveform")
.headers(headers_0)
.formParam("data[item][0][value]", "hammer")
... [~150 more formParam lines] ...
.formParam("data[item][40][comment]", "Needs more work")
.headers(headers_2)))
我怀疑问题与 Scala 方法长度的限制有关。我已经通过删除大约一半的 .formParam 调用来确认这一点;这样做之后编译器成功,我可以运行模拟。一般的建议似乎是将 exec 项目移动到一个对象,但是 formParam 链太长以至于即使在它们自己的对象中,编译器也会默默地失败。
object SaveFormLibrary {
val saveFormChain = http("request_1")
.post("/saveform")
.headers(headers_0)
.formParam("data[item][0][value]", "hammer")
... [~150 more formParam lines] ...
.formParam("data[item][40][comment]", "Needs more work")
}
class ItemSimulation extends Simulation {
import saveFormLibrary._
val scn = scenario("saveForm").exec(saveFormChain)
[...]
}
有什么方法可以进一步分解 exec 链吗?我尝试定义方法来运行部分链,但我无法弄清楚如何使它与作为 DSL 的 Http Request 一起工作。我最后尝试的是:
def getForm(form:HttpRequest) = {
getFormHelper(form)
.formParam("data[item][25][value]", "stamp")
[...]
.formParam("data[item][40][comment]", "Needs work")
}
def getFormHelper(form:HttpRequest) = {
form
.formParam("data[item][0][value]", "hammer")
[...]
.formParam("data[item][24][comment]", "Buy more")
}
[...]
val scn = scenario("saveForm").exec(getForm(http("request_1")
.post("/saveform")
.headers(headers_0)))
这会引发 HttpRequest 未定义的错误,而且我不确定是否有合适的对象类型,因为我不熟悉 Scala 和 DSL 的工作方式。我是在正确的轨道上,还是我完全错误地考虑了这个问题?
[*]编辑:我之前使用的是 2.0.0 版。已升级到 2.1.2 并看到相同的行为。
这是 Gatling 2.1.2 及以下版本中的错误。已在 2.1.3 中修复。
我有一个表单,我正在尝试使用 Gatling 2.1.2[*](在 Windows 上)进行测试,它有很多(150+)个输入。我可以使用记录器为输入较少的其他页面创建测试。当我通过提交此页面生成模拟并在模拟文件夹中使用该模拟运行 gatling.bat 时,编译器静默失败。记录器生成的代码如下所示:
.exec(http("request_1")
.post("/saveform")
.headers(headers_0)
.formParam("data[item][0][value]", "hammer")
... [~150 more formParam lines] ...
.formParam("data[item][40][comment]", "Needs more work")
.headers(headers_2)))
我怀疑问题与 Scala 方法长度的限制有关。我已经通过删除大约一半的 .formParam 调用来确认这一点;这样做之后编译器成功,我可以运行模拟。一般的建议似乎是将 exec 项目移动到一个对象,但是 formParam 链太长以至于即使在它们自己的对象中,编译器也会默默地失败。
object SaveFormLibrary {
val saveFormChain = http("request_1")
.post("/saveform")
.headers(headers_0)
.formParam("data[item][0][value]", "hammer")
... [~150 more formParam lines] ...
.formParam("data[item][40][comment]", "Needs more work")
}
class ItemSimulation extends Simulation {
import saveFormLibrary._
val scn = scenario("saveForm").exec(saveFormChain)
[...]
}
有什么方法可以进一步分解 exec 链吗?我尝试定义方法来运行部分链,但我无法弄清楚如何使它与作为 DSL 的 Http Request 一起工作。我最后尝试的是:
def getForm(form:HttpRequest) = {
getFormHelper(form)
.formParam("data[item][25][value]", "stamp")
[...]
.formParam("data[item][40][comment]", "Needs work")
}
def getFormHelper(form:HttpRequest) = {
form
.formParam("data[item][0][value]", "hammer")
[...]
.formParam("data[item][24][comment]", "Buy more")
}
[...]
val scn = scenario("saveForm").exec(getForm(http("request_1")
.post("/saveform")
.headers(headers_0)))
这会引发 HttpRequest 未定义的错误,而且我不确定是否有合适的对象类型,因为我不熟悉 Scala 和 DSL 的工作方式。我是在正确的轨道上,还是我完全错误地考虑了这个问题?
[*]编辑:我之前使用的是 2.0.0 版。已升级到 2.1.2 并看到相同的行为。
这是 Gatling 2.1.2 及以下版本中的错误。已在 2.1.3 中修复。