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,其次是理解了各种测试的目的,最后则是学习了很多优秀的实现。加油~

相关推荐
~奔跑的简默~20 分钟前
GO语言性能分析
开发语言·性能优化·golang
__AtYou__26 分钟前
Golang | Leetcode Golang题解之第397题整数替换
leetcode·golang·题解
三里清风_1 小时前
Docker概述
运维·docker·容器·go
花开了¥3 小时前
go-zero的快速实战(完整)
开发语言·后端·golang
__AtYou__4 小时前
Golang | Leetcode Golang题解之第402题移掉K位数字
leetcode·golang·题解
Ai 编码助手11 小时前
什么是内存溢出,golang是如何解决内存溢出的
jvm·golang
蒙娜丽宁12 小时前
深入探讨Go语言中的切片与数组操作
开发语言·后端·golang·go
小小鱼er12 小时前
go-map系统学习
golang
qq_1728055914 小时前
GO HTTP库使用
http·golang·go
u01129006420 小时前
Go语言变量的声明
开发语言·后端·golang