Golang Test 工具指令

简介

go test测试工具包含示例函数测试(ExampleXXX)、单元测试(TestXXX)、基准测试(BenchmarkXXX)。

命令格式:

1
go test [-c] [-i] [build flags] [packages] [flags for test binary]

参数解释:

-c : 编译go test成为可执行的二进制文件,但是不运行测试。
-i : 安装测试包依赖的package,但是不运行测试。

build flags是编译过程中常用参数,使用命令`go help build`查看帮助

packages是关于包管理参数,使用命令`go help packages`查看帮助

flags for test binary是test常用参数,使用命令`go help testflag`查看帮助,部分参数如下:
-test.v : 是否输出全部的单元测试用例(不管成功或者失败),默认没有加上,所以只输出失败的单元测试用例。
-test.run pattern: 指定正则来运行某个/某些测试用例
-test.bench patten: 只跑那些性能测试用例
-test.benchmem : 是否在性能测试的时候输出内存情况
-test.benchtime t : 性能测试运行的时间,默认是1s
-test.cpuprofile cpu.out : 是否输出cpu性能分析文件,为空则不做cpu分析
-test.memprofile mem.out : 是否输出内存性能分析文件
-test.blockprofile block.out : 是否输出内部goroutine阻塞的性能分析文件
-test.memprofilerate n : 内存分析参数,内存分析的抽样率, 默认512*1024,可结合GOGC=off来关闭内存回收,对每个内存块的分配进行观察。
-test.blockprofilerate n: 阻塞事件的分析参数,指定抽样频率,控制goroutine阻塞时候打点的纳秒数。默认1。
-test.parallel n : 性能测试的程序并行cpu数,默认等于GOMAXPROCS。
-test.timeout t : 如果测试用例运行时间超过t,则抛出panic
-test.cpu 1,2,4 : 程序运行在哪些CPU上面
-test.short : 将那些运行时间较长的测试用例运行时间缩短
-test.outputdir : 输出目录
-test.coverprofile : 测试覆盖率参数,指定输出文件

测试函数示例:

1
2
3
4
5
6
7
8
// test 测试函数
func TestXXX(t *testing.T) {  }
// benchmark 基准函数
func BenchmarkXXX(b *testing.B) {  }
// examples 示例函数
func ExamplePrintln() {
    Println(output)
}

执行测试函数:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
go test -v -run='TestXXX'

go test -v xxx_test.go -run='TestXXX'

go test -v xxx_test.go -test.run TestXXX

go test -v xxx_test.go -bench=.

go test -v xxx_test.go -bench=XXX

go test -v xxx_test.go -bench=BenchmarkXXX

go test -v xxx_test.go -bench=^BenchmarkXXX$ -run=^$

-v 参数表示是否通过测试都会显示结果,不加-v表示只显示未通过的测试

其他参数:-p -cpu=1,2,4 -args= -parallel -timeout -run -short

执行基准测试:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
go test -bench=.
go test -c
./xxx.test -test.bench=.
go test -bench=. -benchtime 0.1s
./xxx.test -test.bench=. -test.benchtime=1s
go test -bench=. -count=2
./xxx.test -test.bench=. -test.count=2
# -benchmem : 打印用于基准测试的内存分配统计数据
go test -bench=. -benchmem
./xxx.test -test.bench -test.benchmem

参考: