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

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

Из Википедии — свободной энциклопедии

Нагрузочное тестирование (англ. load testing ) — подвид тестирования производительности, сбор показателей и определение производительности и времени отклика программно-технической системы или устройства в ответ на внешний запрос с целью установления соответствия требованиям, предъявляемым к данной системе (устройству).

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

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

Основная цель нагрузочного тестирования заключается в том, чтобы, создав определённую ожидаемую в системе нагрузку (например, посредством виртуальных пользователей) и, обычно, использовав идентичное программное и аппаратное обеспечение, наблюдать за показателями производительности системы.

В идеальном случае в качестве критериев успешности нагрузочного тестирования выступают требования к производительности системы, которые формулируются и документируются на стадии разработки функциональных требований к системе до начала программирования основных архитектурных решений. Однако часто бывает так, что такие требования не были четко сформулированы или не были сформулированы вовсе. В этом случае первое нагрузочное тестирование будет являться пробным (англ. exploratory load testing ) и основываться на разумных предположениях об ожидаемой нагрузке и потреблении аппаратной части ресурсов.

Одним из оптимальных подходов в использовании нагрузочного тестирования для измерений производительности системы является тестирование на стадии ранней разработки. Нагрузочное тестирование на первых стадиях готовности архитектурного решения с целью определить его состоятельность называется ‘proof-of-concept’ тестированием.

Источник

Нагрузочное тестирование: особенности профессии

Авторизуйтесь

Нагрузочное тестирование: особенности профессии

нагрузочное тестирование относится к какому виду тестирования в программировании. Смотреть фото нагрузочное тестирование относится к какому виду тестирования в программировании. Смотреть картинку нагрузочное тестирование относится к какому виду тестирования в программировании. Картинка про нагрузочное тестирование относится к какому виду тестирования в программировании. Фото нагрузочное тестирование относится к какому виду тестирования в программировании

руководитель нагрузочного тестирования в компании Bell Integrator

В этой статье я расскажу про нагрузочное тестирование. Сейчас в России эта специальность стала уже не столь экзотической, как лет 15-20 назад. Но все равно, даже когда доводится собеседовать выпускников ведущих вузов страны (МГУ, МГТУ, МАИ, МИРЭА), редко можно услышать внятный ответ на вопрос «Что такое нагрузочное тестирование?». Студенты знают, что есть программисты, аналитики, в лучшем случае – слышали про существование тестировщиков. И к роли последних отношение весьма скептическое: дескать, низкоквалифицированная работа для неудачников. А о том, что есть вид тестирования, более требовательный к техническому кругозору специалиста, чем в разработке, почти никто не догадывается. Попробуем исправить эту несправедливость.

Что такое тестирование и его место в процессе разработки ПО

Сначала несколько слов о тестировании вообще.

Сегодня вряд ли найдется столь смелый руководитель проекта или заказчик, который не озаботится организацией тестирования разрабатываемого продукта. И чем более зрелый процесс разработки, тем больше внимания уделяется тестированию. И ведь это лишь один из инструментов обеспечения качества! А в него входят и аудиты, и выстраивание процессов разработки… Но это уже отдельная тема, на которую написана не одна книга.

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

Интуитивно понятно, что требования могут быть совершенно различными, а значит, будут отличаться важность и трудоемкость их проверки. Например, одно дело проверить требование «В правом верхнем углу экрана должна быть кнопка с крестиком, при нажатии на которую приложение закрывается» или «Фон главного экрана программы должен быть розового цвета», и совсем другое дело проверить требование «Система должна обслуживать 10 000 одновременно работающих пользователей и время реакции системы на их действия не должно превышать 3 секунды».

Отличие нагрузочного от других видов тестирования

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

Для примера рассмотрим три наиболее распространенных вида тестирования: функциональное (ФТ), автоматизированное функциональное (АФТ) и нагрузочное (НТ).

Ручное функциональное тестирование (ФТ) – бесспорно, основной вид, и без него не обходится практически ни один проект разработки программного обеспечения. С него, как правило, начинается проверка новой системы, и уже потом наступает время АФТ и НТ. Основные навыки специалистов по ФТ – умение разобраться в документации и функциональности тестируемого продукта, составление и выполнение тестовых сценариев. Порог вхождения в такую специальность достаточно низкий: не требуется навыков программирования или опыта работы в ИT, достаточно уверенного пользования компьютером, пытливого ума и аккуратности. Среди людей, пришедших в ручное тестирование, я лично встречал не только выпускников технических вузов, но и бывших операционистов банка, учителей начальных классов и даже фельдшеров. Именно поэтому появился миф, что ФТ – это низкоквалифицированная работа для неудачников. А ведь опытный тестировщик совмещает в себе навыки и аналитика, и менеджера, и разработчика. И работать ему приходится со множеством инструментов разработки, тестирования, администрирования, багтреккинга и даже писать код на SQL или Python.

Автотестирование (АФТ) – работа на стыке разработки и тестирования. Специалисты АФТ автоматизируют рутинные или объемные проверки функционального тестирования. Они не только обладают основными навыками ФТ, но и пишут много кода на различных языках (Java, C#, Python, Scala…). Этим тестировщикам не требуется настолько широко охватывать функциональность продукта, как в ФТ, но зато каждый из них достаточно глубоко погружается в логику работы и реализацию того фрагмента, тестирование которого он автоматизирует. В каком-то смысле работников АФТ можно назвать «программистами в тестировании», и порог вхождения в профессию достаточно высок. К базовым навыкам можно отнести опыт объектно-ориентированного программирования (ООП) и уверенное владение SQL. А через несколько лет работы специалист АФТ осваивает несколько языков программирования, специальные инструменты автоматизации, фреймворки и уверенно интегрирует свой код в процесс разработки, обладая навыками CI/CD и DevOps.

Нагрузочное тестирование (НТ) стоит особняком. Оно позволяет проверить такие нефункциональные требования к системе, как производительность, стабильность, масштабируемость, стрессо- и отказоустойчивость. На первый взгляд, в нем немного меньше глубина погружения в функционал и реализацию тестируемой системы, и в этом смысле НТ находится между ФТ и АФТ. Но при более детальном рассмотрении оказывается, что специалист по НТ совмещает в себе навыки нескольких профессий. Во-первых, он должен быть немного архитектором, чтобы разобраться в устройстве продукта, понять его связи с другими системами и определить источники нагрузки. Во-вторых, ему часто приходится выполнять роль аналитика, чтобы разобраться со специфическими нефункциональными требованиями к системе и составить модель тестирования. В-третьих, от него требуются навыки администрирования: серверов и баз данных до операционных систем и инструментов мониторинга. В-четвертых, специалист НТ должен уметь программировать. Причем набор языков может быть самым разным: от С и Python до Java и Scala. Это обуславливается используемыми инструментами НТ и стеком технологий тестируемой системы. Приходится писать как собственно скрипты, моделирующие нагрузку, так и эмуляторы смежных систем («заглушки»), разного рода генераторы тестовых данных и парсеры. Но, в первую очередь, специалист по НТ должен быть тестировщиком, то есть мыслить категориями проверки системы на соответствие требованиям. Явно указанным или соответствующим здравому смыслу. По объему задачи НТ условно можно поделить на три равные части:

Таким образом, от специалиста по НТ требуются довольно противоречивые навыки: он должен быть аккуратен и внимателен, чтобы разбираться с технической документацией; усидчив, чтобы разбирать по логам и графикам причины проблем производительности; уметь неплохо программировать и при этом иметь широкий кругозор по ИT-технологиям. В области НТ, в отличие от ФТ и АФТ, очень большой разброс по квалификации специалистов, а значит и много возможностей для профессионального роста. При среднем пороге вхождения (требуются опыт программирования на любом языке, знание SQL и общее понимание сетевых технологий, которые даются в технических ВУЗах) за 2-3 года работы с различными системами специалист по НТ осваивает несколько языков программирования на уровне написания скриптов и «заглушек», погружается в устройство БД и особенности различных архитектурных решений от монолитов до микросервисов, осваивает различные инструменты НТ и мониторинга, повышает уровень владение SQL. Все это дает множество направлений для развития технических навыков.

При всех перечисленных различиях между типами тестирования у этих видов деятельности есть общие особенности: все они проверяют тестируемую систему на соответствие требованиям. Отличаются только цели и процесс.

Цели и процессы нагрузочного тестирования

Как и в любом тестировании, цели и процесс НТ вытекают из требований к тестируемой системе и зависят от организации разработки.

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

Различные варианты процессов НТ можно условно свести к двум:

В зависимости от варианта процесса меняется организация работ и взаимодействие в команде, формат документации, но при этом основные этапы сохраняются:

И на каждом из перечисленных этапов требуются те или иные навыки специалиста по НТ.

Основные навыки специалистов по нагрузочному тестированию

Как уже было сказано выше, работа в НТ требует разностороннего развития. Ниже приведу «джентельменский» набор навыков для уровня «middle+», т.е. среднего самостоятельного специалиста, способного в одиночку вести не слишком сложный проект НТ:

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

Популярные инструменты нагрузочного тестирования

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

Еще лет десять назад в российском ИT господствовали enterprise-решения для НТ. Как следствие, данный вид тестирования на необходимом уровне могли себе позволить только крупные компании с большими бюджетами. Остальные довольствовались немногочисленными бесплатными opensource-решениями с «сырым» кодом, бедным функционалом и слабой поддержкой. Но время шло, дефекты этих инструментов исправлялись, а благодаря развитию сообществ, занимающихся нагрузочным тестированием, появилось настолько много расширений, библиотек и интеграций с другими инструментами, что возможности некоторых бесплатных решений сравнялись с функционалом платных. А отсутствие официальной поддержки с лихвой компенсируется форумами и чатами сообществ.

Поэтому на текущий момент список популярных инструментов для НТ по большей части состоит из бесплатных решений за исключением нескольких «динозавров»:

нагрузочное тестирование относится к какому виду тестирования в программировании. Смотреть фото нагрузочное тестирование относится к какому виду тестирования в программировании. Смотреть картинку нагрузочное тестирование относится к какому виду тестирования в программировании. Картинка про нагрузочное тестирование относится к какому виду тестирования в программировании. Фото нагрузочное тестирование относится к какому виду тестирования в программировании

Подчеркну, что это перечень инструментов, позволяющих создавать скрипты НТ и выполнять тесты.

Кроме этого приходится пользоваться различными дополнительными средствами:

нагрузочное тестирование относится к какому виду тестирования в программировании. Смотреть фото нагрузочное тестирование относится к какому виду тестирования в программировании. Смотреть картинку нагрузочное тестирование относится к какому виду тестирования в программировании. Картинка про нагрузочное тестирование относится к какому виду тестирования в программировании. Фото нагрузочное тестирование относится к какому виду тестирования в программировании

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

Путь специалиста по нагрузочному тестированию от школы обучения до тимлида

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

Конечно, при наличии хорошей образовательной базы (по специальности программирование, системы и сети, прикладная математика) можно начать изучать инструментарий и теорию. Но основная проблема, с которой придется столкнуться, это отсутствие возможности создать полноценную среду для НТ (стенд с развернутой системой для тестирования и мониторингом). Поэтому наиболее рационально будет пройти обучение на специальных курсах. Многие аутсорсинговые компании предлагают программы подготовки, позволяющие получить необходимые навыки и опыт с последующим трудоустройством. Тем самым, они пополняют свой штат, в том числе выпускниками технических вузов. Аналогичная школа обучения по специальности НТ работает с 2016 года и в нашей компании.

Обычно курсы идут 4-5 недель и включают в себя теоретическую часть, позволяющую разобраться в целях, методологии и процессе тестирования, и практическую, куда входит освоение 1-2 инструментов НТ и средств мониторинга. Ученики получают практические навыки: от разработки методики и скриптов до проведения тестов и подготовки отчета. Задачи выполняются на мощностях компании, предоставляющей обучение. Уроки ведут действующие специалисты по НТ, готовые поделиться своим опытом с реальных проектов. Выпускники школы НТ проходят стажировку уже на действующих проектах под присмотром наставников и по результатам выпускного экзамена зачисляются в штат компании на позицию младших специалистов по нагрузочному тестированию.

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

Вместо заключения

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

Источник

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

Как узнать, не превратится ли ваш интернет-магазин в тыкву во время «чёрной пятницы» — когда трафик вырастет в 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 позволяет тестировщикам ПО проводить комплексную оценку производительности своей системы. Его фишка — выявление узких мест ещё до того, как приложение будет внедрено или развёрнуто. В результате пользователи могут оценить каждый компонент по отдельности — даже прежде, чем он начнёт работать.

Выводы

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *