Например, что именно означает «200» в столбце «Cnt»?
В столбце cnt
указано количество итераций, т. Е. Сколько раз тесты повторяются.Вы можете контролировать это значение, используя следующие аннотации:
- Для фактических измерений:
@Measurement(iterations = 10, time = 50, timeUnit = TimeUnit.MILLISECONDS)
- Для фазы прогрева:
@Warmup(iterations = 10, time = 1, timeUnit = TimeUnit.SECONDS)
Здесь iterations
равно cnt
;time
- требуемая продолжительность одной итерации, а timeUnit
- единица измерения значения time
.
Единицы пропускной способности указаны в «операциях в секунду»
Вы можете управлять выходом несколькими способами.Например, вы можете изменить единицу измерения времени, используя @OutputTimeUnit(TimeUnit.XXXX)
, чтобы вы могли получить ops / us, ops / ms
Вы также можете изменить mode
: вместо измерения ops / time youможет измерять «среднее время», «время выборки» и т. д. Вы можете контролировать это с помощью @BenchmarkMode({Mode.AverageTime})
аннотации
, так что именно то, что представляет собой «операция», состоит в том, что выполнение одного вызовак методу тестирования
Допустим, одна итерация длится 1 секунду, и вы получаете 1000 операций в секунду.Это означает, что метод benchamrk был выполнен 1000 раз.
Другими словами, одна операция - это одно выполнение метода эталонного теста, если только у вас нет аннотации @OperationsPerInvocation(XXX)
, что означает, что обучающий вызов методов будет считаться операциями XXX.
Ошибкарассчитывается для всех итераций.
Еще один совет: вместо жесткого кодирования каждого возможного размера вы можете выполнить параметризованный тест:
@Param({"3", "12", "300", "3000"})
private int length;
Затем вы можете использовать этот параметр в вашемнастройка:
@Setup(Level.Iteration)
public void setUp(){
populateList(length)
}