我读到--runInBand标志在CI服务器上将Jest测试持续时间加快了50%。我无法在网上找到关于该标志的解释,只是它允许测试在同一个线程中顺序运行。
为什么在同一个线程中运行测试并按顺序使其更快?直觉上,不应该让它变慢吗?
答案 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秒内执行。