Мы используем 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
в том, что в этот момент он работает с ChainBuilder
против ScenarioBuilder
.
Я думал
О, просто!Просто используйте дженерики!
За исключением того, что я не могу заставить его работать :( Это выглядит , как большинство из них extend StructureBuilder[T]
, но я не могу показатьсячтобы получить общее определение, в котором я могу использовать свой WhateverScenarios
в любом контексте StructureBuilder[T]
.
Заранее благодарим за любую информацию, которая может быть предоставлена.