700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > go benchmark 性能测试 单元测试 基准测试 使用方法详解

go benchmark 性能测试 单元测试 基准测试 使用方法详解

时间:2022-01-08 14:49:11

相关推荐

go benchmark 性能测试 单元测试 基准测试 使用方法详解

简言

基准测试是测量一个程序在固定工作负载下的性能

在Golang中,基准测试函数以Benchmark为前缀并且带有一个 *testing.B 类型的参数

规则

基准测试的代码文件必须以_test.go结尾基准测试的函数必须以Benchmark开头基准测试函数必须接受一个指向Benchmark类型的指针作为唯一参数,即比如func BenchmarkMapkeys1(b *testing.B)基准测试函数不能有返回值b.ResetTimer是重置计时器,这样可以避免for循环之前的初始化代码的干扰最后的for循环很重要,被测试的代码要放到循环里b.N是基准测试框架提供的,表示循环的次数,因为需要反复调用测试的代码,才可以评估性能不要修改b.N,因为基准测试是很智能的,它会自动根据你要测试函数的运行时间动态调整该值b.N 从 1 开始,如果基准测试函数在1秒内就完成 (默认值),则 b.N 增加,并再次运行基准测试函数。b.N 在近似这样的序列中不断增加;1, 2, 3, 5, 10, 20, 30, 50, 100,1000,20000等等。 基准框架试图变得聪明,如果它看到当b.N较小而且测试很快就完成的时候,它将让序列增加地更快

示例:(测试int转string的SprIntf()函数的效率)

package testimport ("fmt""testing")func BenchmarkTest1(b *testing.B) {for i := 0; i < b.N; i++ {_ = fmt.Sprintf("%d", i)}}

实验结果如下图(请注意红框中的,比如文件名,函数名,测试命令):

测试结果分析:

1. BenchmarkTest1-4 表测试的函数名,-4 表示GOMAXPROCS(线程数)的值为4

2. 10000000 表一共执行了一千万次,即B.N的值

3. 107 ns/op表平均每次操作花费了107纳秒

4. 16 B/op 表每次操作申请了16Byte的内存申请

5. 2 allocs/op 表每次操作申请了2次内存

参数介绍

1. 参数-bench,它指明要测试的函数;点字符意思是测试当前所有以Benchmark为前缀函数

2. 参数-benchmem,性能测试的时候显示测试函数的内存分配大小,内存分配次数的统计信息

3. 参数-count n,运行测试和性能多少此,默认一次

PS:

有些时候在benchmark之前需要做一些准备工作,并且,我们不希望这些准备工作纳入到计时里面,我们可以使用 b.ResetTimer(),代表重置计时为0,以调用时的时刻作为重新计时的开始

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。