我们正在使用 Gatling 对我们的应用程序进行负载测试(效果很好)。我们正在尝试通过对 Gatling 类进行可组合扩展来干掉一些代码(如ScenarioBuilder
/ ChainBuilder
/ 等,见io.gatling.core.structure
)。
这是我们的一个场景的示例:
val scn = scenario("Whatever")
.exec(Authentication.FeederLogin(userCsvFile, password))
.exec(User.ExtractId(User.SignIn()))
.exec(FindPeople(50, "personIds"))
// SPA load
.exec(User.FetchLandingPageFor("${userId}"))
.during(durationSeconds.seconds) {
pace(3.seconds, 8.seconds)
.exec(Person.Search("${personIds.random()}"))
.pause(3.seconds, 10.seconds)
// start the upload
.exec(Upload.create())
}
我们想做的是开始制作一些可组合的,以便我们可以在其他场景中重复使用它们。像这样的东西:
val scn = scenario("Whatever")
.login()
.during(durationSeconds.seconds) {
pace(3.seconds, 8.seconds)
.uploadFor("${personIds.random()}")
}
// ...
object WhateverScenarios {
implicit class ScenarioBuilderWithWhatevers(b: ScenarioBuilder) {
def login() : ScenarioBuilder = {
b.exec(Authentication.FeederLogin(userCsvFile, password))
.exec(User.ExtractId(User.SignIn()))
.exec(FindPeople(50, "personIds"))
}
def uploadFor(whom : String) : ScenarioBuilder {
b.exec(Person.Search("${personIds.random()}"))
.pause(3.seconds, 10.seconds)
// start the upload
.exec(Upload.create())
}
}
}
全面披露; 我对 Scala 不是很熟悉。这行得通,但问题uploadFor
在于此时它正在使用 a ChainBuilder
vs. a ScenarioBuilder
。
我想
哦,简单!只需使用泛型!
除了我不能让它工作:(它看起来像大多数,extend StructureBuilder[T]
但我似乎无法定义一个通用定义,我可以WhateverScenarios
在任何上下文中使用 my StructureBuilder[T]
。
提前感谢您提供的任何信息。