加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang 单元测试、性能测试、性能监控技术

发布时间:2020-12-16 18:30:31 所属栏目:大数据 来源:网络整理
导读:golang 单元测试、性能测试、性能监控技术 go语言提供了强大的测试工具,下面举例简单介绍一下 go test 单元测试 go test -bench=. 性能测试 go tool pprof 性能监控 go test 单元测试 例如对包helper下的util.go 进行单元测试,util.go 里主要包含两个功能

golang 单元测试、性能测试、性能监控技术

go语言提供了强大的测试工具,下面举例简单介绍一下

  • go test 单元测试
  • go test -bench=. 性能测试
  • go tool pprof 性能监控

go test 单元测试

例如对包helper下的util.go 进行单元测试,util.go 里主要包含两个功能,一个是对字符串进行sha1加密,一个是验证手机号码

  • 编写测试文件

如果我们要测试验证手机号码功能是否正确,我们可以在该包下新建util_test.go文件,一般命名方式为 _test.go(为测试文件主文件名),测试函数以 Test函数(t *testing.T) 形式

util_test.go

然后cmd窗口下执行(注意将目录切换到当前目录,如果是windows系统,按住shift键同时单击右键,选择在此处打开命令窗口即可)

  • 执行测试

go test

若要看到详细信息
go test -v

go test -bench=. 进行性能测试

  • 编写性能测试文件
    性能测试文件名一般同测试文件,不同的是编写性能测试函数时是以Benchmark函数(b *testing.B) 形式

  • 执行性能测试

在当前目录的命令行窗口执行
go test -bench=.

每次耗时 224599纳秒,执行10000次,总耗时2.38秒

生成CPU性能监控图

go用pprof包来做代码的性能监控包括:
net/http/pprof
runtime/pprof

  • 生成web服务器性能监控图

如果你的go程序是用http包启动的web服务器,你想查看自己的web服务器的状态。这个时候就可以选择net/http/pprof。你只需要引入包_”net/http/pprof”

go run main.go 后就可以在浏览器中使用http://localhost:8080/debug/pprof/直接看到当前web服务的状态,包括CPU占用情况和内存使用情况等,例如

如果想以图形的形式展现,那么首先要安装Graphviz(图形工具,供go调用生成时序图,官网下载地址Graphviz,国内下载地址百度-Graphviz),想要生成CPU状态分析图,再开启一个命令窗口执行
go tool pprof http://localhost:8080/debug/pprof/profile
就会进入30秒的profile收集时间,在这段事件不断刷新点击http://localhost:8080/wechat 浏览器上的页面,尽量让cpu占用性能产生数据。

然后再光标闪烁处输入web命令,如果提示”dot not found,”原因可能是你没有安装Graphviz,如果已经安装了提示次错误,那么需要将Graphviz的bin目录加入到path路径即可

然后就会生成.svg 图形,会自动启动默认浏览器打开

  • 生成一般应用程序性能监控图

如果你的go程序只是一个应用程序,比如计算阶乘,那么你就不能使用net/http/pprof包了,你就需要使用到runtime/pprof。具体做法就是用到pprof.StartCPUProfile和pprof.StopCPUProfile,具体使用请参考官方博文https://blog.golang.org/profiling-go-programs

var cpuprofile = flag.String("cpuprofile","","write cpu profile to file")

func main() {
    flag.Parse()
    if *cpuprofile != "" {
        f,err := os.Create(*cpuprofile)
        if err != nil {
            log.Fatal(err)
        }
        pprof.StartCPUProfile(f)
        defer pprof.StopCPUProfile()
    }
    ...

参考链接

  • http://www.cnblogs.com/yjf512/archive/2012/12/27/2835331.html
  • https://blog.golang.org/profiling-go-programs

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读