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。它們不是爲了模擬併發用戶。你可以直接從代碼中看到這個解決方案是可能的,但是很麻煩。