Powermock/Easymock 不使用 VPN 时,测试花费的时间是原来的 10 倍

Powermock/Easymock tests take 10x as long when not on VPN

我会尽可能具体地说明这个...

基本上,当不在 OpenVPN 网络上时,大型 java 项目的当前单元测试大约需要 19 分 30 秒到 运行。在 OpenVPN 网络上,测试大约需要 2m0s 到 运行。这是为什么?

据我所知,没有外部呼叫。一项特定测试在关闭 VPN 时需要 1 分钟 36 秒,然后在使用 VPN 时需要 1 秒。测试编写效率低下吗?我应该从哪里着手改善关闭 VPN 的时间?什么会导致这样的问题?

我们正在使用 Powermock 和 Easymock 进行单元测试。上面的具体测试使用了内存数据库。

首先确保没有进行网络调用。例如,如果您使用 SOAP 服务,则可以隐式检索 wsdl 文件。使用wireshark、fiddler等软件进行网络分析。

其次,运行 JVM 分析并查看大部分时间花在哪里。有了这个巨大的差异(1 分钟对 1 秒)应该很容易查明问题所在。

这与模拟框架无关。但是测试内容会导致这样的事情。一般来说,它是由尝试进行 DNS 解析的代码引起的,即使是本地主机 (InetAddress.getLocalHost().getHostAddress())。

你最好的办法是在测试期间做一堆线程转储并查找上面的网络代码。

解决方案通常是在 /etc/hosts 中添加一行以快速解决您的测试正在寻找的内容。或者修复网络,但有时并不那么容易。

感谢大家的帮助。事实证明,Mac OS X 存在一个错误,导致测试初始化​​比 linux 慢得多。当我对连接服务进行超时集成测试时,一切都运行得更快。