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()

                    golang 单元测试、性能测试、性能监控技术go语言提供了强大的测试工具,下面举例简单介绍一下go test 单元测试go test -bench=. 性能测试go tool pprof 性能监控go test 单元测试例如对包helper下的util.go 进行单元测试,util.go 里主要包含两个功能,一个是对字符串进行sha1加密,一个是验证手机号码 编写测试文件如果我们要测试验
C/C++和Java(以及大多数的主流编程语言)都有自己成熟的单元测试框架,前者如Check,后者如JUnit,但这些编程框架本质上仍是第三方产品,为了执行单元测试,我们不得不从头开始搭建测试工程,并且需要依赖于第三方工具才能生成单元测试的覆盖率。
相比之下,Go语言官方则提供了语言级的单元测试支持,即testing包,而且仅通过go工具本身就可以方便地生成覆盖率数据,也就是说,单元测试Go语言的自带属性,除了好好设计自己的单元测试用例外,开发者不需要操心工程搭建的任何细节。没错,Golang就是这么任性。
2 单元测试
下面我们以《The Go Programming Langu
				
PlantUML插件安装:Goland里面setting--->plugin---->搜索UML,安装PlantUML PlantUML语法地址:http://plantuml.com/zh/class-diagram 使用说明:Go语言里面的接口是方法的集合,但是PlantUML里面的接口只是个接口,不能添加方法,可以考虑使用abstract class来替代Go里面的inte...
解决方案是 利用github上的 适用于 golang 项目的 PlantUML 类图生成器:jfeliu007/goplantuml 结合Goland的PlantUML插件 1. 安装goplantuml go get github.com/jf
本文将介绍技术文档中的时序图,采用 PlantUML 编写。时序图(Sequence Diagram),又名序列图、循序图,是一种 UML 交互图。它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。 PlantUML 是一个快速创建 UML 图形的组件,官网上之所以称它是一个组件,我想主要是因为多数情况下我们都是在 Eclipse、NetBenas、Intellijidea、Emac...
根据需要实现动态创建超级表,设备表,灵活实现测量参数的名称类型和tags的适配,不用再每个测试改一个程序,实现全自动生成表,入库表 type ZngValue struct { DeviceID string `json:"deviceid"` //设备名 Metric string `json:"metric"` //物理量 表名 Endpoint string `json.
最近在查看公司的golang项目,需要进行流程的梳理,但由于项目结构较为复杂、梳理起来较为缓慢,故寻求一种自动化的uml生成工具,在uml基础上更方便梳理。采用的uml生成工具为plantuml 步骤一: 安装go-package-plantuml go-package-plantuml用于分析golang项目并生成plantuml需要的uml源文件。 go get git.oschina.net/jscode/go-package-plantuml go build git.oschina.n