Golang单元测试和基准测试怎么实现

发布时间:2022-08-24 14:04:42 作者:iii
来源:亿速云 阅读:154

这篇文章主要讲解了“Golang单元测试和基准测试怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang单元测试和基准测试怎么实现”吧!

Go 单元测试

Go 语言提供了单元测试的框架,只要遵循其规则即可:

测试文件命名:

测试函数命名:

# main.go
func Add(){
    // to do something
}
# main_test.go
func TestAdd(t *testing.T) {
    result := Add()
    if result == 3 {
        println("success")
    } else {
        println("error")
    }
}

根据以上规则,就可以进行对某测试文件执行命令,进行单元测试:

go test -v ./main_test.go

如果显示的测试结果有 PASS 标记,说明单元测试通过。

单元测试覆盖率

函数是否被全面测试,还需要覆盖率进行检测。单元测试命令增加 --coverprofile 标记,就可以得到一个单元测试覆盖文件,且会在控制台打印出代码覆盖率是多少。

go test -v --coverprofile=main.cover ./main_test.go

Go 框架还可以生成 html 文件的覆盖率报告,这样就可以对单元测试覆盖率的结果更清晰,更明白。

go tool cover -html=main.cover -o=main.html

打开 html 文件就可以看到红色标记是没有被覆盖到,绿色是被测试到的。

以上是简单的功能的单元测试,验证功能逻辑的正确。但有时候还有性能的要求,这时就可以使用基准测试来评估代码的性能。

基准测试

基准测试是一项用于测试和评估软件性能指标的方法,主要测试代码的性能。基准测试的规则和单元测试的规则是不一样的:

Golang单元测试和基准测试怎么实现

func BenchmarkAdd(b *testing.B) {
    for i := 0; i < b.N; i++ {
        Add()
    }
}

写完基准测试,就可以执行命令进行测试:

go test -bench=. ./

使用 go test 命令,再加上 -bench 这个 Flag,它接受一个表达式作为参数,以匹配基准测试的函数,"."表示运行所有基准测试。

Golang单元测试和基准测试怎么实现

BenchmarkAdd-10, 其中的 -10 是运行基准测试时对应的 GOMAXPROCS 的值。基准测试的时间默认是 1 秒,也就是 1 秒调用 1000000000 次、每次调用花费 311 纳秒。如果想让测试运行的时间更长,可以通过 -benchtime 指定,比如 3 秒。

go test -bench=. -benchtime=3s ./

进行基准测试之前,需要进行一些数据准备,如构建测试数据,而这部分准备工作不属于性能测试计算范围内所以需要排除在外。通过使用充值计数器 ResetTimer重新计算。也支持使用 StartTimer 和 StopTimer 方法,控制何时开始计时何时结束。

内存统计主要是统计每次操作分配内存的次数和分配的字节数。使用 ReportAllocs() 方法

func BenchmarkAdd(b *testing.B) {
    b.ResetTimer() // 重置计时时间
    b.ReportAllocs() // 内存统计
    for i := 0; i < b.N; i++ {
        Add()
    }
}

对以上命令执行后可在控制台上得到结果。多了两个指标。

Golang单元测试和基准测试怎么实现

两个指标没有统一标准区说明越小越好还是越大越好,主要还是需要根据业务场景来判断的。

在并发的情况下,Go 也支持基准测试。Go 语言通过 RunParallel 方法运行并发基准测试。创建多个 goroutine 然后将 b.N 分配给这些 goroutine 执行。

func BenchmarkAdd(b *testing.B) {
    b.RunParallel(func(pb *testing.PB) {
        for pb.Next() {
            Add()
        }
    })
}

单元测试可以保证代码质量,但其也不是万能的,还需要 code Review 和人工测试才能更好的保证代码的质量。

感谢各位的阅读,以上就是“Golang单元测试和基准测试怎么实现”的内容了,经过本文的学习后,相信大家对Golang单元测试和基准测试怎么实现这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. 关于MySQL的基准测试
  2. mysql 基准测试

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

golang

上一篇:python类参数定义及数据扩展方式是什么

下一篇:vue vux安装出现错误如何解决

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》