2

我有一台服务器,我想在其上进行自动化功能测试。它需要初始化几千个对象以在内存模型中构建它,从配置文件中获取数据,但这对于计算机来说仍然是微不足道的,并且从 eclipse 运行时它几乎是即时的启动。

当我在 junit 测试中运行相同的程序时,初始化阶段需要 15 秒左右,而不是独立应用程序的瞬时速度。没那么长,但如果我打算做几十个测试,它会加起来的。

根据 JVisualVM,这个时间分布在六种方法中,没有一种方法占用超过 14% 的 CPU 时间(这是在我优化掉占用 50% CPU 的方法之后)。所有正在运行的方法都是我希望看到的方法,并且似乎占用了总 CPU 时间的合理百分比;我无法将它与实时服务器进行比较,因为实时服务器初始化速度非常快,我无法以足够快的速度启动和停止 JVisualVM 来分析它。似乎我所有对象的 init 方法可能需要更长的时间,例如一个对象使用 3% cpu 进行 init,但自身时间为 000 ms,并且没有进行其他调用;但我不知道这是否是使用 JVisualVM 的常见结果?

尽管我在 Junit 和作为独立应用程序运行时做的一件事不同,但这并不重要;我正在使用 serverMock 对象(尽管它几乎不是模拟 ATM)。它扩展了我的服务器对象。现在扩展它的唯一原因是因为服务器的 run 方法(它无限期地运行以等待传入的消息)是一个受保护的方法,当服务器作为 jar 运行时由 main() 方法调用。我的模拟添加了一个方法,该方法将产生一个线程来运行服务器的 run 方法,因为我没有其他方法可以在单元测试中启动该方法。但是,慢点在于服务器在进入 run 方法之前的初始化;所以我认为这不是放缓的原因吗?

4

0 回答 0