测试包
用法:
go test [build/test flags] [packages] [build/test flags & test binary flags]
‘Go test’自动测试由导入路径命名的包。它以以下格式打印测试结果的摘要:
ok archive/tar 0.011s
FAIL archive/zip 0.022s
ok compress/gzip 0.033s
...
其次是每个失败包的详细输出。
‘Go test’重新编译每个包以及名称与文件名格式“* test.go”匹配到的任何文件。名称以“_”开头的文件(包括“_test.go”)或“.”
被忽略。这些附加文件可以包含测试功能,基准测试功能和示例功能。有关更多信息,请参阅“go help testfunc”。
每个列出的包都将执行单独的测试二进制文件。
使用后缀“_test”声明包的测试文件将被编译为单独的包,然后使用主测试二进制文件(生成一个临时的main包)进行链接并运行。
go工具将忽略名为“testdata”的目录,使其可用于保存测试所需的辅助数据。
默认情况下,go测试不需要参数。它在当前目录中使用源编译和测试包,包括测试,并运行测试。
测试包内置在临时目录中,因此不会干扰非测试安装。
除了构建标志之外,由’go test’处理的标志是:
-args
传递命令行的其余部分(-args之后的所有内容)到测试二进制文件,不解释和不改变。
因为这个标志消耗命令行之后的其余部分,因此包列表(如果存在)必须出现在此标志之前。
-c
将测试二进制文件编译为pkg.test,但不要运行它(其中pkg是包导入路径的最后一个元素)。
可以使用-o标志更改文件名。
-exec xprog
使用xprog运行测试二进制文件。和'go run'行为是一样。
有关详细信息,请参阅'go help run'。
-i
安装与测试相关的软件包,不要运行测试。
-o file
将编译的测试二进制文件命名为file。测试仍然运行(除非指定了-c或-i)。
测试二进制还接受控制执行测试的标志;这些标志也可以通过’go test’访问。有关详细信息,请参阅“go help testflag”。
go help testflag
“go test”命令包含用于“go test”本身的标志以及适用于结果测试二进制文件的标志。
有几个标志控制分析并编写适合“go tool pprof”的执行配置文件;运行“go tool pprof -h”以获取更多信息。
pprof的--alloc_space
, --alloc_objects
, 和--show_bytes
选项控制信息的呈现方式。
以下标志由“go test”命令识别,控制任何测试的执行:
-bench regexp
运行正则表达式匹配到的(子)基准测试。
给定的正则表达式通过顶级“/”拆分为较小的表达式,其中每个表达式必须与基准标识符的相应部分相匹配。
默认情况下,没有基准测试运行。为了运行所有的基准测试,请使用'-bench .'或'-bench=.'。
-benchtime t
指定一个time.Duration(例如,-benchtime 1h30s),让每个基准测试t运行足够的迭代次数。
默认值为1秒(1s)。
-count n
运行每个测试和基准n次(默认为1)。如果设置了-cpu,则为每个GOMAXPROCS运行n次。
Examples总是运行一次。
-cover
启用覆盖率分析。
-covermode set,count,atomic
设置正在测试的软件包的覆盖率分析模式。默认为“set”,除非启用了-race,在这种情况下,它是“atomic”。
各模式含义:
set: bool: 每个语句是否执行?
count: int: 每个语句执行了几次?
atomic: int: 类似于 count, 但表示的是并行程序中的精确计数, 明显更昂贵。
该标志会自动设置-cover.
-coverpkg pkg1,pkg2,pkg3
将每个测试中的覆盖率分析应用于给定的软件包列表。
默认值是每个测试仅分析被测试的包。Packages被指定为导入路径。
该标志会自动设置-cover.
-cpu 1,2,4
指定应执行测试或基准测试的GOMAXPROCS值列表
(测试运行在哪些CPU上面,使用二进制的1所在位代表,和nginx的nginx_worker_cpu_affinity是一个道理)。
默认值为GOMAXPROCS的当前值。
-parallel n
允许并行执行调用t.Parallel的测试函数。该标志的值是并行运行的最大测试次数;
默认情况下,它设置为GOMAXPROCS的值。请注意,-parallel仅适用于单个测试二进制文件。
根据-p标志的设置,“go test”命令也可以并行运行不同程序包的测试(请参阅“go help build”)。
-run regexp
仅运行与正则表达式匹配的测试和示例。
对于测试,正则表达式通过顶级“/”拆分为较小的表达式,其中每个表达式必须与测试标识符的相应部分相匹配。
-short
将那些运行时间较长的测试用例运行时间缩短。
它默认关闭,但在all.bash期间设置,以便安装Go树可以运行健全检查,但不要花时间进行详尽的测试。
-timeout t
如果测试运行时间超过t,panic。
默认为10分钟(10m)。
-v
详细输出:记录运行时的所有测试。
即使测试成功,也可以打印与Log和Logf通话中的所有文本。
以下标志也被’go test’识别,可用于在执行过程中对测试进行配置:
-benchmem
打印基准的内存分配统计信息。
-blockprofile block.out
当所有测试完成时,将goroutine阻塞分析写入指定的文件。
-c自动写测试二进制文件。
-blockprofilerate n
通过使用n调用runtime.SetBlockProfileRate来控制goroutine阻塞配置文件中提供的详细信息。
请参阅“go doc runtime.SetBlockProfileRate”。
控制的是goroutine阻塞时候打点的纳秒数。
默认情况下,如果-test.blockprofile设置为没有此标志,则会每纳秒记录一次所有阻塞事件,相当于-test.blockprofilerate = 1。
-coverprofile cover.out
所有测试通过后,将覆盖率报告写入文件。
该标志会自动设置-cover.
-cpuprofile cpu.out
在退出前将CPU简况写入指定的文件。
Writes test binary as -c would.
-memprofile mem.out
所有测试通过后,将内存简况写入指定的文件。
Writes test binary as -c would.
-memprofilerate n
通过设置runtime.MemProfileRate启用更精确(和昂贵的)内存简况。
请参阅“go doc runtime.MemProfileRate”。
要观察所有内存分配详情,请使用-test.memprofilerate = 1和pass -alloc_space标记到pprof工具。
-mutexprofile mutex.out
当所有测试完成时,将互斥锁竞争简况写入指定的文件。
Writes test binary as -c would.
-mutexprofilefraction n
Sample 1 in n stack traces of goroutines holding a
contended mutex.
-outputdir directory
放置简况输出文件到指定目录,,默认情况下是运行“go test”的运行目录。
-trace trace.out
在退出前将执行跟踪写入指定的文件。
生成覆盖率报告
go tool cover -html=coverprofile.out -o coverage.html
详情参考go tool cover
命令帮助。
参考链接: Test packages & Go的测试覆盖率