七叶笔记 » golang编程 » Golang 单元测试和性能测试(收藏版)

Golang 单元测试和性能测试(收藏版)

Go语言通过testing包提供自动化测试功能。

Go testing 库 testing.T 和 testing.B 简介:

testing.T

判定失败接口

Fail 失败继续

FailNow 失败终止

打印信息接口

Log 数据流 (cout 类似)

Logf format (printf 类似)

SkipNow 跳过当前测试

Skiped 检测是否跳过

综合接口产生:

Error / Errorf 报告出错继续 [ Log / Logf + Fail ]

Fatel / Fatelf 报告出错终止 [ Log / Logf + FailNow ]

Skip / Skipf 报告并跳过 [ Log / Logf + SkipNow ]

testing.B

testing.B 拥有testing.T 的全部接口。

SetBytes( i uint64) 统计内存消耗。

SetParallelism(p int) 制定并行数目。

StartTimer / StopTimer / ResertTimer 操作计时器

testing.PB

Next() 接口 。 判断是否继续循环

Go语言测试约定规则

1.一般测试func TestXxx(*testing.T)

测试行必须Test开头,Xxx为字符串,第一个X必须大写的[A-Z]的字幕,一般Xxx为被测试方法的函数名。

2.性能测试func BenchmarkXxx(*testing.B)

性能测试用Benchmark标记,Xxx同上。

3.测试文件名约定

go语言测试文件名约定规则是必须以_test.go结尾,放在相同包下.

示例:a.go

package main

import “fmt”

func add(x, y int) int {

return x + y

}

func main() {

fmt.Println(add(1,2))

}

单元测试示例:a_test.go

package main

import “testing”

func TestAdd(t *testing.T) {

if add(1,2) != 3 {

t.Error(“test foo:Addr failed”)

} else {

t.Log(“test foo:Addr pass”)

}

}

包内测试只要运行命令 go test,就能自动运行符合规则的测试函数。

执行: go test

结果:

PASS

ok _/C_/Go/Workspace/linshi 0.093s

性能测试示例:a_test.go

package main

import “testing”

func BenchmarkAdd(b *testing.B) {

for i := 0; i < b.N; i++ {

add(1, 2)

}

}

执行:go test -v -test.bench=”.*” -count=5

结果:

goos: windows

goarch: amd64

//Benchmark名字-CPU 循环次数 平均每次执行时间

BenchmarkAdd-4 2000000000 0.38 ns/op

BenchmarkAdd-4 2000000000 0.36 ns/op

BenchmarkAdd-4 2000000000 0.35 ns/op

BenchmarkAdd-4 2000000000 0.35 ns/op

BenchmarkAdd-4 2000000000 0.35 ns/op

//表示全部通过

PASS

ok _/C_/Go/Workspace/linshi 3.867s

补充一下go test参数说明,列举几个常用的

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

-c : 编译go test成为可执行的二进制文件,但是不运行测试。

-i : 安装测试包依赖的package,但是不运行测试。

-test.v : 是否输出全部的单元 测试用例 (不管成功或者失败),默认没有加上,所以只输出失败的单元测试用例。

-test.run pattern: 只跑哪些单元测试用例

-test.bench patten: 只跑那些性能测试用例

-test.benchmem : 是否在性能测试的时候输出内存情况

-test.benchtime t : 性能测试运行的时间,默认是1s

-test.cpuprofile cpu.out : 是否输出cpu性能分析文件

-test.memprofile mem.out : 是否输出内存性能分析文件

小结:

对于测试http和mysql时需要的url,ip,port,username,password等在_test文件中不需要,直接测试相应的方法函数即可。

更多内容请关注每日编程,每天进步一点。

相关文章