go golang语言编写压力测试


go/golang语言编写压力测试

近期复习了一下go,发现go的压力测试是个好东西。记录一下怎么使用。

压力测试用来检测函数(方法)的性能,和编写单元功能测试的方法类似,此处不再赘述,但需要注意以下几点:

压力测试用例必须遵循如下格式,其中XXX可以是任意字母数字的组合,但是首字母不能是小写字母

func BenchmarkXXX(b *testing.B) { ... }

go test不会默认执行压力测试的函数,如果要执行压力测试需要带上参数- test.bench,语法:-test.bench=“test_name_regex”,例如go test -test.bench=".*"表示测试全部的压力测试函数。在压力测试用例中,请记得在循环体内使用testing.B.N,以使测试可以正常的运行文件名也必须以_test.go结尾

直接上代码,项目结构很简单,如下:

代码,web.go:

package webtest

import "errors"

func Division(a, b float64) (float64, error) {

    if b == 0 {
        return 0, errors.New("除数不合法,不能为0")
    }

    return a / b, nil
}

代码,web_test.go

package webtest

import "testing"

func BenchmarkDivision(b *testing.B) {
    for i := 0; i < b.N; i++ {
        Division(7,8)
    }
}

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

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

    b.N = 1000  // 可以修改执行次数
    b.StartTimer() // 重新开始时间计时
    for i := 0; i < b.N; i ++ {
        Division(7,8)
    }
}

命令行进入到项目目录中,执行命令:

go test  -test.bench=".*"

可以得到如下执行结果(mac):

goos: darwin
goarch: amd64
pkg: github.com/mycode/web_test
BenchmarkDivision-4                     2000000000               0.34 ns/op
Benchmark_TimeConsumingFunction-4           1000                 0.98 ns/op
PASS
ok      github.com/mycode/web_test      0.730s

第一条显示了Benchmark_Division执行了2000000000次,每次的执行平均时间是0.34纳秒,第二条显示了Benchmark_TimeConsumingFunction执行了1000(修改后的次数),每次的平均执行时间是0.98纳秒。最后一条显示总共的执行时间。

go golang语言编写压力测试介绍到这里,更多Go学习请参考编程字典Go教程 和问答部分,谢谢大家对编程字典的支持。


原文链接:https://blog.csdn.net/u012852374/article/details/103198014?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163480011616780274138504%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=163480011616780274138504&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v2~rank_v29-11-103198014.pc_v2_rank_blog_default&utm_term=go&spm=1018.2226.3001.4450