Rust性能测试兼容库codspeed-bencher-compat的使用,无缝对接Criterion和Bencher基准测试框架
Rust性能测试兼容库codspeed-bencher-compat的使用,无缝对接Criterion和Bencher基准测试框架
安装
cargo add --dev codspeed-bencher-compat --rename bencher
注意:这会安装codspeed-bencher-compat
crate并在你的Cargo.toml
中将其重命名为bencher
。这样你可以保留现有的导入,兼容层会处理其余部分。
使用兼容层不会改变你的基准测试套件的行为,Bencher仍会像往常一样运行它。
如果你愿意,也可以直接安装codspeed-bencher-compat
并更改导入以使用这个新的crate名称。
使用
让我们从Bencher文档中的示例开始,为2个简单函数创建基准测试套件(在benches/example.rs
中):
use bencher::{benchmark_group, benchmark_main, Bencher};
fn a(bench: &mut Bencher) {
bench.iter(|| {
(0..1000).fold(0, |x, y| x + y)
})
}
fn b(bench: &mut Bencher) {
const N: usize = 1024;
bench.iter(|| {
vec![0u8; N]
});
bench.bytes = N as u64;
}
benchmark_group!(benches, a, b);
benchmark_main!(benches);
创建Bencher基准测试的最后一步是在你的Cargo.toml
中添加新的基准测试目标:
[[bench]]
name = "example"
harness = false
就这样!你现在可以使用CodSpeed运行你的基准测试套件了:
$ cargo codspeed build
Finished release [optimized] target(s) in 0.12s
Finished built 1 benchmark suite(s)
$ cargo codspeed run
Collected 1 benchmark suite(s) to run
Running example
Using codspeed-bencher-compat v1.0.0 compatibility layer
NOTICE: codspeed is enabled, but no performance measurement will
be made since it's running in an unknown environment.
Checked: benches/example.rs::a (group: benches)
Checked: benches/example.rs::b (group: benches)
Done running bencher_example
Finished running 1 benchmark suite(s)
完整示例代码
以下是完整的基准测试示例:
- 首先,在
Cargo.toml
中添加依赖和基准测试配置:
[dev-dependencies]
codspeed-bencher-compat = { version = "3.0.5", package = "codspeed-bencher-compat", rename = "bencher" }
[[bench]]
name = "example"
harness = false
- 创建基准测试文件
benches/example.rs
:
// 导入必要的模块
use bencher::{benchmark_group, benchmark_main, Bencher};
// 第一个基准测试函数 - 计算0到1000的和
fn a(bench: &mut Bencher) {
bench.iter(|| {
(0..1000).fold(0, |x, y| x + y)
})
}
// 第二个基准测试函数 - 创建1024字节的向量
fn b(bench: &mut Bencher) {
const N: usize = 1024;
bench.iter(|| {
vec![0u8; N]
});
// 设置每次迭代处理的字节数
bench.bytes = N as u64;
}
// 创建基准测试组并指定要运行的函数
benchmark_group!(benches, a, b);
// 生成基准测试主函数
benchmark_main!(benches);
- 运行基准测试:
# 构建基准测试
cargo codspeed build
# 运行基准测试
cargo codspeed run
1 回复
Rust性能测试兼容库codspeed-bencher-compat使用指南
codspeed-bencher-compat
是一个Rust性能测试兼容库,它允许开发者无缝对接Criterion和Bencher这两个流行的Rust基准测试框架,同时与CodSpeed性能监控平台兼容。
主要特性
- 兼容现有的Criterion和Bencher基准测试代码
- 无需修改现有测试即可接入CodSpeed平台
- 保持与原生框架相同的API体验
- 提供更精确的性能测量结果
安装方法
在项目的Cargo.toml
文件中添加依赖:
[dev-dependencies]
codspeed-bencher-compat = "0.1"
criterion = "0.4" # 可选,如果使用Criterion
bencher = "1.0" # 可选,如果使用Bencher
使用方法
1. 兼容Criterion的使用示例
use codspeed_bencher_compat::{criterion_group, criterion_main, Bencher, Criterion};
// 斐波那契数列计算函数
fn fibonacci(n: u64) -> u64 {
match n {
0 => 1,
1 => 1,
n => fibonacci(n - 1) + fibonacci(n - 2),
}
}
// 基准测试函数
fn bench_fib(b: &mut Bencher) {
b.iter(|| fibonacci(20)); // 测试计算fibonacci(20)的性能
}
// Criterion基准测试配置
fn criterion_benchmark(c: &mut Criterion) {
c.bench_function("fib 20", bench_fib); // 注册基准测试
}
// 定义测试组和主函数
criterion_group!(benches, criterion_benchmark);
criterion_main!(benches);
2. 兼容Bencher的使用示例
use codspeed_bencher_compat::{bench, bench_fn, Bencher};
// 斐波那契数列计算函数
fn fibonacci(n: u64) -> u64 {
match n {
0 => 1,
1 => 1,
n => fibonacci(n - 1) + fibonacci(n - 2),
}
}
// 基准测试函数
fn bench_fib(b: &mut Bencher) {
b.iter(|| fibonacci(20)); // 测试计算fibonacci(20)的性能
}
// 注册基准测试
bench_fn!(bench_fib);
运行基准测试
运行基准测试的方式与原生框架相同:
# 对于Criterion兼容的测试
cargo bench
# 对于Bencher兼容的测试
cargo bench --bench your_benchmark_name
集成CodSpeed
要使用CodSpeed进行性能监控,只需安装CodSpeed CLI并运行:
# 安装CodSpeed CLI
cargo install codspeed-cargo
# 使用CodSpeed运行基准测试
cargo codspeed bench
注意事项
- 该库会检测是否在CodSpeed环境下运行,如果不是,则回退到原始框架行为
- 测量结果在CodSpeed环境下会更加精确和稳定
- 无需修改现有的基准测试代码即可获得CodSpeed的优势
迁移指南
如果已有项目使用Criterion或Bencher,只需将导入语句从:
use criterion::{criterion_group, criterion_main, Bencher, Criterion};
改为:
use codspeed_bencher_compat::{criterion_group, criterion_main, Bencher, Criterion};
其余代码可以保持不变。
完整示例demo
下面是一个完整的项目示例,展示如何使用codspeed-bencher-compat进行性能测试:
- 首先创建项目并添加依赖:
cargo new benchmark-demo
cd benchmark-demo
- 编辑Cargo.toml文件:
[package]
name = "benchmark-demo"
version = "0.1.0"
edition = "2021"
[dev-dependencies]
codspeed-bencher-compat = "0.1"
criterion = "0.4"
- 创建基准测试文件benches/benchmark.rs:
use codspeed_bencher_compat::{criterion_group, criterion_main, Bencher, Criterion};
// 一个简单的字符串处理函数
fn process_string(input: &str) -> String {
input.chars().rev().collect::<String>().to_uppercase()
}
// 基准测试:处理短字符串
fn bench_short_string(b: &mut Bencher) {
b.iter(|| process_string("hello"));
}
// 基准测试:处理长字符串
fn bench_long_string(b: &mut Bencher) {
b.iter(|| process_string("this is a much longer string for benchmarking"));
}
// 配置基准测试组
fn criterion_benchmark(c: &mut Criterion) {
c.bench_function("short string", bench_short_string);
c.bench_function("long string", bench_long_string);
// 也可以使用参数化基准测试
let inputs = ["apple", "banana", "cherry"];
c.bench_function_over_inputs(
"fruit processing",
|b, &&s| b.iter(|| process_string(s)),
&inputs,
);
}
// 定义测试组和主函数
criterion_group!(
name = benches;
config = Criterion::default().sample_size(10);
targets = criterion_benchmark
);
criterion_main!(benches);
- 运行基准测试:
# 使用原生Criterion运行
cargo bench
# 使用CodSpeed运行
cargo install codspeed-cargo
cargo codspeed bench
这个完整示例展示了:
- 如何设置基准测试项目
- 如何编写基准测试函数
- 如何使用不同的输入进行测试
- 如何配置基准测试参数
- 如何在Criterion和CodSpeed之间切换