Что такое нагрузочное тестирование программного обеспечения

Мы не ищем баги: что такое нагрузочное тестирование

Как узнать, не превратится ли ваш интернет-магазин в тыкву во время «чёрной пятницы» — когда трафик вырастет в 10 раз.

Давид Нариманидзе

Taode01 в Twitter. 28 лет. Полтора года в нагрузочном тестировании, куда перекатился из системного администрирования и любительской разработки мобильных приложений. В абсолютном восторге от работы, потому что это редкая возможность спасать компанию от лишних трат, а клиентов — от расходования совсем не казённых нервов. Да ещё и практически неограниченно развиваться самому: во время работы в НТ приходится и код писать, и железо подбирать, и взаимодействовать с большим количеством клёвых специалистов из других отделов.

Нагрузочное тестирование (НТ) — один из тестов производительности. От любой системы требуется быстро и правильно отвечать на запросы пользователей: и если правильность ответов относится скорее к функциональному тестированию, скорость является как раз заботой специалистов по нагрузочному тестированию. Однако формулировка «система должна отвечать быстро» — слабое требование.

Мне нравится определение из блога Miro на «Хабре»: «Нагрузочное тестирование — это тип тестирования, в котором мы проверяем, соответствует ли наша система поставленным нефункциональным требованиям к производительности при работе под высокой нагрузкой в различных сценариях».

В основе статьи — Twitter-тред автора.

Какими бывают нагрузочные тесты

Начнём с того, какие бывают виды тестирования. У каждого инженера есть мнение на этот счёт, поэтому и я поделюсь своим :) Я разделяю тесты на функциональные, нефункциональные и связанные с изменениями.

Функциональное тестирование. В него входит проверка безопасности и взаимодействия — мы испытываем систему и осознанно бьём по её слабым местам, убеждаемся, что она выполняет все функции, которые были прописаны в ТЗ.

Нефункциональное тестирование (НФ). Определяет характеристики ПО, которые измеряются в каких-то конкретных величинах. В первую очередь на таких тестах изучают производительность системы — проводят нагрузочное и стрессовое тестирование, исследуют стабильность и работу с большими базами данных. А после этого проверяют настройки, отказоустойчивость и восстановление системы, ищут способы увеличить её производительность. Тестирование производительности помогает узнать, как меняются стабильность и быстродействие системы под разной нагрузкой, а также проверить её масштабируемость, надёжность и уточнить, сколько ресурсов она будет использовать.

Вид НФ-теста На какие вопросы отвечает
Нагрузка Соответствует ли нефункциональным требованиям система
Стабильность Надёжно ли работает система в течение продолжительного времени
Отказоустойчивость Сможет ли система сама переместиться на другой сервер, если откажет основной
Восстановление Как быстро система восстановится после сбоя
Стресс Что случится при незапланированной нагрузке
Объём Как будет работать проект, если база данных вырастет в 100 раз
Масштабируемость Как будет увеличиваться нагрузка на компоненты системы с ростом числа пользователей
Потенциал Сколько пользователей могут работать в системе одновременно
Конфигурация Как заставить систему работать быстрее
Сравнение Какое оборудование и ПО выбрать

Тесты, связанные с изменениями. К этой категории относятся:

Как составить методику нагрузочного тестирования

Методика нагрузочного тестирования (МНТ) — почти как Библия для нагрузочника. Это документ, в который необходимо вписать всё, что может случиться на проекте, учесть максимальное число сценариев и результаты тестов.

Чтобы обезопасить себя от факапов, в методике нужно сразу прописать значения всех терминов, чтобы потом не возникло недопонимания, которое обычно приводит к судам и нервотрёпке.

Я разрабатываю методику нагрузочного тестирования по такой структуре:

1. Информация о проекте и определения терминов.

2. Цели тестирования. Например, «внедрить в программу новую фичу» или «подготовить интернет-магазин к распродаже, когда пользователей на сайте будет в X раз больше».

3. Ограничения нагрузочного тестирования. Это не функциональное тестирование, а значит, мы намеренно не ищем баги и не оцениваем внешние системы, потому что нас наняли на проверку только одной.

У меня заглушки и эмуляторы работают на Java, скрипты я пишу в HP LoadRunner, а запускаю в Performance Center.

5. Причины ошибочных результатов. Пишем, что неправильный пейсинг — время задержки между сценариями — приведёт к некорректным данным тестов.

6. Раздел с описанием тестового стенда. Это схемы с серверами, заглушками и генераторами нагрузки.

7. Таблица с требованиями к железу.

8. Таблица отличий стенда от системы на продакшене.

9. Стратегия тестирования.

10. Описание видов тестирования.

11. Требования к производительности от заказчика.

12. Моделирование нагрузки.

13. Профиль (который мы получаем от аналитиков или собираем на основе бизнес-прогнозов).

15. Стоимость внезапного изменения требований к проекту. Это избавит исполнителя и заказчика от лишних забот.

16. Материалы для сдачи проекта, куда входит всё, что мы подготовили для следующего специалиста.

Зачем всё это?

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

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

Стратегия заканчивается выводами и списком критериев успешного завершения НТ. В выводы включаются данные, которые мы получили в результате мониторинга, общее заключение и список успешно проведённых тестов.

Как проводят нагрузочное тестирование

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

ПО для НТ

Для проведения нагрузочного тестирования необходимо специфическое ПО.

Я лично работаю с HP LoadRunner, ещё есть ПО Gatling, Apache JMeter, BlazeMeter, LoadNinja и даже отечественный «Яндекс.Танк». У каждого из них есть свои плюсы и минусы: одни не работают со специфическими протоколами, другие бесплатны, третьи больше дружат с тяжёлыми скриптами и так далее.

Почему я использую LoadRunner? С одной стороны, он ориентирован на энтерпрайз-приложения — и это влияет на ценообразование, он очень дорогой. Да, пару десятков вьюзеров вы, конечно, сможете прогнать бесплатно, но этого не хватит для полноценного НТ, в котором используются сотни и тысячи виртуальных пользователей.

Зато LoadRunner позволяет тестировщикам ПО проводить комплексную оценку производительности своей системы. Его фишка — выявление узких мест ещё до того, как приложение будет внедрено или развёрнуто. В результате пользователи могут оценить каждый компонент по отдельности — даже прежде, чем он начнёт работать.

Выводы

обложка: кадр из фильма «Зомби по имени Шон»

Заглушка — часть кода, которая на время теста заменяет другой компонент, например сторонний API. Она отдаёт системе черновые данные.

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

Средства виртуализации позволяют запустить на одном железе несколько независимых систем с нужными настройками. Например, это помогает тестировать Windows-приложения в среде Linux.

Источник

Понравилась статья? Поделиться с друзьями:

Не пропустите наши новые статьи:

  • что такое набросок на фрагменте экрана в windows 10 и для чего он нужен
  • что такое набор твиков реестра windows 10
  • что такое набор данных в программировании
  • Что такое муниципальные целевые программы
  • Что такое муниципальные программы сельского поселения

  • Операционные системы и программное обеспечение
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии