go语言压力测试解析 老男孩go开发培训周末班

    /    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(45)
    }
}

func Benchmark_TimeConsumingFunction(b *testing.B) {
    b.StopTimer() //调用该函数停止压力测试的时间计数

    //做一些初始化的工作,例如读取文件数据,数据库连接之类的,
    //这样这些时间不影响我们测试函数本身的性能

    b.StartTimer() //重新开始时间
    for i := 0; i < b.N; i++ {
        Division(45)
    }
}

在 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)

分享至