Go-知识测试-性能测试分析工具-benchstat

Go-知识测试-性能测试分析工具-benchstat

  • [benchmark 结果](#benchmark 结果)
  • benchstat
    • [确认 `benchstat` 已安装](#确认 benchstat 已安装)
    • [确认 `GOPATH` 和 `GOBIN`](#确认 GOPATHGOBIN)
    • [将 `GOPATH/bin\` 添加到 \`PATH\`](#将 `GOPATH/bin` 添加到 `PATH`)
    • 验证安装
    • 检查安装路径
  • 使用

传送门:Go-知识测试-性能测试

benchmark 结果

benchmark 测试是实际项目中经常使用的测试方法,下面是一个执行的结果

输出结果的含义:

BenchmarkMakeWithout 表示1个CPU,BenchmarkMakeWithout-2 表示使用了2个CPU

552829 表示循环次数, 2129 ns/op 表示一次调用花费 2129 纳秒

480.98MB/s表示1秒可以处理的数据大小

25208B/op 表示每次调用占用的字节数

12 allocs/op 表示每次调用分配的对象数

分析测试的逻辑:

BenchmarkMakeWithout 表示创建切片的时候不指定容量,使用自动扩容。

BenchmarkMakeWith 表示创建切片的时候,指定容量,不使用自动扩容。

从 12 allocs/op 和 3 allocs/op 可以明显的看出区别,指定容量,分配了更少的对象。

benchstat

benchstat 是 Go 官方推荐的一款命令行工具,可以针对一组或多组样本进行分析,如果同时分析两组样本,还可以给出性能变化结果。

使用go get golang.org/x/perf/cmd/benchstat可以安装benchstat,将被安装到$GOPATH/bin中。

使用时需要把benchmark测试输出到文件中,benchstat会读取这些文件。

如果你使用的是mac,并且在goland中执行,那么可能会提示

确认 benchstat 已安装

首先,确保 benchstat 已经被安装。可以再次运行以下命令来安装它:

sh 复制代码
go install golang.org/x/perf/cmd/benchstat@latest

确认 GOPATHGOBIN

默认情况下,Go 会将可执行文件安装到 $GOPATH/bin 目录下。如果没有设置 GOPATH,默认路径是 $HOME/go。你可以通过以下命令来确认你的 GOPATH

sh 复制代码
echo $GOPATH

如果没有输出,说明使用的是默认路径 $HOME/go

还可以设置 GOBIN 环境变量来指定可执行文件的安装路径。如果没有设置,默认是 $GOPATH/bin

$GOPATH/bin 添加到 PATH

确保的 PATH 环境变量包含 $GOPATH/bin。可以通过以下命令来检查:

sh 复制代码
echo $PATH

如果 $GOPATH/bin 不在 PATH 中,需要将其添加到你的 shell 配置文件中(例如 .zshrc.bashrc)。

对于 zsh,可以编辑 ~/.zshrc 文件:

sh 复制代码
nano ~/.zshrc

然后添加以下行:

sh 复制代码
export PATH=$PATH:$(go env GOPATH)/bin

保存并关闭文件,然后重新加载配置:

sh 复制代码
source ~/.zshrc

验证安装

现在可以再次尝试运行 benchstat

sh 复制代码
benchstat

如果一切正常,应该能够运行 benchstat 而不会遇到 command not found 错误。

检查安装路径

还可以手动检查 benchstat 是否安装在预期的目录中:

sh 复制代码
ls $(go env GOPATH)/bin | grep benchstat

如果看到 benchstat,说明它已经正确安装。

使用

比如把 BenchmarkWithout 输出到 without 中
go test -v slice_test.go -bench MakeWithout -count 20 -benchmem > without

然后使用benchstat without执行

自动计算出了平均值,在cpu=10的时候,每次操作2.534微妙,样本离散值(2%)

在执行一次,输出到withou1,然后一次性传入两个文件分析

因为两次执行几乎没有变化,所以会提示all samples are equal。

如果将BenchmarkMakeWith 和BenchmarkMakeWithout做对比

p=0.000表示结果的可信程度,p值越大可信程度越低,统计学中通常把p=0.05作为临界值,超过此值说明结果不可信,可能是样本过少等原因。

当只有两组样本是,benchstat 还会额外计算出差值,用正负表示变化的百分比。

如果是不同的两组样本:

至此,go的测试结束,通过学习go测试,首先是会写各种测试case,其次是理解了各种测试的目的,最后则是学习了很多优秀的实现。加油~

相关推荐
我是前端小学生8 小时前
Go语言中的方法和函数
go
探索云原生13 小时前
在 K8S 中创建 Pod 是如何使用到 GPU 的: nvidia device plugin 源码分析
ai·云原生·kubernetes·go·gpu
hkNaruto16 小时前
【P2P】【Go】采用go语言实现udp hole punching 打洞 传输速度测试 ping测试
golang·udp·p2p
入 梦皆星河16 小时前
go中常用的处理json的库
golang
海绵波波10718 小时前
Gin-vue-admin(2):项目初始化
vue.js·golang·gin
每天写点bug18 小时前
【go每日一题】:并发任务调度器
开发语言·后端·golang
一个不秃头的 程序员18 小时前
代码加入SFTP Go ---(小白篇5)
开发语言·后端·golang
基哥的奋斗历程19 小时前
初识Go语言
开发语言·后端·golang
自在的LEE19 小时前
当 Go 遇上 Windows:15.625ms 的时间更新困局
后端·kubernetes·go
ZVAyIVqt0UFji1 天前
go-zero负载均衡实现原理
运维·开发语言·后端·golang·负载均衡