2017-05-23 109 views
3

結論:我有一個由Maven的故障安全集成測試插件運行的junit測試類,其中有幾個測試可以實現無限並行化。它們針對已部署的雲平臺運行,作爲構建推廣的大門。這些測試中的每個測試在開始時都有一個快速記憶峯值,但其後續使用率非常低,並基本上進行了輪詢,直到動作完成。交錯並行測試在junit開始?

我需要所有的測試並行運行(因爲他們把負載放在一個隊列上,導致縮放操作使作業運行得更快),這很容易實現失效保護,但我還需要錯開內存尖峯開始,所以我不會耗盡內存。

我應該如何完成它們?目前的實現做了一個Thread.sleep(random),但仍然有一個體面的統計概率,足夠的重疊可能會導致內存不足。我應該把Semaphore放在測試課上,然後在@Before方法中等待嗎?這是我可以使用自定義JUnit跑步者更輕鬆地完成的事情嗎?

回答

1

爲什麼不從一個單一的同步方法獲得內存尖峯的數據?這樣,每次測試都會一次記憶一次。

+0

我也有這個想法。這肯定會奏效,但我不確定我需要密切關注我的記憶(一次一個)。一次可能有五個左右可能會很好?無論如何,因爲它會起作用,所以有一個upvote。 –

2

Semaphore做法似乎​​是一個好主意,我,但你可能需要更精細的控制比使用@Before@After - 例如,使信號量靜態的測試類,立即內存秒殺之前獲取許可,並釋放只要內存變成GC'able就允許。然後,您可以通過構建Semaphore時可用的許可證數量來控制允許發生多少個併發內存峯值。