内容简介:测试不仅要测试逻辑,还有一个很重要的一点是性能。我对其他语言了解不深,我不知道其他语言在测试性能时是怎么做的。但我感觉,写一个基准测试
基准测试
测试不仅要测试逻辑,还有一个很重要的一点是性能。
我对其他语言了解不深,我不知道其他语言在测试性能时是怎么做的。但我感觉, go test
在测试性能上绝对是数一数二的便利。
写一个基准测试
sort.go
package sort /** * 从小到大排序 */ //冒泡排序 func BubbleSort(a []int) []int{ lenth := len(a) for i := 0; i < lenth; i++{ for j := i+1; j < lenth; j++ { if a[j]<a[i] { a[j], a[i] = a[i], a[j] } } } return a } //选择排序 func SelectSort(a []int) []int { lenth := len(a) var minIndex int for i := 0; i < lenth; i++ { minIndex = i; for j := i+1; j < lenth; j++ { if a[j] < a[minIndex] { minIndex = j; } } a[i], a[minIndex] = a[minIndex], a[i] } return a } //插入排序 func InsertSort(a []int) []int { lenth := len(a) for i := 1; i < lenth; i++{ index := i-1 number := a[i] for index >= 0 && number<a[index] { a[index+1], a[index] = a[index], a[index+1] index-- } } return a }
sort_test.go
package sort import ( "testing" ) var a = []int{6,3,8,1,3,4,8,1,3} func BenchmarkBubbleSort(b *testing.B) { for i:=0; i<b.N; i++{ BubbleSort(a) } } func BenchmarkSelectSort(b *testing.B) { for i:=0; i<b.N; i++{ SelectSort(a) } } func BenchmarkInsertSort(b *testing.B) { for i:=0; i<b.N; i++{ InsertSort(a) } }
执行 go test -bench=.
分析上面的过程
在测试性能的时候通常使用testing.B类型。运行 go test -bench=.
, =
后是函数名称,支持正则。
基准测试需要遵循以下几点:
- 基准测试的函数必须以Benchmark开头
- for循环很重要,测试代码要放在循环里面
- b.N是基准测试框架提供的,表示循环次数。
其余与基础测试规范基本一致。
要测试一个函数的性能,少不了多次调用。 for
和 b.N
正是基准测试的核心体现。测试框架将函数循环N次后,将性能平均值反馈给我们。
解释参数:
-
函数后面
-4
,代表了GOMAXPROCS(最大同时使用的CPU核数)。我的电脑是4核,所以默认是-4
。如果想设置,在init
函数中调用runtime.GOMAXPROCS(1)
即可设置代码使用的CPU核数。 -
20000000
代表执行次数,即b.N。这是框架动态算出来的值。根据我的理解,由于框架在执行函数之前也不知道这个函数的运行时间,所以会先少量的循环几次这个方法,拿到些初步数据,计算出一个大量、结果稳定的数作为循环次数N。 -
ns/op
-nanosecond/operation 即执行一次操作消耗的时间。52.0 ns/op即平均每执行一次操作消耗0.052毫秒。 -
B/op
平均每次操作需要占用的内存空间(字节) -
allocs/op
平均每次操作需要分配内次的次数
还有一些参数我还没有见过。
通过对比明显能够看出插入排序(InsertSort)的效率远高于冒泡 排序 和选择排序。但除了时间外,很多时候我们更想看到内从的使用情况。通过 go test -bench=. -benchmem
即可看到:
这次测试结果和上次测试结果相对比有一些差异:
- B/op、allocs/op都是0,这是因为
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
高性能JavaScript
【美】Nicholas C. Zakas(尼古拉斯.泽卡斯) / 丁琛 / 电子工业出版社 / 2015-8-1 / 65
如果你使用 JavaScript 构建交互丰富的 Web 应用,那么 JavaScript 代码可能是造成你的Web应用速度变慢的主要原因。《高性能JavaScript》揭示的技术和策略能帮助你在开发过程中消除性能瓶颈。你将会了解如何提升各方面的性能,包括代码的加载、运行、DOM 交互、页面生存周期等。雅虎的前端工程师 Nicholas C. Zakas 和其他五位 JavaScript 专家介绍......一起来看看 《高性能JavaScript》 这本书的介绍吧!