GOエッセイ-ユニットテスト-ベンチマークテスト


データムテスト


テストはロジックだけでなく、パフォーマンスも重要です.私は他の言語についてよく知らないので、他の言語が性能をテストするときにどのようにしたのか分かりません.しかし、go testはテスト性能で絶対に1、2を数えるのに便利だと思います.
基準テスト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]= 0 && number

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

実行go test -bench=.上記のプロセスを分析するには、性能をテストする際にtestingを使用することが多い.Bタイプ.go test -bench=.=を実行すると、関数名となり、正規化がサポートされます.ベンチマークテストでは、以下の点に従う必要があります.
  • ベンチマークテストの関数は、Benchmarkで始まる
  • でなければなりません.
  • forループは重要で、テストコードはループの中に置く
  • b.Nは、サイクル数を表す基準テストフレームワークによって提供される.

  • 残りは基礎テスト仕様とほぼ一致しています.
    1つの関数のパフォーマンスをテストするには、複数回の呼び出しが必要です.forb.Nは、ベンチマークテストの核心的な体現である.テストフレームワークは、関数をN回サイクルした後、性能平均値をフィードバックします.説明パラメータ:
  • 関数の後の-4は、GOMAXPROCS(最大同時使用CPUコア数)を表します.私のパソコンは4コアなので、デフォルトは-4です.設定したい場合は、init関数でruntime.GOMAXPROCS(1)を呼び出すと、コードで使用するCPUコア数を設定できます.
  • 20000000は、実行回数、すなわちb.Nを表す.これはフレームワークが動的に計算された値です.私の理解によると、フレームワークは関数を実行する前にこの関数の実行時間も知らないので、まず少量のサイクルを何回かこの方法で、いくつかの初歩的なデータを得て、大量で、結果が安定した数をサイクル回数Nとして計算します.
  • ns/op-nanosecond/operationは、1回の操作を実行するのにかかる時間です.52.0 ns/op、すなわち、1回の操作を実行するごとに平均0.052ミリ秒消費される.
  • B/op動作ごとに消費するメモリ容量(バイト)
  • を平均する.
  • allocs/op平均操作毎に内次を割り当てる必要がある回数
  • .
    まだいくつかのパラメータを見たことがありません.比較から明らかなように,挿入ソート(InsertSort)の効率はバブルソートと選択ソートよりはるかに高いことが分かった.しかし、時間以外にも、内従の使用状況を見たい場合が多い.go test -bench=. -benchmemで表示されます.
    今回のテスト結果は前回のテスト結果と比較していくつかの違いがあります.
  • B/op、allocs/opはすべて0で、これは
  • のためです