scala 多个Gatling模拟在不同的时间与不同的rampUsers并行进行

anhgbhbe  于 2023-01-13  发布在  Scala
关注(0)|答案(2)|浏览(150)

我有多个加特林模拟定义在这种方式(进口删除)。

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”。
我怎样才能将所有模拟场景与各自模拟类中定义的rampUsersdurations并行运行?
编辑:这是我尝试过的,但我不确定是否有意义。

class AllSimulations extends Simulation {

        setUp(
            new MySimulation1().myScenario.inject(rampUsers(10) over (180 seconds)),
            new MySimulation2().myScenario.inject(rampUsers(15) over (300 seconds))
        )
        .assert(...)
    }
yrefmtwq

yrefmtwq1#

我不认为您的建议会起作用--并行执行模拟实际上没有意义,因为您的结果将不再反映并发用户的真实数量。
可行的方法是定义您的场景(如果合适,在不同的文件中),然后进行模拟,根据需要将用户注入到每个场景中。

eyh26e7m

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.scalaEXAMPLE2.scala

相关问题