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

相关推荐
于顾而言13 小时前
【笔记】Go Coding In Go Way
后端·go
qq_1728055913 小时前
GIN 反向代理功能
后端·golang·go
__AtYou__14 小时前
Golang | Leetcode Golang题解之第535题TinyURL的加密与解密
leetcode·golang·题解
kevin_tech18 小时前
Go API 多种响应的规范化处理和简化策略
开发语言·后端·golang·状态模式
follycat20 小时前
2024强网杯Proxy
网络·学习·网络安全·go
幺零九零零21 小时前
【Golang】sql.Null* 类型使用(处理空值和零值)
数据库·sql·golang
cookies_s_s1 天前
Golang--DOS命令、变量、基本数据类型、标识符
golang
__AtYou__1 天前
Golang | Leetcode Golang题解之第541题反转字符串II
leetcode·golang·题解
OT.Ter1 天前
【力扣打卡系列】单调栈
算法·leetcode·职场和发展·go·单调栈
flying robot1 天前
Go的JSON转化
golang