/ 2019-06-26
更多内容请关注微信公众号:oldboygo
压力测试
压力测试用来检测函数(方法)的性能,和编写单元功能测试的方法类似,但需要注意以下几点:
1、压力测试用例必须遵循如下格式,其中XXX可以是任意字母数字的组合,但是首字母不能是小写字母
func BenchmarkXXX(b *testing.B) { ... }
2、go test不会默认执行压力测试的函数,如果要执行压力测试需要带上参数-test.bench,语法:-test.bench="test_name_regex",例如go test -test.bench=".*"表示测试全部的压力测试函数
3、在压力测试用例中,请记得在循环体内使用testing.B.N,以使测试可以正常的运行
4、文件名也必须以_test.go结尾
新建一个压力测试文件oldboybench_test.go
目录结构:
oldboy
|
—— oldboy.go
|
—— oldboy_test.go
|
—— oldboybench_test.go
oldboybench_test.go 代码如下:
package gotest
import (
"testing"
)
func Benchmark_Division(b *testing.B) {
for i := 0; i < b.N; i++ { //use b.N for looping
Division(4, 5)
}
}
func Benchmark_TimeConsumingFunction(b *testing.B) {
b.StopTimer() //调用该函数停止压力测试的时间计数
//做一些初始化的工作,例如读取文件数据,数据库连接之类的,
//这样这些时间不影响我们测试函数本身的性能
b.StartTimer() //重新开始时间
for i := 0; i < b.N; i++ {
Division(4, 5)
}
}
在 oldboy 目录下面执行命令 go test -test.bench=".*"
运行结果:
goos: darwin
goarch: amd64
pkg: oldboy
Benchmark_Division-4 2000000000 0.86 ns/op
Benchmark_TimeConsumingFunction-4 2000000000 0.84 ns/op
PASS
ok oldboy 3.566s
上面的结果显示我们没有执行任何TestXXX的单元测试函数,显示的结果只执行了压力测试函数。
Benchmark_Division-4 2000000000 0.86 ns/op
Benchmark_Division执行了2000000000次,每次的执行平均时间是0.86纳秒,
Benchmark_TimeConsumingFunction-4 2000000000 0.84 ns/op
Benchmark_TimeConsumingFunction执行了2000000000,每次的平均执行时间是0.84纳秒。
ok oldboy 3.566s
总共的执行时间 3.566s 。
执行命令go test -test.bench=".*" -count=5 (使用-count可以指定执行多少次)
运行结果:
goos: darwin
goarch: amd64
pkg: oldboy
Benchmark_Division-4 2000000000 0.82 ns/op
Benchmark_Division-4 2000000000 0.81 ns/op
Benchmark_Division-4 2000000000 0.81 ns/op
Benchmark_Division-4 2000000000 0.81 ns/op
Benchmark_Division-4 2000000000 0.81 ns/op
Benchmark_TimeConsumingFunction-4 2000000000 0.81 ns/op
Benchmark_TimeConsumingFunction-4 2000000000 0.81 ns/op
Benchmark_TimeConsumingFunction-4 2000000000 0.81 ns/op
Benchmark_TimeConsumingFunction-4 2000000000 0.81 ns/op
Benchmark_TimeConsumingFunction-4 2000000000 0.81 ns/op
PASS
ok oldboy 17.086s
(0)