是否有可能设置加特林场景以在特定线程数中运行?例如,我想在 1 小时内以 2500 个线程执行 1M 请求。
而且,每个场景(在 setUp(scn.inject()) 中)是否将在不同的线程中运行? Gatling 定义中的“线程”是什么意思 - 它与 Java 中的相同吗?
我找到了 topic ,但这并不完全是我所需要的(如果是主题开始,他只需要 3 个线程,但对我来说 - 数量要大得多)。
我有
val scn = scenario("Test")
.exec(mine)
}
setUp(
scn.inject(
rampUsers(1000000) over (3600)
)
).assertions(global.successfulRequests.percent.greaterThan(95))
最佳答案
如 topic 中所述您已经引用过,Gatling 将用于触发针对您的目标系统的请求的线程数不是并发用户数。这是实现细节。
加特林使用 Akka在后台并异步发出请求。这种异步特性意味着 Gatling 使用几个线程来触发所有请求。如果您想了解更多,请参阅 gatling-akka-defaults.conf .它使用 Akka Default Dispatcher它使用带有 aprox 的 fork-join 池。 CPU 内核数 * 2 个线程(不确定 100%,请参阅文档)。
正如在引用的主题中已经提到的,问题是 “用户”是什么意思? .
据我了解,您的目标是在您的系统上加载 2500 个并发用户。 Gatling 是否使用 2 或 1000 个线程来实现这一点并不重要。
因此,如果您想要 2500 个并发用户(每秒),只需编写:
setUp(
scn.inject( constantUsersPerSec(2500) during(3600) )
)...
另一方面,如果您想要 2500 个不同的人口(这是 IMO 不希望的),您也可以通过以下方式实现这一目标:
// `scn` have to be function, while scenarios should havce distinct name
def scn(name: String) = scenario(name)
.exec(
http("root").get("/")
)
setUp(
(for {
i <- 0 until 2500 // desired 2500
} yield {
scn(s"Test $i").inject(
rampUsers(1) over (3600)
)
}).toList // setUp can accept List[PopulationBuilder]
)
人口应该用于以自己的速率和持续时间同时注入(inject)不同的场景或不同类型的用户。例如见 Advanced Tutorial, Step 2 .它们并非旨在模拟并发用户。您可以直接从代码中看到,从语法上讲,解决方案是可行的,但很麻烦。
关于multithreading - 如何在 Gatling 中实现特定的线程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33226931/