使用 ChainBuilder 定义用户流的最佳方式是什么?
What would be the best way to define a gatling a user flow using ChainBuilder?
我是 Scala 和 Gatling 的新手,我正在尝试找出定义用户故事并将其通过 ChainBuilder 传递给 Gatling 场景的最佳方式。
当我说用户故事时,在我的例子中,我指的是一个流程,它包括登录、许多不同的调用,然后在整个测试期间循环另一个调用列表。
我创建了以下函数来创建场景:
def createScenario(name: String, feed: FeederBuilder, chains: ChainBuilder*): ScenarioBuilder = {
scenario(name).feed(feed).forever() {
exec(chains).pause(Config.pauseBetweenRequests)
}
}
下面是我如何执行这个函数:
val scenario = createScenario(Config.testName, feeder.random,
setSessionParams(PARAM1, Config.param1),
setSessionParams(PARAM2, Config.param2),
login,
executeSomeCall1,
executeSomeCall2,
executeSomeCall3,
executeSomeCall4,
executeSomeCall5,
executeSomeCall6,
executeSomeCall7,
executeSomeCall8,
executeSomeCall9,
)
下面是 executeSomeCall 函数的示例:
def executeSomeCall = {
exec(http("ET Call Home")
.post("/et/call/home")
.body(ElFileBody("/redFingerBody.json")).asJson
.check(status is 200))
}
我的第一个问题:
这是定义休息调用链并将其提供给场景的正确方法吗?我之所以这么问,是因为当我定义这样的流程时,我看到的是,出于某种原因,并不是我所有的 REST 调用都实际执行了。奇怪的是,如果我改变调用的顺序,它会起作用并且所有函数都会被调用。 (所以我肯定做错了什么)
我的第二个问题:
如何在此流程中定义无限循环? (只要测试是无限的运行)
例如,我希望上面的流程开始,当它到达 executeSomeCall8 时,它将在整个测试期间循环执行 executeSomeCall8 和 executeSomeCall9。
我不明白为什么你的调用不会被执行,但是你构建场景的方式并不那么灵活。您可以使用链接而不需要 createScenario() 方法。
这就引出了你的第二个问题,当你将场景链接如下时:
val scn = scenario("something")
...
.exec(someCall7)
.forever(){
exec(sommeCall8)
.exec(someCall9)
}
...
我的 someCallN 看起来像:
val someCall = http("request name")
.get("/some/uri")
...
注意:foerever()只是一个示例,您可以使用适合您需要的其他循环语句。
希望对你有帮助。
我是 Scala 和 Gatling 的新手,我正在尝试找出定义用户故事并将其通过 ChainBuilder 传递给 Gatling 场景的最佳方式。
当我说用户故事时,在我的例子中,我指的是一个流程,它包括登录、许多不同的调用,然后在整个测试期间循环另一个调用列表。
我创建了以下函数来创建场景:
def createScenario(name: String, feed: FeederBuilder, chains: ChainBuilder*): ScenarioBuilder = {
scenario(name).feed(feed).forever() {
exec(chains).pause(Config.pauseBetweenRequests)
}
}
下面是我如何执行这个函数:
val scenario = createScenario(Config.testName, feeder.random,
setSessionParams(PARAM1, Config.param1),
setSessionParams(PARAM2, Config.param2),
login,
executeSomeCall1,
executeSomeCall2,
executeSomeCall3,
executeSomeCall4,
executeSomeCall5,
executeSomeCall6,
executeSomeCall7,
executeSomeCall8,
executeSomeCall9,
)
下面是 executeSomeCall 函数的示例:
def executeSomeCall = {
exec(http("ET Call Home")
.post("/et/call/home")
.body(ElFileBody("/redFingerBody.json")).asJson
.check(status is 200))
}
我的第一个问题:
这是定义休息调用链并将其提供给场景的正确方法吗?我之所以这么问,是因为当我定义这样的流程时,我看到的是,出于某种原因,并不是我所有的 REST 调用都实际执行了。奇怪的是,如果我改变调用的顺序,它会起作用并且所有函数都会被调用。 (所以我肯定做错了什么)
我的第二个问题:
如何在此流程中定义无限循环? (只要测试是无限的运行)
例如,我希望上面的流程开始,当它到达 executeSomeCall8 时,它将在整个测试期间循环执行 executeSomeCall8 和 executeSomeCall9。
我不明白为什么你的调用不会被执行,但是你构建场景的方式并不那么灵活。您可以使用链接而不需要 createScenario() 方法。
这就引出了你的第二个问题,当你将场景链接如下时:
val scn = scenario("something")
...
.exec(someCall7)
.forever(){
exec(sommeCall8)
.exec(someCall9)
}
...
我的 someCallN 看起来像:
val someCall = http("request name")
.get("/some/uri")
...
注意:foerever()只是一个示例,您可以使用适合您需要的其他循环语句。 希望对你有帮助。