benny 介绍 - 一个简单的 benchmark 框架

简介: benny 是一个简单的 benchmark 框架,当你需要测试自己的库或是方法性能时,可使用它来进行对其进行基准测试。

benny 是一个简单的 benchmark 框架,当你需要测试自己的库或是方法性能时,可使用它来进行对其进行基准测试。

前排先上 GitHub 地址

官方标榜的特性为:

  • 可以简单的编写任何同步或异步代码
  • 可为每个用例单独配置
  • 可选择性跳过或只执行特定的用力
  • 支持多种结果类型:
  • JSON
  • CSV
  • HTML Table
  • HTML Chart
  • 不需要额外的设置几个输出
  • 套件结果为 Promise

使用

先看下使用方法:

const b = require('benny');
b.suite(
    'Example',
    b.add('Reduce two elements', () => {
        [1, 2].reduce((a, b) => a + b);
    }),
    b.add('Reduce five elements', () => {
        [1, 2, 3, 4, 5].reduce((a, b) => a + b);
    }),
    b.cycle(),
    b.complete(),
    b.save({ file: 'reduce', version: '1.0.0' }),
    b.save({ file: 'reduce', format: 'chart.html' })
);
复制代码

如上定义了一组套件,名称为 Example,然后通过 add 添加两个用例,cycle 用来定义用例的输出,可传入函数来自定义,complete 默认为输出基准测试结果,同样可传入函数来自定义处理。

随后的 save 则是用来保存结果,file 为文件名称,format 为输出的格式。支持的格式上面已经写过,不再赘述。

可尝试执行上述 benchmark 文件然后查看输出结果:

Running "Example" suite...
Progress: 100%
  Reduce two elements:
    213 985 744 ops/s, ±0.61%   | fastest
  Reduce five elements:
    109 395 371 ops/s, ±0.66%   | slowest, 48.88% slower
Finished 2 cases!
  Fastest: Reduce two elements
  Slowest: Reduce five elements
Saved to: benchmark/results/reduce.json
Saved to: benchmark/results/reduce.chart.html
复制代码

默认会输出用例名称及其执行效率,如上 Reduce two elements 部分为该用例名称,213 985 744 ops/s 为执行效率表示该方法每秒执行了 213 985 744 次,±0.61% 为单案例执行时采集结果的误差范围值,fastest 表示其为最快的用例,slowest 其为最慢的用例,非最快用例后会标注效率的百分比差。

如果使用了图表还可打开图表查看,会更直观,如上结果对应的图表为:

网络异常,图片无法展示
|

图表可直接将输出的图表 html 打开查看,其中使用 chart.js 进行渲染。

其他功能

除了上述基础使用,benny 还提供了一些其他的功能,比如可以通过调用 add.skip 来跳过某个用例,或 add.only 来跳过所有其他用例只执行该用例。

如果用例代码为异步代码,直接将用例定义为 async 即可。

add('Async benchmark without setup', async () => {=
    await delay(0.5);
    // 结果为 2 ops/s
});
复制代码

除此之外 benny 还支持一些自定义选项:

  • delay - 每次测试用例执行后的休息时间
  • initCount - 每次测试用例执行前的初始化次数
  • maxTime - 执行的最大次数
  • minTime - 执行的最小次数
  • minSamples - 最小采样次数

配置的方式有两种,一种是通过 configurecases

b.configure({
    cases: options
});
复制代码

即可为所有用例添加配置,也可在 add 时为单个用例添加配置:

b.add(
    'Reduce two elements',
    () => {
        [1, 2].reduce((a, b) => a + b);
    },
    options
);
复制代码

除了上述配置外,configure 还可配置一些全局配置,不过目前只有一个 minDisplayPrecision,用来配置输出内容的精度,默认为 2。

总结

通过 benny 可以方便的为一些方法等进行基准测试,方便查看函数的执行效率,测量各种代码的性能,并且支持多种输出结果,方便各种场景下展示结果。

如果有类似需要测量函数性能,或者想要测量某些变更对性能的影响程度时,不妨试试看。

相关文章
|
5月前
|
网络协议 安全 测试技术
性能工具之emqtt-bench BenchMark 测试示例
【4月更文挑战第19天】在前面两篇文章中介绍了emqtt-bench工具和MQTT的入门压测,本文示例 emqtt_bench 对 MQTT Broker 做 Beachmark 测试,让大家对 MQTT消息中间 BenchMark 测试有个整体了解,方便平常在压测工作查阅。
447 7
性能工具之emqtt-bench BenchMark 测试示例
|
5月前
|
Ubuntu 物联网 Linux
性能工具之emqtt_bench快速上手
【4月更文挑战第8天】MQTT 协议是目前最适合物联网场景数据平台搭建的通信协议。基于此,BenchMark 联网场景中的 MQTT 消息采集与传递,以及如何构建一个百万级,甚至千万级 MQTT 消息平台,可以为物联网业务的企业用户提供平台架构设计参考。
114 2
性能工具之emqtt_bench快速上手
|
数据可视化 Java 编译器
如果你想写自己的Benchmark框架
如果你想写自己的Benchmark框架
|
消息中间件 SQL 分布式计算
Nexmark Benchmark
Nexmark Benchmark test
358 0
|
测试技术 Go
Go 编程 | 连载 34 - Benchmark 基准测试
Go 编程 | 连载 34 - Benchmark 基准测试
Go 编程 | 连载 34 - Benchmark 基准测试
|
测试技术 编译器 开发工具
C++服务性能优化的道与术-道篇:google benchmark的安装与使用
如果你实现一个公共的工具函数,有多种实现方式,你怎么测试性能呢?是循环多少次,然后打印一下起止时间,计算耗时吗?这样当然没问题。但是每次都类似的需求,都会写很多冗余的代码来进行耗时统计,另外也缺乏灵活性。有没有方便的方式来测试呢?有,Google家的benchmark性能测试框架。
1099 2
C++服务性能优化的道与术-道篇:google benchmark的安装与使用
|
存储 分布式计算 数据库
|
测试技术 Apache
性能测试工具Apache benchmark
性能测试工具Apache benchmark
427 0
|
人工智能 分布式计算 算法
面向DSSoC的Benchmark的需求
本文从Benchmark的定义出发,依次介绍了常用的Benchmark的情况,包括Dhrystone、Coremark,以及个人PC,个人终端等等Benchmark,然后,进一步分析DSSoC系统对于Benchmark的需求,提出了“面向DSSoC的Benchmark的需求”,最后,对未来的Benchmark做了一些展望。
面向DSSoC的Benchmark的需求