Go语言测试与性能调优之测试

一、传统测试 vs 表格驱动测试
传统测试:
1.测试数据和测试逻辑混在一起
2.出错信息不明确
3.一旦一个数据出错测试全部结束
表格驱动测试
1.分离了测试数据和测试逻辑
2.明确了错误信息
3.可以部分失败
4.go语言的语法使得我们更易实践表格驱动测试
5.testing.T的使用

二、测试实例
1.以测试文件名必须以_test结尾,如:add_test
2.测试函数必须以Test开头,如:TestAdd
3.测试函数的参数为t *testing.T
4.进入测试文件所在目录执行命令:go test .即可执行所有的测试文件
示例:

func TestTriangle(t *testing.T)  {
   tests := []struct{ a, b, c int} {
      {3, 4, 5},
      {5, 12, 13},
      {8, 15, 17},
      {12, 35, 37},
      {30000, 40000, 50000},
   }

   for _, tt := range tests {
      if actual :=calTriangle(tt.a, tt.b); actual != tt.c {
         t.Errorf("calcTriangle(%d, %d); got %d; expected %d", tt.a, tt.b, actual, tt.c)
      }
   }
}

三、代码覆盖率
命令行操作:
1.获取代码覆盖包:go test -coverprofile=c.out
2.查看代码覆盖报告:go tool cover -html=c.out

四、性能测试
1.测试函数必须以Benchmark开头,如:BenchmarkAdd
2.测试函数的参数为b *testing.B
3.代码执行的次数由go语言来计算,b.N
4.进入测试文件所在目录执行命令:go test -bench .即可执行所有的测试文件
示例:

func BenchmarkSubstr(b *testing.B) {
   s := "黑化肥挥发发灰会花飞灰化肥挥发发黑会飞花"
   ans := 8

   for i :=0; i < b.N; i++ {
      actual := lengthOfNonRepeatingSubStr(s)
      if actual != ans {
         b.Errorf("got %d for input %s; expected %d", actual, s, ans)
      }
   }
}

五、性能调优
命令如下:
1.输入go test -bench . -cpuprofile cpu.out生成cpu.out文件
2.命令行输入go tool pprof cpu.out打开交互命令行
3.在交互命令行中输入web,查看图
4.输入quit退出

六、FAQ
Q:windows环境使用命令:go tool pprof cpu.out进行性能调优出现如下报错:
Failed to execute dot. Is Graphviz installed? Error: exec: “dot”: executable file not found in %PATH%
R:缺少Graphviz
S:到地址http://www.graphviz.org/download/下载安装包,并配置环境变量

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值