压力测试

1. 压力测试json文件的读写

1-1项目目录

【GO】一文带你入门go的压力测试_用例

1-2准备素材JsonUtil.go代码

package main

import (
"encoding/json"
"os"
)

func SaveHuman(human *Human, filename string) (bool, error) {
// 打开文件
file, _ := os.OpenFile(filename, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
// 挂起文件最后执行关闭
defer file.Close()
// 创建解码器
encoder := json.NewEncoder(file)
err := encoder.Encode(human)
return err == nil, err
}

func LoadHuman(filename string, human *Human) error {
file, _ := os.OpenFile(filename, os.O_RDONLY, 0666)
defer file.Close()
decoder := json.NewDecoder(file)
err := decoder.Decode(human)
return err
}

1-3准备JsonUtil_test.go代码

package main

import "testing"

func BenchmarkSaveHuman(b *testing.B) {
b.Log("测试开始")
// 测试开销
b.ReportAllocs()
human := &Human{
Name: "咔咔",
Age: 24,
}
for i := 0; i < b.N; i++ {
SaveHuman(human, "C:/Users/Administrator/Desktop/go/11压力测试/kaka.json")
}
}

func BenchmarkLoadHuman(b *testing.B) {
b.Log("测试开始")
// 测试开销
b.ReportAllocs()
hPrt := new(Human)
for i := 0; i < b.N; i++ {
LoadHuman("C:/Users/Administrator/Desktop/go/11压力测试/kaka.json", hPrt)
}
}

1-4整包开始测试

【GO】一文带你入门go的压力测试_用例_02

1-5测试结果


  • 第一组数据未执行的次数
  • 第二组数据是每次需要的时间
  • 第三组是每次需要的内存
  • 第四组是每次需要分配的内存快
    【GO】一文带你入门go的压力测试_压力测试_03


1-6命令行测试 go test -v -bench .

【GO】一文带你入门go的压力测试_性能分析_04

2. 压力测试生成cpu画像

2-1使用终端生成性能分析文件go test -v -bench . -cpuprofile=fuck.out

【GO】一文带你入门go的压力测试_json_05

执行完成之后会在目录下生成俩个文件

【GO】一文带你入门go的压力测试_json_06

2-2在终端查看性能分析文件

go tool pprof 11压力测试.test.exe fuck.out

Duration: 3.13s, Total samples = 3.06s (97.92%)

这里就解释一下这行的意思,意思是做一轮压力测试需要3.13s。其中用例花掉3.06s

【GO】一文带你入门go的压力测试_压力测试_07

2-3 查看最耗时间的前10个用例

只需要在后边输入top 10即可

【GO】一文带你入门go的压力测试_压力测试_08


  • Showing nodes accounting for 2.83s, 92.48% of 3.06s total(显示节点占2.83s,占3.06s的92.48%)
  • Dropped 47 nodes (cum <= 0.02s)(丢弃47个节点(cum<=0.02s))
  • Showing top 10 nodes out of 76(显示76个节点中的前10个节点)


2-4安装cpu画像的图形工具

下载地址:https://graphviz.gitlab.io/_pages/Download/Download_windows.html

【GO】一文带你入门go的压力测试_性能分析_09

配置graphviz环境变量

【GO】一文带你入门go的压力测试_性能分析_10

重启goland,在执行 go tool pprof --web 11压力测试.test.exe fuck.out

【GO】一文带你入门go的压力测试_数据_11

【GO】一文带你入门go的压力测试_json_12

3 cpu画像的可视化分析

这里只截取了一部分,跟终端生成出啦的数据是一致的。

然后根据消耗时间的长短来分析自己项目的问题

【GO】一文带你入门go的压力测试_json_13