4 min read

功能测试(test)

基准测试(benchmark)也成性能测试

go test -bench=. -run=^$ xxx/xxx

-bench=.只有有了这个标记,命令才会进行性能测试。该标记的值.表明需要执行任意名称的性能测试函数

-run=^$这个标记用于声明需要执行哪些功能测试函数,这同样也是以函数名称为依据的。该标记的值^$意味着:只执行名称为空的功能测试函数,换句话说,不执行任何功能测试函数

实例测试(example)

Go语言对测试函数的名称和签名都有哪些规定

  • 对于功能测试函数来说,其名称必须以Test为前缀,并且参数列表中只应有一个*testing.T类型的参数声明
  • 对于性能测试函数来说,其名称必须以Benchmark为前缀,并且唯一参数的类型必须是*testing.B类型的
  • 对于实例测试函数来说,其名称必须以Example为前缀,但对函数的参数列表没有强制规定

go test命令执行的主要流程

准备工作:确定内部需要用到的命令,检查我们指定的代码包或源码文件的有效性,以及判断我们给与的标记是否合法

针对每个被测试代码包,依次的进行构建、执行包中符合要求的测试函数,清理临时文件,打印测试结果

通常会并发地对多个被测代码包进行功能测试,只不过,在最后打印测试结果的时候,它会依照我们给定的顺序逐个进行,让我们感觉它是在串行地执行测试流程

由于并发的测试会让性能测试的结果存在偏差,所以性能测试一般都是串行进行的,更具体地说,只有在所有构建步骤都做完之后,go test命令才会真正地开始进行性能测试

并且下一个代码包的性能测试,总会等到上一个代码包的性能测试的结果打印完成后才会开始,而且性能测试函数的执行也都会是串行的

go命令通常会缓存程序构建的结果,以便在将来的构建中重用。我们可以通过 go env GOCACHE命令来查看缓存目录路径。比如有一段测试代码,第一次执行go test XXX会输出测试所用时间,文件没有任何变更的情况下再次执行,得到的就是之前缓存的结果

可以运行go clean -testcache删除所有的测试结果缓存,不过这样做肯定不会删除任何构建结果缓存