• Go语言进阶篇,单元测试、基准测试的性能测试、内存占用测试


    在go语言中的单元测试比较有意思,比如测试一个函数是很方便的,只需要将文件名修改为_test.go这样的后缀即可,我们新建一个目录xxx,然后新建xxx_test.go文件,当然这个xxx的名字你可以按照功能来命名,如下:

    单元测试

    xxx_test.go

    1. package xxx
    2. import (
    3. "fmt"
    4. "testing"
    5. )
    6. func Hello(s string) string {
    7. return "Hello " + s
    8. }
    9. func TestHello(t *testing.T) {
    10. fmt.Println(Hello("寅恪光潜"))
    11. }

    其中package在前面的文章,我一般建议大家使用的是目录名,同一目录下面的go文件的包名就统一定义。

    这个TestHello就是测试Hello函数的意思,命令行进入这个xxx目录,然后输入:

    C:\Users\Tony\xxx>go test
    Hello 寅恪光潜
    PASS
    ok      _/C_/Users/Tony/xxx     0.228s

    通过测试,用时0.228s,如果是用vscode,将自动在TestHello上面出现 run test | debug test,然后我们可以直接点击它们进行测试即可,如下图:

    基准测试

    会了前面的单元测试,对于基准测试就比较简单了,我们来测试下加法在你的电脑上的性能如何?

    1. func Benchmark_Add(b *testing.B) {
    2. var n int
    3. for i := 0; i < b.N; i++ {
    4. n++
    5. }
    6. }

    命令行使用如下命令:

    C:\Users\Tony\xxx>go test -v -bench=. -benchtime=5s xxx_test.go
    goos: windows
    goarch: amd64
    cpu: Intel(R) Core(TM) i5-7500 CPU @ 3.40GHz
    Benchmark_Add
    Benchmark_Add-4         1000000000               0.2830 ns/op
    PASS
    ok      command-line-arguments  0.556s 

    其中benchtime=5s是自定义测试时间5秒,我们可以看到在什么环境下的性能,计算了多少次,每次操作需要耗时多少。
    当然也可以在vscode里面直接点击 run benchmark | debug benchmark 如下图: 

    内存测试

    对于一些操作,我们想测试其占用内存的情况,如下:

    1. func Benchmark_Alloc(b *testing.B) {
    2. for i := 0; i < b.N; i++ {
    3. fmt.Sprintf("%d ", i)
    4. }
    5. }

    C:\Users\Tony\xxx>go test -v -bench=Alloc -benchmem xxx_test.go
    goos: windows
    goarch: amd64
    cpu: Intel(R) Core(TM) i5-7500 CPU @ 3.40GHz
    Benchmark_Alloc
    Benchmark_Alloc-4       11920632                97.68 ns/op           17 B/op          1 allocs/op
    PASS
    ok      command-line-arguments  1.510s

    计算次数:11920632,每次操作耗时97.68 ns,然后就是每次操作需要占17个字节
    同样的在vscode里面,直接点击 run benchmark | debug benchmark 即可,如下图:

    有兴趣的伙伴,也可以加入我们的社区,交流讨论:https://bbs.csdn.net/forums/gogogo

    一起学习进步,成为技术达人!

  • 相关阅读:
    C++:类的默认成员函数------构造函数&&析构函数(超详细解析,小白一看就懂!)
    Windows字符和字符串处理
    9 个 yyds 的 Java 项目,可应对各种私活
    TypeScript学习 + 贪吃蛇项目
    2023内推指南,硬件专场
    【套娃】win12r2server服务器通过ubuntu装gitlab
    Allegro差分自动添加回流地孔操作指导
    使用Kubernetes部署Kubernetes集群
    React props属性使用及子传父组件使用
    【面试:并发篇26:多线程:两阶段终止模式】volatile版本
  • 原文地址:https://blog.csdn.net/weixin_41896770/article/details/127935338