我有多个加特林模拟定义在这种方式(进口删除)。
class MySimulation1 extends Simulation {
object SimulationObj1 {
var feeder = ...
var random = exec(...)
}
val httpProtocol = ...
val myScenario = scenario("Scenario name").exec(SimulationObj1.random)
setUp(myScenario.inject(
rampUsers(10) over (180 seconds)
)
)
.assert(...)
}
class MySimulation2 extends Simulation {
object SimulationObj2 {
var feeder = ...
var random = exec(...)
}
val httpProtocol = ...
val myScenario = scenario("Scenario name").exec(SimulationObj2.random)
setUp(myScenario.inject(
rampUsers(15) over (300 seconds)
)
)
.assert(...)
}
还有另一个AllSimulations
类,它只是调用所有模拟,以便其中的场景可以并行执行。
class AllSimulations extends Simulation {
object AllSimulationsObj {
var feeder = ...
var random = exec(...)
}
val httpProtocol = ...
val myScenario = scenario("All scenarios").exec(
new MySimulation1().SimulationObj1.random,
new MySimulation2().SimulationObj2.random)
setUp(myScenario.inject(
rampUsers(10) over (180 seconds)
)
)
.assert(...)
}
问题是,为了在不同的durations
上有不同的rampUsers
计数,我从AllSimulations
类中删除了setUp
块,但这给了我一个错误“No scenario set up”。
我怎样才能将所有模拟场景与各自模拟类中定义的rampUsers
和durations
并行运行?
编辑:这是我尝试过的,但我不确定是否有意义。
class AllSimulations extends Simulation {
setUp(
new MySimulation1().myScenario.inject(rampUsers(10) over (180 seconds)),
new MySimulation2().myScenario.inject(rampUsers(15) over (300 seconds))
)
.assert(...)
}
2条答案
按热度按时间yrefmtwq1#
我不认为您的建议会起作用--并行执行模拟实际上没有意义,因为您的结果将不再反映并发用户的真实数量。
可行的方法是定义您的场景(如果合适,在不同的文件中),然后进行模拟,根据需要将用户注入到每个场景中。
eyh26e7m2#
如果你想同时运行两个或多个场景,假设你有两个文件(EXAMPLE1.scala和EXAMPLE2.scala),你必须创建一个单独的文件(Simulator.scala),如下所示。
示例1. SCALA(文件-1)
(SOME代码...)
..
..
瓦尔示例1_scenario =方案(“示例1”).exec(为所有租户运行())
示例2. SCALA(文件-2)
(SOME代码...)
..
..
瓦尔示例2_scenario =方案(“示例2”).exec(为所有租户运行())
模拟器.scala
类模拟器扩展模拟
{
设置**(新示例1()。示例1_方案。注入(在(10)期间的rampUsers(10)).协议(httpConf 1),
设置(新示例2().Example2_scenario.inject(在(20)期间的斜坡用户(30)).协议(httpConf 1),
}
运行Simulator.scala**,它将自动同时运行EXAMPLE1.scala和EXAMPLE2.scala