Обзор Среды для тестирования производительности

Интерфейс теста производительности усиливает скрипт, функцию и основанные на классах интерфейсы модульного тестирования. Можно выполнить проверки в рамках тестов производительности, чтобы гарантировать правильное функциональное поведение при измерении производительности кода. Кроме того, можно запустить тесты производительности как стандартные регрессионные тесты, чтобы гарантировать, что изменения кода не повреждают тесты производительности.

Определение границ измеренного кода

Эта таблица показывает, какой код измеряется для различных типов тестов.

Тип тестаЧто измеряетсяЧто исключено
На основе скриптовКод в каждом разделе скрипта
  • Код в разделе совместно используемых переменных

  • Измеренная оценка среды наверху

ФункциональныйКод в каждой тестовой функции
  • Код в следующих функциях: setup, setupOnce, teardown и teardownOnce

  • Измеренная оценка среды наверху

Основанный на классахКод в каждом методе помечен с атрибутом Test
  • Код в методах со следующими атрибутами: TestMethodSetup, TestMethodTeardown, TestClassSetup и TestClassTeardown

  • Разделяемая настройка фиксатора и отключение

  • Измеренная оценка среды наверху

Основанное на классах получение от matlab.perftest.TestCase и использование startMeasuring и методов stopMeasuringКод между вызовами startMeasuring и stopMeasuring в каждом методе помечен с атрибутом Test
  • Код за пределами startMeasuring/stopMeasuring контур

  • Измеренная оценка среды наверху

Основанное на классах получение от matlab.perftest.TestCase и использование метода keepMeasuringКод в каждом цикле keepMeasuring-while в каждом методе помечен с атрибутом Test
  • Код за пределами контура keepMeasuring-while

  • Измеренная оценка среды наверху

Типы экспериментов времени

Можно создать два типа экспериментов времени.

  • frequentist time experiment собирает переменное количество измерений, чтобы достигнуть заданного предела погрешности и доверительного уровня. Используйте частотный эксперимент времени, чтобы задать статистические цели для ваших выборок измерения. Сгенерируйте этот эксперимент с помощью функции runperf или статического метода limitingSamplingError класса TimeExperiment.

  • fixed time experiment собирает постоянное число измерений. Используйте фиксированный эксперимент времени, чтобы измерить новые затраты на ваш код или взять на себя явное управление вашего объема выборки. Сгенерируйте этот эксперимент с помощью статического метода withFixedSampleSize класса TimeExperiment.

Эта таблица суммирует различия между частотными и фиксированными экспериментами времени.

 Частотный эксперимент времениФиксированный эксперимент времени
Измерения прогрева4 по умолчанию, но конфигурируемый через TimeExperiment.limitingSamplingError0 по умолчанию, но конфигурируемый через TimeExperiment.withFixedSampleSize
Количество выборокМежду 4 и 256 по умолчанию, но конфигурируемый через TimeExperiment.limitingSamplingErrorЗаданный во время конструкции эксперимента
RelativeMarginOfError 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 или методов в классе TestSuite, и затем создайте и запустите эксперимент времени.

    • Используйте метод withFixedSampleSize класса TimeExperiment, чтобы создать эксперимент времени с постоянным числом измерений. Можно задать постоянное число измерений прогрева и постоянное число выборок.

    • Используйте метод limitingSamplingError класса TimeExperiment, чтобы создать эксперимент времени с заданными статистическими целями, такими как предел погрешности и доверительный уровень. Кроме того, можно задать количество измерений прогрева и минимальное и максимальное количество выборок.

Можно запустить тесты производительности как регрессионные тесты. Для получения дополнительной информации смотрите Запущенные Тесты для Различных Рабочих процессов.

Понимание недопустимых результатов испытаний

В некоторых ситуациях MeasurementResult для результата испытаний отмечен недопустимый. Результат испытаний отмечен недопустимый, когда среда тестирования производительности устанавливает свойство Valid MeasurementResult ко лжи. Это аннулирование происходит, если ваш тест перестал работать или отфильтрован. Кроме того, если ваш тест неправильно использует startMeasuring и методы stopMeasuring matlab.perftest.TestCase, то MeasurementResult для того теста отмечен недопустимый.

Когда среда тестирования производительности сталкивается с недопустимым результатом испытаний, она ведет себя по-другому в зависимости от типа эксперимента времени:

  • Если вы создаете частотный эксперимент времени, то среда прекращает измеряться для того теста и перемещается в следующий тест.

  • Если вы создаете фиксированный эксперимент времени, то среда продолжает собирать конкретное количество выборок.

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

| | |

Похожие темы