为什么Jest - runInBand会加速测试?

时间:2017-05-09 08:28:06

标签: testing jestjs

我读到--runInBand标志在CI服务器上将Jest测试持续时间加快了50%。我无法在网上找到关于该标志的解释,只是它允许测试在同一个线程中顺序运行。

为什么在同一个线程中运行测试并按顺序使其更快?直觉上,不应该让它变慢吗?

2 个答案:

答案 0 :(得分:34)

阅读您的链接页面和其他一些相关来源(例如this github issue某些用户已经发现:

  

...在有限资源的环境中使用--runInBand会有所帮助。

  

... --runInBand我们的测试从> 1.5小时(实际上我不知道多长时间因为Jenkins超时1.5小时)到4分钟左右。 (注意:我们的构建服务器确实资源不足

正如我们所看到的,这些用户在他们的机器上的表现有所改善,即使他们的资源有限。如果我们阅读--runInBand标记所代表的docs所做的内容:

  

别名:-i。在当前进程中连续运行所有测试,而不是创建运行测试的子进程的工作池。这对调试很有用。

因此,考虑到这些评论和文档,我认为性能的提高是由于现在该流程在单个线程中运行。这极大地帮助了有限资源计算机,因为它不必花费内存和时间来处理和处理线程池中的多个线程,这个任务可能因其有限的资源而过于昂贵。

但是,我相信只有当您使用的机器资源有限时才会出现这种情况。如果你使用一个更“强大”的机器(即:几个内核,不错的RAM,SSD等)使用多个线程可能会比运行一个更好。

答案 1 :(得分:7)

在多线程中运行测试时,请为每个线程创建一个缓存。当您使用--runInBand开玩笑时,请为所有测试使用一个缓存存储。

我运行20个相同的测试文件后发现它,首先使用键--runInBand,第一个测试花费25秒,下一个相同的测试每个花费2-3s。

当我运行没有--runInBand键的测试时,每个相同的测试文件将在25秒内执行。