基本概念
在Go中,基准测试是写在_test.go
文件中,以Benchmark
开头的函数,接受一个*testing.B
参数。
testing.B 字段
相关信息
字段名 | 类型 | 描述 |
---|---|---|
N |
int |
基准测试的迭代次数,由测试框架自动调整以获取可靠的计时结果 |
Timer |
嵌套结构体 | 包含计时相关的方法和字段 |
bytes |
int64 |
每次操作处理的字节数,用于计算吞吐量 |
startAllocs |
uint64 |
测试开始时内存分配计数(内部使用) |
startBytes |
uint64 |
测试开始时分配的字节数(内部使用) |
netAllocs |
uint64 |
测试期间的内存分配总数(使用 ReportAllocs() 时显示) |
netBytes |
uint64 |
测试期间分配的字节总数(使用 ReportAllocs() 时显示) |
result |
BenchmarkResult |
存储基准测试结果的字段 |
parallelism |
int |
并行度(用于 RunParallel ) |
context |
*benchContext |
基准测试上下文(内部使用) |
hasSub |
bool |
是否有子测试(内部使用) |
finished |
bool |
测试是否已完成(内部使用) |
主要方法
方法名 | 描述 |
---|---|
ResetTimer() |
重置计时器,排除初始化时间 |
StartTimer() |
开始计时 |
StopTimer() |
暂停计时 |
ReportAllocs() |
启用内存分配统计 |
ReportMetric(float64, string) |
报告自定义指标 |
SetBytes(int64) |
设置每次操作处理的字节数 |
SetParallelism(int) |
设置并行度 |
Run(string, func(*B)) |
运行子基准测试 |
RunParallel(func(*PB)) |
并行运行基准测试 |
示例用法
func BenchmarkExample(b *testing.B) {
// 初始化代码(不计时)
data := make([]byte, 1024)
b.ResetTimer() // 重置计时器
b.ReportAllocs() // 报告内存分配
for i := 0; i < b.N; i++ {
// 被测代码
process(data)
b.SetBytes(int64(len(data))) // 设置处理的字节数
}
}
2025/8/12大约 4 分钟