压力测试 | 青训营

99 阅读2分钟

Benchmark

Benchmark是Go语言中用于性能测试和比较的工具。它可以帮助我们评估代码的执行速度和资源消耗,并提供详细的结果报告。

使用

  1. 在测试文件中,定义一个以Benchmark开头的函数,函数签名为func BenchmarkXxx(b *testing.B),其中Xxx是被测试的函数名。
  2. 在Benchmark函数中,使用b.N来获取测试的迭代次数,然后编写需要测试的代码。
  3. 使用命令行工具go test来运行Benchmark测试。命令行参数如下:
  • -bench:指定运行Benchmark测试,可以使用正则表达式来选择要运行的Benchmark函数。
  • -benchmem:输出内存分配统计信息。
  • -benchtime:指定每个Benchmark函数的运行时间,默认为1秒。
  • -count:指定每个Benchmark函数的运行次数,默认为1次。
  • -cpu:指定并行运行的CPU数量,默认为所有可用的CPU核心数
  1. 运行Benchmark测试后,会输出每个Benchmark函数的执行时间和内存分配信息。

example

测试下面的函数

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

要创建一个同名以test结尾的文件 fib_test.go

写测试代码

package main

import "testing"

func BenchmarkFib(b *testing.B) {
   for n := 0; n < b.N; n++ {
      Fib(30) // 重复运行Fib(30)函数b.N次
   }
}

注意函数名以 Benchmark 开头,参数是 b *testing.B

运行用例

通过如下命令运行基准测试:

$ go test -bench="."

结果说明

  1. Benchmark函数的执行时间以纳秒为单位进行测量,并显示为每次迭代的平均执行时间。
  2. 内存分配信息包括分配的次数和分配的字节数。
  3. 结果报告中还包括执行次数、总执行时间、每次迭代的平均执行时间和内存分配信息。
  4. 可以使用-benchmem命令行参数来输出更详细的内存分配统计信息。