Интерфейс тестирования эффективности использует скрипт, функцию и основанные на классах интерфейсы модульного тестирования. Вы можете выполнить проверки в тестах эффективности, чтобы гарантировать правильное функциональное поведение при измерении производительности кода. Кроме того, можно запустить тесты эффективности как стандартные регрессионные тесты, чтобы убедиться, что изменения кода не нарушают тесты эффективности.
Эта таблица указывает, какой код измеряется для различных типов тестов.
Тип теста | Что измеряется | Что исключено |
---|---|---|
На основе скриптов | Код в каждом разделе скрипта |
|
Функциональный | Код в каждой тестовой функции |
|
Основанные на классах | Код в каждом методе, помеченный Test признак |
|
Основанные на классах производные от matlab.perftest.TestCase и использование startMeasuring и stopMeasuring методы | Код между вызовами в startMeasuring и stopMeasuring в каждом методе с тегами Test признак |
|
Основанные на классах производные от matlab.perftest.TestCase и использование keepMeasuring метод | Код внутри каждого keepMeasuring-while цикл в каждом методе, помеченном Test признак |
|
Можно создать два типа временных экспериментов.
A frequentist time experiment собирает переменное количество измерений, чтобы достичь заданного запаса на уровне ошибки и доверия. Используйте частотный временной эксперимент, чтобы задать статистические цели для ваших выборок измерений. Сгенерируйте этот эксперимент, используя runperf
функцию или limitingSamplingError
статический метод TimeExperiment
класс.
A fixed time experiment собирает фиксированное количество измерений. Используйте эксперимент с фиксированным временем, чтобы измерить первые затраты на ваш код или взять под явный контроль размер вашей выборки. Сгенерируйте этот эксперимент с помощью withFixedSampleSize
статический метод TimeExperiment
класс.
В этой таблице обобщены различия между частотными и фиксированными временными экспериментами.
Частотный временной эксперимент | Эксперимент с фиксированным временем | |
---|---|---|
Измерения прогрева | 4 по умолчанию, но конфигурируемый через TimeExperiment.limitingSamplingError | 0 по умолчанию, но конфигурируемый через TimeExperiment.withFixedSampleSize |
Количество выборок | От 4 до 256 по умолчанию, но конфигурируемый через TimeExperiment.limitingSamplingError | Определено во время конструкции эксперимента |
Относительный запас ошибки | 5% по умолчанию, но конфигурируемый через TimeExperiment.limitingSamplingError | Не применяется |
Доверительный уровень | 95% по умолчанию, но конфигурируемый через TimeExperiment.limitingSamplingError | Не применяется |
Поведение среды для недопустимого результата тестирования | Останавливает измерение теста и переходит к следующему | Собирает указанное количество выборок |
Если ваши основанные на классах тесты получают из matlab.perftest.TestCase
вместо matlab.unittest.TestCase
, тогда вы можете использовать startMeasuring
и stopMeasuring
методы или keepMeasuring
способ несколько раз для определения контуров для тестовых измерений эффективности. Если у тестового метода несколько вызовов для startMeasuring
, stopMeasuring
и keepMeasuring
, затем среда тестирования эффективности накапливает и суммирует измерения. Среда тестирования эффективности не поддерживает вложенные контуры измерений. Если вы неправильно используете эти методы в Test
метод и запустите тест как TimeExperiment
, затем среда помечает измерение как недопустимое. Кроме того, вы по-прежнему можете запускать эти тесты эффективности как модульные тесты. Для получения дополнительной информации см. Раздел «Тестирование производительности с использованием классов».
Существует два способа запуска тестов эффективности:
Используйте runperf
функция для запуска тестов. Эта функция использует переменное количество измерений, чтобы достичь среднего значения выборки с относительным запасом 0,05 ошибок в пределах уровня 0,95 доверия. Он запускает тесты четыре раза, чтобы прогреть код и между 4 и 256 раз, чтобы собрать измерения, которые отвечают статистическим целям.
Сгенерируйте явный тестовый набор, используя testsuite
function или методы в TestSuite
класс, а затем создайте и запустите временной эксперимент.
Используйте withFixedSampleSize
метод TimeExperiment
класс, чтобы создать временной эксперимент с фиксированным количеством измерений. Можно задать фиксированное количество измерений разогрева и фиксированное количество выборок.
Используйте limitingSamplingError
метод TimeExperiment
класс, чтобы создать временной эксперимент с заданными статистическими целями, такими как запас по ошибку и уровень доверия. Также можно задать количество измерений разогрева и минимальное и максимальное количество выборок.
Можно запустить тесты эффективности как регрессионные тесты. Для получения дополнительной информации см. Раздел «Тестирование производительности с использованием классов».
В некоторых ситуациях MeasurementResult
результат теста отмечен как недопустимый. Результат тестирования помечается как недопустимый, когда среда тестирования эффективности устанавливает Valid
свойство MeasurementResult
на ложь. Это недействительное действие происходит в случае непрохождения теста или фильтрации. Кроме того, если ваш тест неправильно использует startMeasuring
и stopMeasuring
методы matlab.perftest.TestCase
, затем MeasurementResult
для этого теста отмечен недопустимым.
Когда среда тестирования эффективности сталкивается с недопустимым результатом тестирования, она ведет себя по-разному в зависимости от типа временного эксперимента:
Если вы создаете частый временной эксперимент, то среда останавливает измерение для этого теста и переходит к следующему тесту.
Если вы создали эксперимент с фиксированным временем, то среда продолжает сбор заданного количества выборок.
matlab.perftest.TimeExperiment
| matlab.unittest.measurement.MeasurementResult
| runperf
| testsuite