Appearance
基准测试
- 用于衡量代码性能的重要工具,通过 testing 包实现。
- 它可以帮助你分析代码的执行效率,找出性能瓶颈。
基本规则
- 新建一个
test目录,包含所有测试用例 - 创建一个测试文件,文件名格式必须
xxx_test.go。 - 测试函数必须
BenchmarkXxx开头 - 测试函数必须接收一个指向
b testing.B的指针作为参数
代码示例
go
package curl
import (
"testing"
)
// Fib 计算第 n 个斐波那契数
func Fib(n int) int {
if n <= 1 {
return n
}
return Fib(n-1) + Fib(n-2)
}
// 基准测试:测试 Fib(10) 的性能
func BenchmarkFib10(b *testing.B) {
// 循环 b.N 次,每次执行被测试函数
for i := 0; i < b.N; i++ {
Fib(10)
}
}
// 基准测试:测试 Fib(20) 的性能
func BenchmarkFib20(b *testing.B) {
for i := 0; i < b.N; i++ {
Fib(20)
}
}运行测试
参数说明
-bench指定要运行的基准测试函数。-benchmem额外输出内存分配统计(分配次数和字节数)-benchtime指定基准测试的运行时间,默认是 1 秒。
bash
# 运行所有基准测试
go test -bench=.
# 运行指定基准测试函数
go test -bench="BenchmarkFib10|BenchmarkFib20"
# 额外分配内存
go test -bench="BenchmarkFib10|BenchmarkFib20" -benchmem
# 运行基准测试 10 秒
go test -bench="BenchmarkFib10|BenchmarkFib20" -benchtime=10s结果分析
bash
goos: darwin
goarch: arm64
BenchmarkFib10-12 10703092 106.7 ns/op 0 B/op 0 allocs/op
BenchmarkFib20-12 91834 13298 ns/op 0 B/op 0 allocs/op
PASSBenchmarkFib10-12表示在12个 CPU 核心上运行BenchmarkFib10基准测试函数。10703092b.N 的最终值(循环执行了 10703092 次)。106.7 ns/op表示每次调用Fib(10)函数平均需要106.7纳秒。0 B/op表示每次调用Fib(10)函数分配的内存字节数。0 allocs/op表示每次调用Fib(10)函数分配的内存次数。
