Go语言之测试

115 阅读1分钟

测试分类

回归测试、集成测试、单元测试,覆盖率逐层变大,成本逐层降低。

1.单元测试

规则

·所有测试文件以_test.go结尾;

·func TestXxx(*testing.T)

·初始化逻辑放到TestMain中

func TestMain(m *testing.M){

//测试前:数据装载,配置初始化等前置工作;
code := m.Run()
//测试后:释放资源等收尾工作

os.Exit(code)
}

运行

go test [flags][backpages]

修复-assert

代码覆盖率

·衡量代码是否经过了足够的测试

·评价项目的测试水准

·评估项目是否达到了高水准测试等级

·tips:

一般覆盖率 : 50%~60%,较高覆盖率80%+;

测试分支相互独立、全面覆盖;

测试单元粒度足够小,函数单一职责。

2.基准测试

·优化代码,需要对当前代码分析;

·内置的测试框架提供了基准测试的能力。

实例-随机选择执行服务器:

import (
"math/rand"var ServerIndex [10]int
func InitServerIndex() {
    for i:= 0;i<10;i++ {
        ServerIndex[i] = i+100
    }
}
func Select()int {
return ServerIndex[rand.Intn(10)]
}

运行

func BenchmarkSelect(b *testing.B) {
    InitServerIndex()
    b.ResetTimer()
    for i:= 0;i<b.N;i++ {
        Select()
    }
}
func BenchmarkSelectParallel(b *testing.B{
    InitServerIndex()
    b.ResetTimer()
    b.RunParallel(func(pb *testing.PB) {
        for pb.Next() {
            Select()
        }
    })
}

优化

github.com/bytedance/g…