【问题标题】:How to decrease tests running time with Jest?如何使用 Jest 减少测试运行时间?
【发布时间】:2020-03-02 20:11:56
【问题描述】:

我正在 EC2 Jenkins 从站上使用 Jest 和 Puppeteer 运行 60 次 E2E 测试。测试时间在 7-90 秒之间,平均为 24 秒 - 这意味着按顺序运行的总时间约为 24-25 分钟。 运行 jest -w 10 时,它会并行运行 10 个测试,但每个测试需要更长的时间,并且时间类似于 jest --runInBand 都在大约 24-26 分钟内完成。

我阅读了this 和相关链接,因此将我正在运行的机器更改为r5ad.12xlarge(48 核,384 GB!),因为假设资源有限并且对总运行时间仍然没有影响.我做了更多尝试:

  • 尝试了使用和不使用--ci --detectOpenHandles,仍然没有。
  • NODE_OPTIONS=--max_old_space_size=4096 也没有改变。
  • 默认运行,2、3、9、15...工人。
  • 使用 node --expose-gc ./node_modules/.bin/jest --runInBand --logHeapUsage 检查堆使用情况并发现一些泄漏 - 堆使用量逐渐从 ~100MB 增加到 1100MB
  • 尝试在机器上本地运行(如果有的话,没有 Jenkins 对资源的限制...)

我的问题是我是否遗漏了什么(标志、Jenkins 代理政策)?也许我应该出于 E2E 的目的尝试不同的测试运行器,因为 jest 更多地针对单元测试?

【问题讨论】:

    标签: jenkins continuous-integration jestjs puppeteer e2e-testing


    【解决方案1】:

    经过几次尝试,我找出了主要问题:

    1. 当您在管道中更新defaultValue 时,Jenkins 中有一个bug,它只有在另一个构建后才会生效。所以删除--detectOpenHandles 使我的构建时间很长,即使在删除它之后也是如此。此外,这使得结果难以跟踪。
    2. 开玩笑真的取决于可用内核的数量,所以我将机器更改为具有 16 个 vCPU 的 c5.4xlarge,这也产生了很大的不同。我的微调是设置--maxWorkers=33%,因为我们的网络应用程序也在同一台机器上运行。

    希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 2020-05-15
      • 2015-06-02
      • 2011-11-23
      • 1970-01-01
      • 1970-01-01
      • 2017-08-07
      • 1970-01-01
      • 1970-01-01
      • 2021-03-06
      相关资源
      最近更新 更多