我想使用 Cucumber JVM 之类的东西来驱动为 Gatling 编写的性能测试。
理想情况下,Cucumber 功能会以某种方式动态构建场景 - 可能重用类似于“高级教程”中描述的方法的预定义链对象,例如
val scn = scenario("Scenario Name").exec(Search.search("foo"), Browse.browse, Edit.edit("foo", "bar")
我已经查看了 Maven 插件如何执行脚本,并且我也看到提到使用 App trait 但我找不到任何关于后者的文档,这让我觉得之前有人会想要这样做...
任何人都可以(Gatling noob)指出一些文档或如何实现这一目标的示例代码的方向吗?
编辑 20150515
所以要多解释一点:
我创建了一个 trait,旨在建立一系列,我认为,由 Cucumber 步骤触发的 ChainBuilders:
trait GatlingDsl extends ScalaDsl with EN {
private val gatlingActions = new ArrayBuffer[GatlingBehaviour]
def withGatling(action: GatlingBehaviour): Unit = {
gatlingActions += action
}
}
GatlingBehaviour 看起来像这样:
object Google {
class Home extends GatlingBehaviour {
def execute: ChainBuilder =
exec(http("Google Home")
.get("/")
)
}
class Search extends GatlingBehaviour {...}
class FindResult extends GatlingBehaviour {...}
}
在 StepDef 类中:
class GoogleStepDefinitions extends GatlingDsl {
Given( """^the Google search page is displayed$""") { () =>
println("Loading www.google.com")
withGatling(Home())
}
When( """^I search for the term "(.*)"$""") { (searchTerm: String) =>
println("Searching for '" + searchTerm + "'...")
withGatling(Search(searchTerm))
}
Then( """^"(.*)" appears in the search results$""") { (expectedResult: String) =>
println("Found " + expectedResult)
withGatling(FindResult(expectedResult))
}
}
我的想法是,我可以通过以下方式执行整个 Action 序列:
val scn = Scenario(cucumberScenario).exec(gatlingActions)
setup(scn.inject(atOnceUsers(1)).protocols(httpConf))
然后检查报告或在测试失败时捕获异常,例如响应时间太长。
似乎无论我如何使用 'exec' 方法,它都会尝试在那里立即执行它,而不是等待场景。
另外我不知道这是否是最好的方法,我们想为我们的 Gatling 测试构建一些可重用的块,可以通过 Cucumber 的 Given/When/Then 风格构建。有没有更好的或已经存在的方法?
最佳答案
遗憾的是,目前让 Gatling 直接启动 Simulation 实例是不可行的。
并不是说它在技术上不可行,但您只是第一个尝试这样做的人。
目前,Gatling 通常负责编译,只能传递要加载的类的名称,而不是实例本身。
您可以先 fork io.gatling.app.Gatling
和 io.gatling.core.runner.Runner
,然后提供 PR 来支持这种新行为。前者是主要的入口点,后者可以实例化和运行模拟。
关于testing - 以编程方式执行 Gatling 测试,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30194555/