我会尽可能具体地介绍这个...
基本上,当前大型Java项目的单元测试在没有OpenVPN网络时需要大约19m30s才能运行。在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慢得多。当我在连接服务上使用超时进行集成测试时,一切都运行得更快。