You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Mocha单元测试添加性能测试功能

Mocha 现有单元测试接入性能测试方法

给现有Mocha单测加性能检测不需要重构原有测试逻辑,按需求选下面两种方案即可:

方案1:零依赖快速实现(适合基础性能回归校验)

不需要安装额外第三方包,直接用Node.js原生的performance API做耗时统计,配合Mocha本身的断言逻辑就能实现最基础的性能校验,对原有代码侵入性极低。
改造后的测试代码如下:

const { performance } = require('perf_hooks');
const assert = require('assert');

// 自定义性能阈值,单位ms,比如要求目标函数单次执行耗时不能超过0.1ms
const MAX_AVG_DURATION = 0.1;
// 压测轮次,根据函数执行速度调整,执行越快的函数轮次设越高,降低偶然误差
const TEST_ROUNDS = 1000;

describe("simple test", () => {
     it("first test", async() => {
        // 先跑原有功能断言,保证逻辑正确性
        assert.equal(myProgram(), 1);

        // 多轮压测统计性能
        const start = performance.now();
        for(let i = 0; i < TEST_ROUNDS; i++) {
          myProgram();
        }
        const totalDuration = performance.now() - start;
        const avgDuration = totalDuration / TEST_ROUNDS;

        // 输出性能数据
        console.log(`
          压测轮次: ${TEST_ROUNDS}
          总耗时: ${totalDuration.toFixed(2)}ms
          平均单次耗时: ${avgDuration.toFixed(4)}ms
        `);

        // 性能断言,不满足阈值直接标记测试失败
        assert.ok(
          avgDuration < MAX_AVG_DURATION,
          `性能不达标:平均单次耗时${avgDuration.toFixed(4)}ms,阈值为${MAX_AVG_DURATION}ms`
        );
     })
})

这个方案的优势是接入成本极低,和现有测试流程完全兼容;缺点是没有自动做误差校正、方差统计,适合快速拦截明显的性能回退问题。

方案2:专业基准测试(适合精确性能度量)

如果需要统计维度更全、结果更可信的性能数据,用benchmark库和Mocha适配即可,这个库会自动调整压测轮次、计算执行误差、统计每秒执行次数(ops/sec),是JS生态最常用的基准测试工具。
接入步骤:

  • 安装依赖:执行命令npm i benchmark -D
  • 改造测试用例,注意因为基准测试是异步执行的,需要调用Mocha的done回调标记用例结束,代码示例:
const Benchmark = require('benchmark');
const assert = require('assert');

// 性能阈值:要求目标函数每秒执行次数不低于10000次
const MIN_OPS_PER_SEC = 10000;

describe("simple test", () => {
     it("first test performance benchmark", (done) => {
        // 先校验功能正确性
        assert.equal(myProgram(), 1);

        const suite = new Benchmark.Suite();
        suite
          .add('myProgram执行性能', () => {
            myProgram();
          })
          .on('cycle', (event) => {
            // 打印单轮统计结果,包含ops/sec、误差范围
            console.log(String(event.target));
          })
          .on('complete', function() {
            const testResult = this[0];
            console.log(`测试完成,平均每秒执行${testResult.hz.toFixed(2)}次,误差范围±${testResult.stats.rme.toFixed(2)}%`);
            // 性能断言
            assert.ok(
              testResult.hz > MIN_OPS_PER_SEC,
              `性能不达标:每秒仅能执行${testResult.hz.toFixed(2)}次,阈值为${MIN_OPS_PER_SEC}次/秒`
            );
            done();
          })
          .run({ async: true });
     })
})

接入注意事项

  • 性能测试不要和普通单元测试混跑,建议单独在package.json里配置执行脚本:"test:perf": "mocha test/perf/**/*.test.js --timeout 20000",因为性能测试执行时间更长,需要调大Mocha的默认超时时间。
  • 跑性能测试时关闭debug工具、停止其他占用CPU资源的程序,避免统计结果出现偏差。
  • 如果需要做跨版本性能对比,可以把每次测试输出的性能数据写入本地JSON文件作为基准值,后续测试时和基准值做对比,超过预设偏差(比如性能下降超过10%)就标记测试失败,实现自动化性能回归检测。

内容的提问来源于stack exchange,提问作者js developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 19:30:10