logo
Ещё

Нагрузочное тестирование

Тестирование является обязательным этапом разработки любого серьезного программного продукта. В это нет ничего удивительного, так как намного разумнее постараться ликвидировать возможные ошибки и баги до того, как с ними столкнуться реальные пользователи. Одним из самых распространенных видов тестирования заслуженно считается нагрузочное. Целью его проведения выступает проверка производительности программы на предмет способности справиться с большим количеством запросов и обращений со стороны потенциальных клиентов. Рассмотрим подробнее, что собой представляет нагрузочное тестирование (сокращенно – НТ), для чего проводится и какие методы проверки использует.


Нагрузочное тестирование – что это?

Нагрузочным называется тестирование, направленное на проверку способности программы эффективно работать при пиковых или очень высоких нагрузках, связанных с большим количеством запросов пользователей.

Учитывая сказанное, становится понятным почему НТ особенно активно используется именно для многопользовательских программ, например, интернет-магазинов или онлайн-кинотеатров.

Сравнение с автотестами и ручным тестированием

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


Но для эффективного практического использования нагрузочного тестирования необходимо понимать отличие от двух других очень распространенных методов проверки – ручного и автотестирования. Первый является самым популярным, так как именно с него начинается тестирование любого ПО. Главное задачей ручного функционального тестирования выступает выявление багов и системных сбоев. Другими словами – определение работоспособности программы.

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

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

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

Очевидно, что покупатель не станет ждать оформления заказа в течение получаса, если интернет-магазин декларирует, что это займет 3 или 5 минут.

Виды тестирования в целом

Автотесты и ручное тестирование – это поверхностное разделение, не отражающее сути тестирования. На практике видов тестирования – куда больше:


Краткое описание основных ветвей:

  • По степени автоматизации. То, о чем мы говорили выше – автоматическое, ручное, автоматизированное. Автоматизированное – это когда мы один раз написали тесты, и они запускаются сами при каких-то определенных условиях, очень полезно при регрессионном тестировании (когда мы проверяем, что ничего из уже работающего не сломалось при новом апдейте). Автоматическое – мы написали скрипты, которые проводят тесты за нас.
  • По разработке тестовых сценариев. Тестирование должно покрывать вероятные сценарии, и здесь мы определяем, откуда мы эти сценарии будем брать.
  • По уровню тестирования. Мы решаем, на каком уровне абстракции мы тестируем (приложение, система, или ее отдельные модули) или на какой стадии разработки нам нужно провести тестирование.
  • По позитивности сценария. Проверяем либо позитивные (что-то должно произойти), либо негативные (что-то не должно произойти) сценарии.
  • По исполнению кода. Тестировать можно не только приложение, но и сам его код – проверка компиляции, проверка сохранения стиля кода, проверка исполнения кода интерпретатором и так далее.
  • По знанию системы. Если мы не имеем доступа к исходникам и тыкаем приложение со стороны пользователя – черный ящик, если мы можем посмотреть весь код – белый ящик.
  • По целям. Что мы хотим протестировать? Целей может быть очень много, и веток здесь – соответственно много. Тестировать можно новый функционал, старый функционал, IU, нагрузку, защиту, умение серверов восстанавливаться, базы данных и так далее. Здесь же лежит и нагрузочное тестирование.

Что крайне важно: окончательный вид тестирования может складываться из нескольких ветвей, если они не противоречат друг другу. Например, мы проводим регрессионное белоящичное стресс-тестирование – это значит, что мы при наличии доступа к исходникам проверяем, что после введения нового функционала в проект старые показатели быстродействия при пиковых нагрузках не изменились. Или мы можем провести сероящичное системное автоматическое нагрузочное тестирование (performance testing) на основе требований – то есть мы тестируем всю систему при неполном понимании кода (возможно, используем сторонние сервисы, в которые не можем влезть) на предмет стабильной работы при нормальной нагрузке, «нормальную нагрузку» берем из ТЗ заказчика или из оценок маркетологов.

Виды нагрузочного тестирования

Нагрузочное тестирование – это одна из ветвей тестирования производительности:


У нагрузочного тестирования есть собственные подвиды:

  • Непосредственно нагрузочное. Мы проверяем, что приложение нормально работает при средней нагрузке.
  • Стабильности. То же, что и нагрузочное тестирование, но на длительном промежутке времени.
  • Отказоустойчивости. Предположим, уборщица в серверной мыла пол и выдернула штекер из розетки – у сервера пропало питание. Сможет ли система быстро развернуться заново на новом сервере или в облаке?
  • Восстановления. Подвид предыдущего – как быстро система развернется заново?
  • Стресс-тест. Выдержит ли онлайн-магазин наплыв покупателей на Черную Пятницу?
  • Объема. Что будет, если в базу данных резко записать 100 000 000 новых клиентов?
  • Масштабируемости. Как быстро развернутся новые кластеры в облаке при необходимости?
  • Потенциальных возможностей. При таком тестировании проверяются вообще все пределы приложения: максимум клиентов в минуту, максимум записей в БД, максимум суммарно открытых коннектов и так далее.

Поскольку нагрузочное тестирование не является функциональным, границы видов местами расплываются: стресс-тест может перерасти в тест объема, тот перерастает в тест масштабируемости, когда тест проваливается – он автоматические переквалифицируется в тест восстановления. Поэтому в реальной работе вам обычно дают конкретное задание: например, «Проверить, как онлайн-магазин поведет себя при оформлении 10 000 заказов в минуту», а вы сами уже решаете, как его квалифицировать (нагрузочный, стресс-тест, объема или масштабируемости) и проводите дополнительные тесты при необходимости.

Составляем методику тестирования

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

  1. Сбор максимально полной информации о проекте. Формулирование основных терминов, чтобы избежать разночтений при трактовке результатов.
  2. Определение целей нагрузочного тестирования. Необходимо для выбора подходящих текстов.
  3. Установление ограничений при проведении НТ. Обычно речь идет о том, что уже проверено другими видами тестирования, например, багах или определенных функциях программы.
  4. Правила моделирования системы. Включают отличие от реальных условий использования программы. Они обеспечиваются за счет применения заглушек, виртуализации и эмуляторов.
  5. Возможные ошибки и причины их возникновения.
  6. Характеристики тестового стенда и используемых в ходе тестирования программных продуктов или иных инструментов тестировщика.
  7. Требуемые характеристики программного продукта.
  8. Непосредственное описание этапов тестирования посредством моделирования нагрузки на систему.
  9. Определение перечня получаемых результатов проведения тестов и методов их последующего анализа.
  10. Составление требований к итоговому отчету, включая выдачу рекомендаций по устранению слабых/проблемных мест программы, а также определение максимальной производительности системы.
Приведенная схема МНТ не является догмой. Она корректируется в зависимости от специфики тестируемого программного обеспечения и задач, поставленных разработчиками ПО/заказчиком.

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

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

Порядок проведения НТ

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

  • изучение тестируемой системы;
  • определение целей тестирования;
  • разработка МНТ;
  • проведение тестов;
  • сбор результатов и их анализ;
  • оформление отчета и его передача заказчику.

ПО для тестов

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

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

Apache JMeter

Наиболее востребованный инструмент в работе тестировщика. Имеет открытый исходный код, что дополняется еще несколькими существенными преимуществами:

  • простым и доступным интерфейсом;
  • использованием популярного языка программирования Java;
  • наличием множества дополнительных плагинов и встроенных опций.

Бонусом становится разносторонний анализ полученных результатов. Единственный существенный недостаток – отсутствие поддержки JavaScript.


LoadRunner

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

Единственным серьезным недостатком выступает высокая стоимость лицензии.

LoadNinja

Удобный сервис для конструирования тестов, не требующий знания программирования. Использует в работе несколько метрик, позволяющих не только провести тестирование, но и отладку исходного кода. Основным недостатком становится возможность применения исключительно для ПО, поддерживающих или использующих JavaScript.


K6

Недавно появившийся, но стремительно набирающий популярность онлайн-сервис. Предназначен исключительно для проверки производительности интернет-ресурсов и ПО. Успешно интегрируется с различными инструментами CI.


Дополнительные средства

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


Как стать специалистом в нагрузочном тестировании?

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

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

Важно понимать, что тестирование – это такая область IT-индустрии, которая требует разносторонних знаний.

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

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

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

На какие курсы обратить внимание?

Если вы пока слабо ориентируетесь в тестировании – вам нужны курсы, которые дадут крепкую базу, и из базы вы уже сможете развиваться дальше самостоятельно. На каких курсах можно эту базу получить:

  • Нагрузочное тестирование. Курс посвящен непосредственно нагрузочному тестированию, поэтому подойдет тем, у кого уже есть знания/опыт в тестировании. Длительность – 4 месяца, по 4 академических часа в неделю. На курсе рассматриваются конкретные инструменты и подходы нагрузочного тестирования: приведенные выше приложения, метрики, планирование, отчетность и так далее. Стоимость: 91 000 рублей.
  • Тестировщик на Java. Длительный (10 месяцев) курс на получение профессии тестировщика с навыками автоматизации. На курсе рассматриваются вся основная теория по самым распространенным видам тестирования (включая нагрузочное), теория подкрепляется практикой. Язык, на котором вы будете автоматизировать тестирование – Java. Основной упор – на автоматизацию тестирования web-приложений. Стоимость: от 3 153 рубля в месяц при рассрочке на 36 месяцев.
  • Курсы тестирования ПО (QA) в Москве. Можно записаться как на дистанционные, так и на офлайн-курсы. Программа курса – очень насыщенная, вас познакомят со всеми основными видами тестирования и инструментами тестировщика, а также научат работать в команде и понимать место/роль тестировщика в бизнес-логике IT-компании. Длительность курса – 12 месяцев, стоимость – от 2 380 рублей в месяц.

Что почитать или посмотреть по теме?

  1. Канал на YouTube «Нагрузочное тестирование с нуля».
  2. Видео ролик на YouTube «Обзор JMeter. Нагрузочное тестирование в JMeter».
  3. Видео ролик на YouTube «Что такое нагрузочное тестирование?»
  4. Святослав Куликов «Тестирование программного обеспечения. Базовый курс».
  5. Гленфорд Майерс, Том Баджетт, Кори Сандлер «Искусство тестирования программ».
  6. Boris Beizer «Software Testing Techniques».

FAQ

Что такое нагрузочное тестирование?

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

С какой целью оно проводится?

Основная цель НТ – проверка способности ПО выдерживать одновременное присутствие на сайте большого числа пользователей или получение объемных запросов.

Когда НТ становится особенно актуальным?

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

Чем НТ отличается от других видов тестирования?

Обычно нагрузочное тестирование проводится в числе последних. Оно не предназначено для выявления багов или проверки полноценного функционала системы в обычных условиях. Задачей НТ выступает тестирование сайта, работающего под экстремальной нагрузкой.

В чем важность составления методики нагрузочного тестирования?

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

Как стать тестировщиком и насколько актуальной является эта профессия сегодня?

Проще всего для этого пройти специализированный онлайн-курсы, желательно – платный, продолжительностью от месяца и с присутствием практических занятий. Тестировщики очень востребованы на сегодняшнем рынке труда, что подтверждают их высокие зарплаты.

Подведем итоги

  1. Нагрузочным называется один из видов тестирования производительности, в рамках которого происходит проверка способности системы выдерживать пиковые или чрезмерные нагрузки.
  2. НТ проводится на последней стадии тестирования – после выявления и устранения багов программного кода, проверки функционала и производительности ПО в обычных условиях.
  3. Основанием для проведения НТ выступает методика нагрузочного тестирования. Она разрабатывается с учетом задач, поставленных перед тестировщиком и специфики тестируемого сайта.
  4. Профессия тестировщик находится на стыке нескольких видов IT-деятельности, а потому требует обширного набора знаний и умений.
  5. Для получения специальности требуется пройти учебный онлайн-курс, но по-настоящему квалифицированным профессионалам можно стать только после получения соответствующего опыта и практических умений.
Часто ищут