一、命名原则

1.测试代码文件需要以_ Test .go结尾,一般和源码在同一个package中

2.以Test开头的是功能测试函数

3.以Benchmark开头的是性能测试函数

4.必须import testing这个包

5. 测试用例 会按照源代码中写的顺序依次执行

6.go test不会默认执行压力测试的函数,如果要执行压力测试需要带上参数-test.bench,语法:-test.bench=”test_name_regex”,例如go test -test.bench=”.*”表示测试全部的压力测试函数

二、测试类型

1. 功能测试

功能测试函数以*testing.T类型为单一参数t,testing.T类型用来管理测试状态和打印测试相关日志,测试日志在测试执行过程中积累,完成后输出到标准错误输出。

功能测试常用方法:

1)测试预期不符,使用t.Error()或t.Errorf()记录日志并标记测试失败

2)测试预期不符,使用t.Fatal()或t.Fatalf()跳出该测试函数

3)记录日志,使用t.Log()或t.Logf()函数

4)跳过某条测试用例,使用t.Skip()或t.Skipf()

5)并发执行测试用例,使用t.Parallel()标记

2.性能测试

性能测试函数以*testing.B类型为单一参数b,性能测试函数中需要循环b.N次调用被测函数。testing.B类型用例管理测试时间和迭代运行次数,也支持和testing.T相同的方式管理测试状态和打印测试日志。

性能测试常用方法:

1)停止/重置/启动时间计算,使用b.StopTimer(),b.ResetTimer(),b.StartTimer()方法

2)启用内存使用分析,b.ReportAlloc()

3)记录在一个操作中处理的字节数,b.SetBytes()

三、测试命令执行

1.go test常用参数

1) -cpu: 设置测试最大 cpu 逻辑数(也就是 GPM 中 P, 最大并行执行的 gorouting 数量, 默认等于 cpu 核数)

2) -count: 设置执行测试函数的次数, 默认为 1

3) -run: 执行功能测试函数, 支持正则匹配, 可以选择测试函数或者测试文件来仅测试单个函数或者单个文件

4) -bench: 执行基准测试函数, 支持正在匹配

5) -benchtime: 基准测试最大探索时间上限

6) -parallel: 设置同一个被测试代码包中的功能测试函数的最大并发执行数

7) -v: 是展示测试过程信息

2.示例

1)在某一个包下执行测试:go test

2)执行指定的包测试:go test $pkg_path

3)执行某一个目录及其子目录下的所有测试:go test $pkg_path/…

4)测试目录下所有以 XXX_test.go 结尾的文件: go test

5)测试单个文件:go test -v file_test.go

6)测试文件中单个方法:go test -v file_test.go -test.run TestFunc

6)执行包下性能测试:go test -bench=.

7)查看性能测试时的内存使用情况: go test -bench=. -benchmem

8)查看每个函数的执行结果:go test -v