Метод testing.B.ReportMetric
Метод testing.B.ReportMetric добавляет пользовательскую метрику
в результаты бенчмарка. Он принимает два параметра: числовое значение
метрики типа float64 и строку с единицей измерения.
Метод можно вызывать внутри бенчмарк-функции для добавления
дополнительной информации о производительности, которая будет
отображаться в выводе команды go test -bench.
Синтаксис
b.ReportMetric(value float64, unit string)
Пример
Добавим метрику количества аллокаций в бенчмарк:
package main
import (
"testing"
)
func BenchmarkReportMetric(b *testing.B) {
for i := 0; i < b.N; i++ {
_ = make([]int, 1000)
}
b.ReportMetric(1000, "allocs")
}
Результат выполнения команды:
BenchmarkReportMetric-8 1000000000 0.000001 ns/op 1000 allocs
Пример
Добавим несколько пользовательских метрик в одном бенчмарке:
package 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")
}
Результат выполнения команды:
BenchmarkMultipleMetrics-8 1000000000 0.000000 ns/op 10 items/op 1000 thousands
Пример
Используем ReportMetric вместе с ReportAllocs
для получения полной картины производительности:
package 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")
}
Результат выполнения команды:
BenchmarkWithAllocs-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,
который останавливает таймер бенчмарка