我定义了以下5种场景:
ScenarioBuilder s1 = scenario("S1").exec(getAuthenticationChain()).exec(createProduct(150, "S1"))
ScenarioBuilder s2 = scenario("S2").exec(getAuthenticationChain()).exec(createProduct(10, "S2"))
ScenarioBuilder s3 = scenario("S3").exec(getAuthenticationChain()).exec(createProduct(30, "S3"))
ScenarioBuilder s4 = scenario("S4").exec(getAuthenticationChain()).exec(createProduct(60, "S4"))
ScenarioBuilder s5 = scenario("S5").exec(getAuthenticationChain()).exec(createProduct(80, "S5"))
现在的要求之一是:
Of all the users or requests ,
s1 should be executed 50% of total request ,
s2 10% of total request ,
s3 20% of total request ,
s4-> 15% ,
s5-> 5% .
假设我运行了 900 秒的模拟,每个场景执行的用户/请求的数量是:
s1: 900*50/100 = 450
s2: 900*10/100 = 90
s3: 900*20/100 = 180
s4: 900*15/100 = 135
s5: 900*5/100 = 45
我已经这样写了加特林模拟:
{
setUp(
s1.injectOpen(constantUsersPerSec(0.50).during(900)).protocols(getSignInHeaders()),
s2.injectOpen(constantUsersPerSec(0.10).during(900)).protocols(getSignInHeaders()),
s3.injectOpen(constantUsersPerSec(0.20).during(900)).protocols(getSignInHeaders()),
s4.injectOpen(constantUsersPerSec(0.15).during(900)).protocols(getSignInHeaders()),
s5.injectOpen(constantUsersPerSec(0.05).during(900)).protocols(getSignInHeaders())
)
}
我能够运行测试,但问题是所有这些场景都是并行运行的,我想以随机顺序执行每个场景的每个请求,并以每秒 1 个用户/请求的恒定速率执行。
lets say s1: will execute 450 requests, s1r1.......s1r450
s2: s2r1.........s2r90
s3: s3r1.........s3r180
s4: s4r1.........s4r135
s5: s5r1......s5r45
问:我如何编写一个场景来以随机顺序执行所有这些请求,并以每秒 1 个用户/请求的恒定速率执行。?
尝试失败:
我尝试按顺序执行它们:
{
setUp(
s1.injectOpen(constantUsersPerSec(0.50).during(900)).andThen(
s2.injectOpen(constantUsersPerSec(0.10).during(900)).andThen(
s3.injectOpen(constantUsersPerSec(0.20).during(900)).andThen(
s4.injectOpen(constantUsersPerSec(0.15).during(900)).andThen(
s5.injectOpen(constantUsersPerSec(0.05).during(900))
)
)
)
).protocols(getSignInHeaders());
}
这首先执行 s1 的所有请求,然后执行 s2 的所有请求,然后执行 s3 的所有请求,依此类推。
但我希望所有场景的所有请求都以恒定速率和随机顺序执行。 请帮我。谢谢。
注意:我使用Gatlin Maven插件版本4.5.0和Gatlin DSL来编写代码。
<plugin>
<groupId>io.gatling</groupId>
<artifactId>gatling-maven-plugin</artifactId>
<version>4.5.0</version>
</plugin>
针对这种情况使用多个场景是错误的策略。因为,一般来说,你都会遇到同样的情况。换句话说,您的行动链(请求)不会改变。
对于您的情况,加特林有方法
randomSwitch
,文档。scenario("Scenario")
.exec(getAuthenticationChain())
.randomSwitch( // beware: use parentheses, not curly braces!
50.0 -> exec(createProduct(150, "S1")),
10.0 -> exec(createProduct(10, "S2")),
... and so on ...
)