Метод testing.B.ReportMetric

Метод testing.B.ReportMetric добавляет пользовательскую метрику в результаты бенчмарка. Он принимает два параметра: числовое значение метрики типа float64 и строку с единицей измерения. Метод можно вызывать внутри бенчмарк-функции для добавления дополнительной информации о производительности, которая будет отображаться в выводе команды go test -bench.

Синтаксис

gob.ReportMetric(value float64, unit string)

Пример

Добавим метрику количества аллокаций в бенчмарк:

gopackage main

import (
  "testing"
)

func BenchmarkReportMetric(b *testing.B) {
  for i := 0; i < b.N; i++ {
    _ = make([]int, 1000)
  }
  b.ReportMetric(1000, "allocs")
}

Результат выполнения команды:

goBenchmarkReportMetric-8  1000000000  0.000001 ns/op  1000 allocs

Пример

Добавим несколько пользовательских метрик в одном бенчмарке:

gopackage main

import (
  "testing"
)

func BenchmarkMultipleMetrics(b *testing.B) {
  totalItems := 0
  for i := 0; i < b.N; i++ {
    slice := make([]int, 10)
    for j := 0; j < 10; j++ {
      slice[j] = j
      totalItems++
    }
  }
  b.ReportMetric(float64(totalItems)/float64(b.N), "items/op")
  b.ReportMetric(float64(b.N)/1000, "thousands")
}

Результат выполнения команды:

goBenchmarkMultipleMetrics-8  1000000000  0.000000 ns/op  10 items/op  1000 thousands

Пример

Используем ReportMetric вместе с ReportAllocs для получения полной картины производительности:

gopackage main

import (
  "testing"
)

func BenchmarkWithAllocs(b *testing.B) {
  b.ReportAllocs()
  data := make([]int, 0, 1000)

  for i := 0; i < b.N; i++ {
    data = data[:0]
    for j := 0; j < 1000; j++ {
      data = append(data, j)
    }
  }

  b.ReportMetric(1.5, "custom_factor")
}

Результат выполнения команды:

goBenchmarkWithAllocs-8  100000000  0.0000 ns/op  0 B/op  0 allocs/op  1.5 custom_factor

Смотрите также

  • метод testing.B.ReportAllocs,
    который включает отчет о выделениях памяти
  • метод testing.B.ResetTimer,
    который сбрасывает таймер бенчмарка
  • метод testing.B.StartTimer,
    который запускает таймер бенчмарка
  • метод testing.B.StopTimer,
    который останавливает таймер бенчмарка