【问题标题】:Stagger parallel test start in junit?在junit中错开并行测试开始?
【发布时间】:2017-05-23 17:02:08
【问题描述】:

Conext:我有一个 junit 测试类,由 Maven 的故障安全集成测试插件运行,其中包含几个可以有效地无限并行化的测试。他们在已经部署的云平台上运行,作为建立推广的大门。这些测试中的每一个在开始时都会有一个快速的内存峰值,但随后的使用率非常低,它基本上会轮询直到一个操作完成。

我需要所有测试并行运行(因为它们将负载放在一个队列上,这会导致缩放操作使作业运行得更快),这在故障保护中很容易,但我还需要错开内存峰值开始,所以我不会耗尽内存。

我应该如何完成错开它们?当前的实现执行Thread.sleep(random),但仍有相当大的统计概率表明它们中有足够的重叠以耗尽内存。我应该在测试类中放置一个Semaphore 并在@Before 方法中等待它吗?这是我可以使用自定义 JUnit 跑步者更轻松地完成的事情吗?

【问题讨论】:

    标签: java multithreading maven junit


    【解决方案1】:

    为什么不从一种同步方法中获取导致内存激增的数据?这样,每次测试都会一次增加一个内存。

    【讨论】:

    • 我也有这个想法。它肯定会起作用,但我不确定我是否需要如此密切地保护我的记忆(一次一个)。一次大概五个左右可能会好?无论如何,请点赞,因为它会起作用。
    【解决方案2】:

    Semaphore 方法对我来说似乎是个好主意,但您可能想要比使用 @Before@After 更精细的控制 - 例如,将 Semaphore 设为测试类的静态,在内存之前立即获得许可峰值,并在内存变为 GC'able 时立即释放许可证。然后,您可以通过构造 Semaphore 时可用的许可数量来控制允许发生多少并发内存峰值。

    【讨论】:

      猜你喜欢
      • 2017-08-14
      • 2012-12-26
      • 2011-08-05
      • 1970-01-01
      • 2021-06-11
      • 2016-05-14
      • 2015-10-11
      • 2014-09-24
      • 1970-01-01
      相关资源
      最近更新 更多