Go test 的测试用例形式

测试用例有四种形式:

  • TestXxxx(t *testing.T) // 基本测试用例
  • BenchmarkXxxx(b *testing.B) // 压力测试的测试用例
  • Example_Xxx() // 测试控制台输出的例子
  • TestMain(m *testing.M) // 测试Main函数

Go test 有两种运行模式:

go testgo test -vgo test
go testgo test mathgo test ./...go test .go testgo test-bench-vgo test

go test 的变量有哪些?

  • test.short : 一个快速测试的标记,在测试用例中可以使用 testing.Short() 来绕开一些测试
  • test.outputdir : 输出目录
  • test.coverprofile : 测试覆盖率参数,指定输出文件
  • test.run : 指定正则来运行某个/某些测试用例
  • test.memprofile : 内存分析参数,指定输出文件
  • test.memprofilerate : 内存分析参数,内存分析的抽样率
  • test.cpuprofile : cpu分析输出参数,为空则不做cpu分析
  • test.blockprofile : 阻塞事件的分析参数,指定输出文件
  • test.blockprofilerate : 阻塞事件的分析参数,指定抽样频率
  • test.timeout : 超时时间
  • test.cpu : 指定cpu数量
  • test.parallel : 指定运行测试用例的并行数

Go test flag

  • -args
  • -c
  • -exec xprog
  • -i
  • -o file
  • -bench regexp
  • -benchtime t
  • -count n
  • -cover
  • -covermode set,count,atomic
  • -coverpkg pkg1,pkg2,pkg3
  • -cpu 1,2,4
  • -list regexp
  • -parallel n
  • -run regexp
  • -short
  • -timeout d
  • -v
  • -benchmem
  • -blockprofile block.out
  • -blockprofilerate n
  • -coverprofile cover.out
  • -cpuprofile cpu.out
  • -memprofile mem.out
  • -memprofilerate n
  • -mutexprofile mutex.out
  • -mutexprofilefraction n
  • -outputdir directory
  • -trace trace.out

更多中文文档:

什么是单元测试?

单元测试,是一种测试我们的代码逻辑有没有问题,有没有按照我们所期望的来运行,通过它来保证我们的代码质量。

顾名思义,单元测试,大多都是对某一个函数方法进行的测试,以让我们的测试粒度最细。

如何编写单元测试?

go test
func TestXxx(*testing.T)

子测试

如何跳过一些测试

什么是基准测试?

基准测试,是一种测试代码执行性能的方式,你可以将多种代码实现进行比对。

go test -bench . -test.cpuprofilego test -bench . --benchmem

如何编写基准测试?

func BenchmarkXXX(b *testing.B) {    }

什么是 HTTP 测试?

顾名思义,就是测试 web http 协议的测试。

如何编写 HTTP 测试?

Go 标准库为我们提供了一个 httptest 的库,通过它就能够轻松的完成 HTTP 的测试。

什么是测试覆盖率?

由单元测试的代码,触发运行到的被测试代码的代码行数占所有代码行数的比例,被称为测试覆盖率,代码覆盖率不一定完全精准,但是可以作为参考,可以帮我们测量和我们预计的覆盖率之间的差距。

go test
go test -v -coverprofile=c.out
go toolc.out
go tool cover -html=c.out -o=tag.html

其他更多,可以参考:测试

# 生成指定 package 的测试覆盖率(fib.out 后面不带参数的,默认是命令所在目录)
$ go test -v -covermode=count -coverprofile fib.out
# 查看汇总的 fib 测试覆盖率
$ go tool cover -func=fib.out
# 生成 html
$ go tool cover -html=fib.out -o fib.html

VSCode Go Test Coverage 插件

测试比较工具

  • benchcmp
  • benchviz

第三方测试库

参考资料