如何使用Gatling 2.1.2测试包含大量(150+)formParams的页面?

时间:2015-01-06 15:33:15

标签: gatling

我有一个表单,我试图用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链?我尝试定义运行链的某些部分的方法,但我无法弄清楚如何使用Http Request作为DSL。我尝试的最后一件事是:

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并且看到相同的行为。

1 个答案:

答案 0 :(得分:2)

这是Gatling 2.1.2及以下版本的错误。它已在2.1.3中修复。