exponenta event banner

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

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

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

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

Тип испытанияЧто измеряетсяЧто исключается
Сценарий на основеКод в каждом разделе сценария
  • Код в разделе общих переменных

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

Функционально-зависимыйКод в каждой тестовой функции
  • Код в следующих функциях: 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 граница

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

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

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

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

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

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

 Эксперимент с частократистским временемЭксперимент с фиксированным временем
Измерения прогрева4 по умолчанию, но настраивается через TimeExperiment.limitingSamplingError0 по умолчанию, но настраивается через 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 функции или методов в TestSuite класс, а затем создайте и запустите временной эксперимент.

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

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

Можно выполнить тесты производительности как регрессионные тесты. Дополнительные сведения см. в разделе Тестирование производительности с использованием классов.

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

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

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

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

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

См. также

| | |

Связанные темы