go-基准测试

基准测试

Demo

// 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
	}
}

func fib(n int) int {
	if n == 0 || n == 1 {
		return n
	}
	return fib(n-2) + fib(n-1)
}
  • benchmark 和普通的单元测试用例一样,都位于 _test.go 文件中。
  • 函数名以 Benchmark 开头,参数是 b *testing.B。和普通的单元测试用例很像,单元测试函数名以 Test 开头,参数是 t *testing.T

执行基准测试

  • go test 命令默认不运行 benchmark 用例的,如果我们想运行 benchmark 用例,则需要加上 -bench 参数。

    $ go test -bench="$Fib" . // 通过-bench指定测试函数,或者通过正则匹配一类函数,比如说`-bench='Fib$'`
    goos: windows
    goarch: amd64
    pkg: gan
    cpu: Intel(R) Core(TM) i5-10400 CPU @ 2.90GHz
    BenchmarkFib-12              306           3925085 ns/op
    PASS
    ok      gan     2.218s
    
  • 如果想使用多个cpu执行

    $ go test -bench='Fib$' -cpu=2,4 .
    
  • 如果想提高测试时间和次数

    $ go test -bench='Fib$' -benchtime=50x .  //执行50次
    $ go test -bench='Fib$' -benchtime=5s .  //执行5s
    $ go test -bench='Fib$' -benchtime=5s -count=3 . //执行5s,一共执行3轮
    
  • 查看内存分配情况

    $ go test -bench='Fib$' -benchmem .
    

去除干扰因素

  • 重置计时器

    func BenchmarkFib(b *testing.B) {
    	time.Sleep(time.Second * 3) // 模拟耗时准备任务
    	b.ResetTimer() // 重置定时器
    	for n := 0; n < b.N; n++ {
    		fib(30) // run fib(30) b.N times
    	}
    }
    
  • 去除准备和后置处理工作耗时影响

    func BenchmarkBubbleSort(b *testing.B) {
    	for n := 0; n < b.N; n++ {
    		b.StopTimer()
    		nums := generateWithCap(10000)
    		b.StartTimer()
    		bubbleSort(nums)
    	}
    }
    

参考: https://geektutu.com/post/hpg-benchmark.html

相关推荐

  1. go-基准测试

    2024-07-13 14:46:01       25 阅读
  2. go单元测试之benchmark基准测试详解

    2024-07-13 14:46:01       47 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 14:46:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 14:46:01       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 14:46:01       58 阅读
  4. Python语言-面向对象

    2024-07-13 14:46:01       69 阅读

热门阅读

  1. kafka部署以及常用命令详细总结

    2024-07-13 14:46:01       18 阅读
  2. windows安全加固

    2024-07-13 14:46:01       19 阅读
  3. 微服务架构实战:案例分析与解决方案探讨

    2024-07-13 14:46:01       22 阅读
  4. 【数据结构】B树

    2024-07-13 14:46:01       18 阅读
  5. kafka 常用命令

    2024-07-13 14:46:01       22 阅读
  6. 解压zip、tar、gz文件--linux003

    2024-07-13 14:46:01       16 阅读
  7. Python调用摄像头

    2024-07-13 14:46:01       22 阅读
  8. [AI 大模型] OpenAI ChatGPT

    2024-07-13 14:46:01       22 阅读
  9. kotlin 基础

    2024-07-13 14:46:01       16 阅读
  10. Office 办公软件里常见的图表

    2024-07-13 14:46:01       19 阅读