我们的Java Spring项目有一些接受测试,这些测试使用 spring context SpringJUnit4ClassRunner
运行,在测试执行时会初始化一次,并在整个循环中保持活动状态。
用于在测试中的类所在的项目中运行正常的测试。我们添加了越来越多的测试但是开始冻结。当第一次发生时,我将接受测试移动到他们自己的项目中,它再次运行良好。在添加更多测试之后,它现在再次冻结,但是在达到旧的运行量测试时却没有更早。
现在,经过30-40次测试后,执行将以PermGen space error
中止。
增加堆大小将无法实现。
VisualJvm 显示堆分配在冻结前从1Gb突然爆发到2。
这不能追溯到单个测试。我假设在记忆中保留了太多的物体,但我无法确定。
所以我想知道,如果我能将所有测试的执行分成大约20个测试的块。在每个块之后,应该重新初始化spring上下文,从而有希望触发垃圾收集并释放堆。
我不想在surefire中使用 forkMode = always 来为每个测试获取新的上下文。这会有效,但会将执行速度降低到不可接受的长度。
到目前为止,我唯一的指针是 maven测试组或个人资料与 surefire插件一起使用。我确实设法拆分了测试,但显然maven现在只在其测试周期中运行其中一个,具体取决于我想要的那个。
但是我不想明确指定要运行的特定组,而是使用单个构建/命令依次运行所有这些组。
也许这是不可能的,我将不得不设置我们的Jenkins,其中有几个版本,每个版本都运行一个配置文件/组/套件或执行批处理脚本以便彼此运行它们。我更喜欢一个集成版本,特别是那个被日食JUnit跑者选中的版本,但我想这真的太过于希望了......
有人可以帮忙吗?