2

有没有可能将Gatling场景设置为以特定线程数运行?例如,我想在1,500小时的线程中执行1M请求。如何在Gatling中实现特定线程数

此外,每个场景(在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)) 

回答

1

正如topic你引,即加特林会用火,避免测试目标系统的请求的线程数是不是并发用户数的说明。它是实现细节。

Gatling在底层使用Akka并异步发出请求。这种异步性意味着Gatling正在使用一些线程来触发所有请求。如果您想了解更多信息,请参阅gatling-akka-defaults.conf。它使用Akka Default Dispatcher,它使用fork-join池和aprox。 CPU核心数量* 2个线程(在100%不确定,请参阅doc)。

正如已经在引用的主题中提到的,问题是你是什么意思的“用户”?

据我所知,你的目标是让你的系统有2500个并发用户。加特林是否会使用2或1000个线程来实现这一点并不重要。

所以,如果你想2500个并发用户(每秒),很容易只写:

setUp(
    scn.inject(constantUsersPerSec(2500) during(3600)) 
)... 

如果您在另一方面想2500组不同人群(这是国际海事组织不希望),你可以做到这一点同样,通过:

// `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] 
) 

人群应该被用来注入不同的情景或在同一时间以自己的速度和持续时间的不同类型的用户。例如,参见Advanced Tutorial, Step 2。它们不是为了模拟并发用户。你可以直接从代码中看到这个解决方案是可能的,但是很麻烦。