2017-05-23 71 views
3

结论:我有一个由Maven的故障安全集成测试插件运行的junit测试类,其中有几个测试可以实现无限并行化。它们针对已部署的云平台运行,作为构建推广的大门。这些测试中的每个测试在开始时都有一个快速记忆峰值,但其后续使用率非常低,并基本上进行了轮询,直到动作完成。交错并行测试在junit开始?

我需要所有的测试并行运行(因为他们把负载放在一个队列上,导致缩放操作使作业运行得更快),这很容易实现失效保护,但我还需要错开内存尖峰开始,所以我不会耗尽内存。

我应该如何完成它们?目前的实现做了一个Thread.sleep(random),但仍然有一个体面的统计概率,足够的重叠可能会导致内存不足。我应该把Semaphore放在测试课上,然后在@Before方法中等待吗?这是我可以使用自定义JUnit跑步者更轻松地完成的事情吗?

回答

1

为什么不从一个单一的同步方法获得内存尖峰的数据?这样,每次测试都会一次记忆一次。

+0

我也有这个想法。这肯定会奏效,但我不确定我需要密切关注我的记忆(一次一个)。一次可能有五个左右可能会很好?无论如何,因为它会起作用,所以有一个upvote。 –

2

Semaphore做法似乎​​是一个好主意,我,但你可能需要更精细的控制比使用@Before@After - 例如,使信号量静态的测试类,立即内存秒杀之前获取许可,并释放只要内存变成GC'able就允许。然后,您可以通过构建Semaphore时可用的许可证数量来控制允许发生多少个并发内存峰值。