我正在尝试测试一个在内部根据输入执行不同操作的 API:
- 国家
- 顾客
- 物品数量
以下模拟是我想出的:
val countries = List("US", "CAN")
val customerTypes = List("TYPE1", "TYPE2")
val basketSizes = List(1, 10, 50)
val scenarioGenerator: Seq[(String, String, Int)] = for {
country <- countries
customerType <- customerTypes
basketSize <- basketSizes
} yield (country, customerType, basketSize)
def scenarios(): Seq[PopulationBuilder] = {
var scenarioList = new ArraySeq[PopulationBuilder](countries.size * customerTypes.size * basketSizes.size)
var i = 0;
for ((country: String, customerType: String, basketSize: Int) <- scenarioGenerator) {
// fetch customer data for scenario
val customers = DataFetcher.customerRequest(country, customerType)
// fetch product data for scenario
val products = DataFetcher.productRequest(country)
// generate a scenario with given data and parameters
val scen = scenario(s"Pricing-(${country},${customerType},${basketSize})")
// feeder that creates the request object for the gatling user
.feed(new PricingFeeder(country, customers, products, basketSize))
.repeat(10) {
exec(Pricing.price)
.pause(500 milliseconds)
}
.inject(
rampUsers(10) over (10 seconds)
)
scenarioList(i) = scen
i = i + 1
}
scenarioList
}
setUp(scenarios: _*).protocols(httpProto)
这是使用 maven 插件运行的(并使用 gatling 插件在 jenkins 中进行跟踪),但这会导致单个跟踪案例:Pricing
. 这是没有用的,因为即使项目数量也将接近响应时间的线性增加。
具有每种场景类型的simulation.log
数据,但开箱即用的报告将其作为单一类型的查询处理,并将所有结果合并到一个图表中,这意味着无法查看某个组合是否会导致峰值计算或数据错误。
我想为每个组合获取单独的指标,因此很容易看到例如 API 中的代码或数据更改导致Pricing-(US,TYPE1,50)
场景中的延迟峰值。
用加特林实现这一目标的惯用方式是什么?我不想为每种情况创建模拟,因为这将是管理的一场噩梦(我们正在努力实现使用 jmeter 摆脱手动管理的数据和詹金斯作业)。