Нагрузочное тестирование или тестирование производительности относятся к группе нефункциональных методов тестирования, и их реализация может потребовать использования инструментов моделирования системы / приложения в определенных обстоятельствах. Прежде всего, когда вы сталкиваетесь с фразой «тесты производительности», у вас создается неправильное впечатление, что это относятся к скорости, например скорости загрузки страницы. Ниже я кратко представлю некоторые типы тестов производительности.
Нагрузочные тесты
Этот тип тестирования проверяет, как загрузка приложения влияет на время ответа. Для стресс-тестов используются инструменты для генерирования увеличенного пользовательского трафика, чтобы проверить, сколько запросов приложение может обработать в данный период времени.
Стресс-тесты
На первый взгляд стресс-тесты похожи на нагрузочные тесты, за исключением того, что «стресс-тесты» отвечают на вопрос о максимальном количестве пользователей, которое приложение может обработать до его сбоя. Кроме того, если произойдет сбой, будет ли система после сбоя вести себя правильно.
Пиковые тесты
Они основаны на стресс-тесте, имитирующем поведение приложения во время внезапной циклической нагрузки.
Тесты на выносливость
Они предназначены для проверки работы системы в течение длительного времени при нормальной нагрузке.
Тесты на масштабируемость
Как и все предыдущие типы тестов, тесты на масштабируемость также проверяют наличие повышенной нагрузки. Разница в этом типе тестирования заключается в постепенном увеличении нагрузки при постоянном мониторинге производительности системы.
Подготовка к тестам
Основным этапом выполнения тестов производительности является определение требований, которые должны выполняться в сценариях тестирования. Следующее требование может служить простым примером:
- Сетевой запрос должен отвечать в течение 500 миллисекунд в 95% случаев
- Запрос на вход в приложение не может превышать 2000 миллисекунд в 95% случаев.
- Сетевой сервис должен поддерживать 500 запросов в минуту
На основе имеющихся требований мы создаем тестовые сценарии, которые должны охватывать выбранные требования. Критерии успеха теста могут быть определены на основе соответствующих показателей:
- количество пользователей приложения
- время отклика системы
- количество запросов в секунду
- количество транзакций в секунду
- коэффициент ошибок по отношению к общему количеству ответов за единицу времени
- использование процессора
- потребление памяти
- использование сети
Определение объема тестов приложений является еще одним важным вводным элементом для тестов производительности. На этом этапе мы должны ответить на некоторые вопросы, такие как:
- Что мы можем проверить во время тестирования и какую область невозможно проверить?
- Мы тестируем систему от начала до конца, или мы фокусируемся на отдельных функциональных возможностях системы?
Тестовые инструменты
Выполнив требования к тестированию, спросите себя, какой инструмент будет соответствовать нашим ожиданиям для начала работы с тестами. Нам необходимо рассмотреть возможность использования инструментов с открытым исходным кодом или использовать коммерческие решения. Ниже приведены два наиболее популярных инструмента, используемых в тестах производительности.
- Jmeter - вероятно, один из самых популярных инструментов, предлагающих широкие возможности. Лицензия с открытым исходным кодом. Jmeter дает возможность, среди прочего, проводить тесты со сложной логикой и корреляцией динамических параметров, он позволяет моделировать поведение многих пользователей в параллельных потоках.
- HP LoadRunner - еще один очень популярный инструмент. Коммерческое решение. Он обязан своей популярностью, среди прочего, минимальным использованием аппаратных ресурсов. LoadRunner предлагает распределенную архитектуру, а также позволяет работать с различными протоколами.
Кроме того, вы можете выделить много других инструментов, таких как:
- Grinder
- WebLoad
- Gatling
- LoadComplete
- Tsung
Среда тестирования производительности
Прежде чем приступить к тестированию производительности, мы должны знать производственную среду . Это позволит нам правильно отобразить среду тестирования, поскольку тестирование в точной производственной среде может оказаться невозможным. Различия между средами могут существенно повлиять на результаты испытаний . Определение доступного оборудования, программного обеспечения, сетевых конфигураций и инструментов позволяет разработать тест и выявить проблемы, связанные с ранним внедрением тестов производительности.
Кроме того, важно, чтобы среда тестирования была изолированной, чтобы вы могли быть уверены, что другие пользователи системы не будут влиять на результаты во время тестирования. Тесты производительности создают значительную нагрузку на приложение / систему, что не позволяет вам выполнять задачи, запущенные другими пользователями.
Также важно обеспечить изоляцию сети, чтобы гарантировать, что на результаты теста производительности не влияет ограниченная пропускная способность сети. Поэтому рекомендуется обеспечить максимальную пропускную способность сети, используемой в тестовой среде, изолировав тестовую сеть от других пользователей.
Среда также может быть связана сетью с внешним миром, межсетевым экраном или виртуальными машинами. По этой причине тесты могут указывать на ошибку по внешним причинам, не связанным с работой системы. Чтобы тесты производительности были максимально приближены к реалистичным сценариям, мы должны иметь возможность получать реалистичные объемы данных. В противном случае мы можем пропустить некоторые проблемы.
Самые распространенные проблемы
При выполнении тестов производительности вы можете столкнуться с многими проблемами, обнаруженными при тестировании. Наиболее распространенными и, вероятно, наиболее простыми для решения являются те, которые связаны со слишком долгим откликом или слишком долгим временем зарядки .
Также могут быть проблемы с узкими местами, о которых я упоминал выше.
Плохая масштабируемость возникает, если система не может обработать количество одновременных запрошенных заданий. Это может вызвать задержку в работе системы, а также привести к другим неожиданным действиям.
Недостаточные аппаратные ресурсы - тестирование производительности может выявить ограничения памяти или низкую производительность процессоров.
Резюмируя
Как вы можете видеть при выполнении тестов производительности, вам нужно обратить внимание на несколько ключевых элементов, чтобы они имели какой-либо смысл. Я надеюсь, что эта статья поможет вам подготовиться к этому адекватно.
Если есть вопросы или дополнения прошу в комментарии.