性能分析:benchmark基准测试

性能分析:benchmark基准测试

benchmark(基准测试) 可以度量某个函数或方法的性能,也就是说,如果我们知道性能的瓶颈点在哪里,benchmark 是一个非常好的方式。

// fib.go
package main

func fib(n int) int {
    if n == 0 || n == 1 {
        return n
    }
    return fib(n-2) + fib(n-1)
}

// fib_test.go
package main

import "testing"

func BenchmarkFib(b *testing.B) {
    for n := 0; n < b.N; n++ {
        fib(30) // run fib(30) b.N times
    }
}

// 运行用例
$ go test -bench .
goos: darwin
goarch: amd64
pkg: example
BenchmarkFib-8               200           5865240 ns/op
PASS
ok      example 1.782s
  1. 与Test测试的区别
    • benchmark 测试用例和普通test单元用例一致,都位于 _test.go 文件中
    • benchmark 测试以函数名 Benchmark 开头, test测试以函数 Test 开头
    • benchmark 测试入参为 b *testing.B, test测试入参为 t *testing.T
  1. 运行benchmark

    • go test 默认不运行 benchmark 测试用例, 需要添加 -bench 才能运行 benchmark 测试用例。
    • -bench= 可以传入正则表达式,这样匹配的用例才会执行。
    • -cpu 可以改变 GOMAXPROCS, 变更运行的cpu核数
    • -benchtime 可指定执行时间或具体次数
    • -count 可设置 benchmark 轮数
    • -benchmem 可查看内存分配量和分配次数
  2. 进行性能测试时,尽可能保持测试环境的稳定

    • 可以使用 b.ResetTimer() 可重置定时器
    • 可以使用 b.StopTimer() 暂停计时
    • 可以使用 b.StartTimer() 开始计时
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容