简言

基准测试是测量一个程序在固定工作负载下的性能

在Golang中,基准测试函数以Benchmark为前缀并且带有一个 *testing.B 类型的参数

规则

  1. 基准测试的代码文件必须以_test.go结尾
  2. 基准测试的函数必须以Benchmark开头
  3. 基准测试函数必须接受一个指向Benchmark类型的指针作为唯一参数,即比如func BenchmarkMapkeys1(b *testing.B)
  4. 基准测试函数不能有返回值
  5. b.ResetTimer是重置计时器,这样可以避免for循环之前的初始化代码的干扰
  6. 最后的for循环很重要,被测试的代码要放到循环里
  7. b.N是基准测试框架提供的,表示循环的次数,因为需要反复调用测试的代码,才可以评估性能
  8. 不要修改b.N,因为基准测试是很智能的,它会自动根据你要测试函数的运行时间动态调整该值
  9. b.N 从 1 开始,如果基准测试函数在1秒内就完成 (默认值),则 b.N 增加,并再次运行基准测试函数。b.N 在近似这样的序列中不断增加;1, 2, 3, 5, 10, 20, 30, 50, 100,1000,20000 等等。 基准框架试图变得聪明,如果它看到当b.N较小而且测试很快就完成的时候,它将让序列增加地更快

示例:(测试int转string的SprIntf()函数的效率)

package test
import ("fmt""testing"
)
func BenchmarkTest1(b *testing.B) {for i := 0; i < b.N; i++ {_ = fmt.Sprintf("%d", i)}
}

实验结果如下图(请注意红框中的,比如文件名,函数名,测试命令):

测试结果分析:

1. BenchmarkTest1-4 表测试的函数名,-4 表示GOMAXPROCS(线程数)的值为4

2. 10000000 表一共执行了一千万次,即B.N的值

3. 107 ns/op表平均每次操作花费了107纳秒

4. 16 B/op 表每次操作申请了16Byte的内存申请

5. 2 allocs/op 表每次操作申请了2次内存

参数介绍

1.  参数-bench,它指明要测试的函数;点字符意思是测试当前所有以Benchmark为前缀函数

2.  参数-benchmem,性能测试的时候显示测试函数的内存分配大小,内存分配次数的统计信息

3. 参数-count n,运行测试和性能多少此,默认一次

PS:

有些时候在benchmark之前需要做一些准备工作,并且,我们不希望这些准备工作纳入到计时里面,我们可以使用 b.ResetTimer(),代表重置计时为0,以调用时的时刻作为重新计时的开始

go benchmark 性能测试 单元测试 基准测试 使用方法详解相关推荐

  1. mysql查询性能测试工具_MySQL性能测试工具MySQLslap使用实例详解

    原标题:MySQL性能测试工具MySQLslap使用实例详解 MySQLslap是MySQL(了解干货请戳:干货!超过500行的Mysql学习笔记)自带的基准测试工具,优点:查询数据,语法简单,灵活容 ...

  2. Java基准测试工具JMH详解

    Java基准测试工具JMH详解 1.JMH概述 1.1 JMH简介 1.2 JMH与JMeter区别 1.3 JMH注解说明 2.JMH验证 2.1 创建项目 2.2 引入依赖 2.3 启动异常解决 ...

  3. pycharm 运行celery_在 Pycharm 安装使用black的方法详解

    PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Project管理.代码跳转.智能提示.自动完 成.单元测试.版本控制 ...

  4. MP实战系列(十一)之封装方法详解(续一)

    之前写的封装方法详解,比较简要. 今天我主要讲增加和删除及其修改.查的话得单独再详讲. 增删改查,无论是Java或者C#等等,凡是对数据库操作的都离不开这四个. 一.增加方法讲解 MyBatis Pl ...

  5. python统计csv行数_对Python 多线程统计所有csv文件的行数方法详解

    如下所示: #统计某文件夹下的所有csv文件的行数(多线程) import threading import csv import os class MyThreadLine(threading.Th ...

  6. python修改文件内容_Python批量修改文本文件内容的方法详解

    这篇文章主要介绍了Python批量修改文本文件内容的方法的相关资料,需要的朋友可以参考下 Python批量替换文件内容,支持嵌套文件夹 import os path="./" fo ...

  7. python二维元组_python中读入二维csv格式的表格方法详解(以元组/列表形式表示)

    如何去读取一个没有表头的二维csv文件(如下图所示)? 并以元组的形式表现数据: ((1.0, 0.0, 3.0, 180.0), (2.0, 0.0, 2.0, 180.0), (3.0, 0.0, ...

  8. Spring JdbcTemplate方法详解

    2019独角兽企业重金招聘Python工程师标准>>> Spring JdbcTemplate方法详解 标签: springhsqldbjava存储数据库相关sql 2012-07- ...

  9. golang 解析php序列化,golang实现php里的serialize()和unserialize()序列和反序列方法详解...

    Golang 实现 PHP里的 serialize() . unserialize() 安装 go get -u github.com/techleeone/gophp/serialize 用法 pa ...

最新文章

  1. vue 获取当前时间 格式YYYY-MM-DD
  2. appium1.6在mac上环境搭建启动ios模拟器上Safari浏览器 转自:上海-悠悠
  3. 对话框中WaitForSingleObject等待线程退出导致程序阻塞的原因及解决
  4. 【机器学习】逻辑回归代码练习
  5. java替换数组中的元素_如何使用Java 8流快速替换列表中的元素
  6. const 和readonly
  7. 解决flask端口被占用的问题
  8. git github gitlib gitlab
  9. python设计贪吃蛇游戏论文_用Python写一个贪吃蛇AI,让程序自己玩游戏
  10. Winform里面的缓存,MemoryCache使用
  11. Docker系列教程06-实战:修改Nginx首页
  12. link 和 style 元素在 HTML 文档中的位置
  13. UltraISO 对光盘镜像常用操作方法图解
  14. JS的IE和Firefox兼容性汇编(原作:hotman_x)
  15. Python学习必看书籍_带你高效学习
  16. 计算机维修培训教材,计算机芯片级维修中心芯片级维修培训教材.pdf
  17. WebStorm-2021.1.1下载及安装
  18. Propensity Score Matching
  19. 程序开发中常用的第三方API接口汇总,包含各种类别的介绍
  20. 【宋红康 MySQL数据库】【基础版】【15】存储过程与存储函数

热门文章

  1. 添加three20模板的方法
  2. mysql数据库引擎调优
  3. CodeForces - 1486C2 Guessing the Greatest (hard version)(二分+交互)
  4. CodeForces - 1450E Capitalism(差分约束)
  5. 牛客 - 膜法记录(状压dp预处理)
  6. Linux进程详细信息查看
  7. 离散对数(Baby Step Giant Step)
  8. Team Work(CF 932 E)[bzoj5093][Lydsy1711月赛]图的价值
  9. cocos2d-x初探学习笔记(2)--重要概念及Test例子结构
  10. WinDbg学习笔记(一)--认识WinDbg