Golang学习笔记二十

性能测试

Posted by CDz on March 18, 2019

性能测试

这一章,我们主要讲性能测试,GO语言对于性能测试内部原生支持,所以测试起来非常的方便,同时我们可能借助性能测试图谱,发现我们程序中的性能消耗在哪里.

编写性能测试:

因为我们需要用到性能测试,所以使用比较复杂的程序,这里测试的代码块是在 golang学习笔记五中关于map的小测试.

/**
    性能测试
 */
func BenchmarkFindMaxNoRepeatString(b *testing.B) {//性能测试传入 *testing.B
    s := "黑化肥挥发发灰会花飞灰化肥挥发发黑会飞花"
    ans := 5
    for i := 0; i < b.N; i++ { //性能测试,是通过循环重复测试,这里我们不需要知道循环多少次,
                                // 直接调用 b.N就可以了,GO会自己通过算法计算出循环的次数
        actual := findMaxNoRepeatString(s)
        if actual != ans {
            b.Errorf("got %d for input %s,"+
                "expected %d", actual, s, ans)
        }
    }
}
goos: darwin
goarch: amd64
pkg: com.cdz/learngo/container/findMaxNoRepeatString
BenchmarkFindMaxNoRepeatString-12        
2000000 //循环次数          784 ns/op //每个循环所耗时间
PASS

提升性能(查看慢在那里)

使用命令行: go test -bench .得到与刚刚一样的结果

go test -bench . -cpuprofile cup.out可以得到cup.out文件,但是它是二进制文件.

go tool pprof cup.out通过这个命令可以进入pprof交互行,输入”help”可以查看很多命令, 性能测试

最简单直观的我们输入web,可以生成.svg文件使用浏览器打开,可以很直观的看到,一张很大的图. 性能测试2

值得注意的一点是,使用在pprof 中使用web命名需要安装一个插件 graphviz,网站上安装很详细也比较简单,这里就不教程了.

生成好了之后,我们可以使用输入quit命令退出交互命令行.

测试命令行小节

  • go test .测试文件夹下测试类
  • go test -bench .性能测试
  • go test -bench . -cpuprofile cup.out 性能测试且输出CUP使用率二进制文件
  • go tool pprof cup.out进入pprof交互界面,使用pprof分析生成的cup.out文件
    • help查看pprof交互所有命令
    • web生成svg文件

作者所有的学习源码在 go学习源码github地址,如果觉得有用的话帮小智贡献一个star😁