我对一个angularjs应用程序运行了一些简单的业力/茉莉花单元测试。我使用最新版本的Chrome并在WebStorm IDE中运行我的测试。为什么我的AngularJS,Karma/Jasmine测试运行得如此缓慢?
有时测试套件的运行速度很快(0.24秒),
有时完全相同的测试套件对完全相同的代码运行
我都想尽常识修复速度很慢(120秒)。我搜遍了网络,试图发现我做错了什么。
为什么我的测试运行得这么慢?
我对一个angularjs应用程序运行了一些简单的业力/茉莉花单元测试。我使用最新版本的Chrome并在WebStorm IDE中运行我的测试。为什么我的AngularJS,Karma/Jasmine测试运行得如此缓慢?
有时测试套件的运行速度很快(0.24秒),
有时完全相同的测试套件对完全相同的代码运行
我都想尽常识修复速度很慢(120秒)。我搜遍了网络,试图发现我做错了什么。
为什么我的测试运行得这么慢?
答案结果非常简单。
我使用Chrome来运行karma服务器。当您第一次启动karma服务器时,Chrome的一个实例将作为最大化窗口启动。所以自然你最小化这个,所以你可以看到你的测试运行。
问题是,Chrome会使CPU周期的任何最小化或辅助选项卡(切换的选项卡)陷入瘫痪。
因此,如果您最小化运行karma服务器的浏览器实例,或只是切换到不同的选项卡,则karma服务器严重缺乏CPU,并且测试需要很长时间才能完成。
解决方案是保持karma选项卡激活。浏览器窗口可以隐藏在其他窗口后面,但业务选项卡必须是选定的选项卡,并且浏览器不得最小化。
遵循这些简单的规则将确保您的测试始终全速运行。
Biofractal回答了他自己的问题,你可以这样做。您也可以将测试设置为在PhantomJS或Chrome Headless中运行,它基本上允许单元测试仅在您的命令行中运行,从而消除了对实际浏览器的影响。
只是为了告诫人们,PhantomJS似乎运行比Chrome和Chrome无头慢了许多。这需要这是完全不能接受我们的CI服务器上每个测试几乎是一秒钟。 –
即使我的经验告诉我,使用Chrome(或Phantom JS驱动程序)的Karma速度非常慢。在你按Enter键的那一刻,建立需要25秒,自举需要5-6秒,另外需要1.8秒(运行1个测试)。即使当我按下保存,在运行测试之前有几秒钟的延迟....我怀疑SSD会有所帮助。 – nuvio