Во время подсчёта "покрытия" часть ресурсов тратится на эту задачу и она не обязательно должна быть эффективной. По этому бенчмарк в это время ресурсов недополучает и вообще может показывать не корректные замеры так как фоновые процедуру могут выполняться и нагружать CPU не равномерно.
При бенчмарке желательно:
- что бы нигде ничего не было запущено
- что бы нигде ничего не работало в фоне
- что бы не нужные куски кода были отделены от таймера (например не нужные инициализации, подготовка данных)
Нужны ли бенчмарки? Бенчмарки нужны что бы
отбраковать совсем плохие результаты или
выбрать между двумя очень похожими. Так же они дают представление о том сколько тратится на каждую итерацию того кода что вы тестируете.
Пример простого
бенчмарка с инициализацией вынесеной за таймер:
package conf // <-- здесь название библиотеки для которой предназначены бенчмарки
import (
"testing"
)
func BenchmarkLoadGo(b *testing.B) {
conf := NewConfig()
conf.SetDefaultFile("properties")
conf.SetDefaultCatalog("./testdata") // default "./configs"
b.ResetTimer() // <-- обнуляем таймер что бы вся "сложная" и "единомоментная" работа не попала в подсчёт
for i := 0; i < b.N; i++ {
go conf.GetSection("server_1", "storage") // <-- в данном случае тестируется сценарий в конкурентном виде, но чаще всего этого не требуется и конкретно в том коде откуда взят бенчмарк есть отдельный бенч для не конкурентного доступа и сравнивая их можно иметь представление о том как оно себя поведёт в обоих сценариях.
}
}