0 added
0 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#статьи</a></p>
1
<p><a>#статьи</a></p>
2
<ul><li>29 сен 2021</li>
2
<ul><li>29 сен 2021</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><h2>Мы не ищем баги: что такое нагрузочное тестирование</h2>
4
</ul><h2>Мы не ищем баги: что такое нагрузочное тестирование</h2>
5
<p>Как узнать, не превратится ли ваш интернет-магазин в тыкву во время "чёрной пятницы" - когда трафик вырастет в 10 раз.</p>
5
<p>Как узнать, не превратится ли ваш интернет-магазин в тыкву во время "чёрной пятницы" - когда трафик вырастет в 10 раз.</p>
6
<p>кадр из фильма "Зомби по имени Шон"</p>
6
<p>кадр из фильма "Зомби по имени Шон"</p>
7
<p>Онлайн-журнал для тех, кто влюблён в код и информационные технологии. Пишем для айтишников и об айтишниках.</p>
7
<p>Онлайн-журнал для тех, кто влюблён в код и информационные технологии. Пишем для айтишников и об айтишниках.</p>
8
<p><strong>об авторе</strong></p>
8
<p><strong>об авторе</strong></p>
9
<p><a>Taode01</a>в Twitter. 28 лет. Полтора года в нагрузочном тестировании, куда перекатился из системного администрирования и любительской разработки мобильных приложений. В абсолютном восторге от работы, потому что это редкая возможность спасать компанию от лишних трат, а клиентов - от расходования совсем не казённых нервов. Да ещё и практически неограниченно развиваться самому: во время работы в НТ приходится и код писать, и железо подбирать, и взаимодействовать с большим количеством клёвых специалистов из других отделов.</p>
9
<p><a>Taode01</a>в Twitter. 28 лет. Полтора года в нагрузочном тестировании, куда перекатился из системного администрирования и любительской разработки мобильных приложений. В абсолютном восторге от работы, потому что это редкая возможность спасать компанию от лишних трат, а клиентов - от расходования совсем не казённых нервов. Да ещё и практически неограниченно развиваться самому: во время работы в НТ приходится и код писать, и железо подбирать, и взаимодействовать с большим количеством клёвых специалистов из других отделов.</p>
10
<p>Нагрузочное тестирование (НТ) - один из тестов производительности. От любой системы требуется быстро и правильно отвечать на запросы пользователей: и если правильность ответов относится скорее к функциональному тестированию, скорость является как раз заботой специалистов по нагрузочному тестированию. Однако формулировка "система должна отвечать быстро" - слабое требование.</p>
10
<p>Нагрузочное тестирование (НТ) - один из тестов производительности. От любой системы требуется быстро и правильно отвечать на запросы пользователей: и если правильность ответов относится скорее к функциональному тестированию, скорость является как раз заботой специалистов по нагрузочному тестированию. Однако формулировка "система должна отвечать быстро" - слабое требование.</p>
11
<p>Мне нравится определение из <a>блога Miro на "Хабре"</a>: "Нагрузочное тестирование - это тип тестирования, в котором мы проверяем, соответствует ли наша система поставленным нефункциональным требованиям к производительности при работе под высокой нагрузкой в различных сценариях".</p>
11
<p>Мне нравится определение из <a>блога Miro на "Хабре"</a>: "Нагрузочное тестирование - это тип тестирования, в котором мы проверяем, соответствует ли наша система поставленным нефункциональным требованиям к производительности при работе под высокой нагрузкой в различных сценариях".</p>
12
<p>Начнём с того, какие бывают виды тестирования. У каждого инженера есть мнение на этот счёт, поэтому и я поделюсь своим :) Я разделяю тесты на функциональные, нефункциональные и связанные с изменениями.</p>
12
<p>Начнём с того, какие бывают виды тестирования. У каждого инженера есть мнение на этот счёт, поэтому и я поделюсь своим :) Я разделяю тесты на функциональные, нефункциональные и связанные с изменениями.</p>
13
<p><strong>Функциональное тестирование.</strong>В него входит проверка безопасности и взаимодействия - мы испытываем систему и осознанно бьём по её слабым местам, убеждаемся, что она выполняет все функции, которые были прописаны в ТЗ.</p>
13
<p><strong>Функциональное тестирование.</strong>В него входит проверка безопасности и взаимодействия - мы испытываем систему и осознанно бьём по её слабым местам, убеждаемся, что она выполняет все функции, которые были прописаны в ТЗ.</p>
14
<p><strong>Нефункциональное тестирование (НФ).</strong>Определяет характеристики ПО, которые измеряются в каких-то конкретных величинах. В первую очередь на таких тестах изучают производительность системы - проводят нагрузочное и стрессовое тестирование, исследуют стабильность и работу с большими базами данных. А после этого проверяют настройки, отказоустойчивость и восстановление системы, ищут способы увеличить её производительность. Тестирование производительности помогает узнать, как меняются стабильность и быстродействие системы под разной нагрузкой, а также проверить её масштабируемость, надёжность и уточнить, сколько ресурсов она будет использовать.</p>
14
<p><strong>Нефункциональное тестирование (НФ).</strong>Определяет характеристики ПО, которые измеряются в каких-то конкретных величинах. В первую очередь на таких тестах изучают производительность системы - проводят нагрузочное и стрессовое тестирование, исследуют стабильность и работу с большими базами данных. А после этого проверяют настройки, отказоустойчивость и восстановление системы, ищут способы увеличить её производительность. Тестирование производительности помогает узнать, как меняются стабильность и быстродействие системы под разной нагрузкой, а также проверить её масштабируемость, надёжность и уточнить, сколько ресурсов она будет использовать.</p>
15
<strong>Вид НФ-теста</strong>На какие вопросы отвечаетНагрузкаСоответствует ли нефункциональным требованиям системаСтабильностьНадёжно ли работает система в течение продолжительного времениОтказоустойчивостьСможет ли система сама переместиться на другой сервер, если откажет основнойВосстановлениеКак быстро система восстановится после сбояСтрессЧто случится при незапланированной нагрузкеОбъёмКак будет работать проект, если база данных вырастет в 100 разМасштабируемостьКак будет увеличиваться нагрузка на компоненты системы с ростом числа пользователейПотенциалСколько пользователей могут работать в системе одновременноКонфигурацияКак заставить систему работать быстрееСравнениеКакое оборудование и ПО выбрать<p><strong>Тесты, связанные с изменениями.</strong>К этой категории относятся:</p>
15
<strong>Вид НФ-теста</strong>На какие вопросы отвечаетНагрузкаСоответствует ли нефункциональным требованиям системаСтабильностьНадёжно ли работает система в течение продолжительного времениОтказоустойчивостьСможет ли система сама переместиться на другой сервер, если откажет основнойВосстановлениеКак быстро система восстановится после сбояСтрессЧто случится при незапланированной нагрузкеОбъёмКак будет работать проект, если база данных вырастет в 100 разМасштабируемостьКак будет увеличиваться нагрузка на компоненты системы с ростом числа пользователейПотенциалСколько пользователей могут работать в системе одновременноКонфигурацияКак заставить систему работать быстрееСравнениеКакое оборудование и ПО выбрать<p><strong>Тесты, связанные с изменениями.</strong>К этой категории относятся:</p>
16
<ul><li>регрессионное тестирование - когда мы ищем ошибки в старых частях программы;</li>
16
<ul><li>регрессионное тестирование - когда мы ищем ошибки в старых частях программы;</li>
17
<li>смоук-тест - когда мы определяем работоспособность новой сборки;</li>
17
<li>смоук-тест - когда мы определяем работоспособность новой сборки;</li>
18
<li>тест билда - когда ищем все баги.</li>
18
<li>тест билда - когда ищем все баги.</li>
19
</ul><p>Методика нагрузочного тестирования (МНТ) - почти как Библия для нагрузочника. Это документ, в который необходимо вписать всё, что может случиться на проекте, учесть максимальное число сценариев и результаты тестов.</p>
19
</ul><p>Методика нагрузочного тестирования (МНТ) - почти как Библия для нагрузочника. Это документ, в который необходимо вписать всё, что может случиться на проекте, учесть максимальное число сценариев и результаты тестов.</p>
20
<p>Чтобы обезопасить себя от факапов, в методике нужно сразу прописать значения всех терминов, чтобы потом не возникло недопонимания, которое обычно приводит к судам и нервотрёпке.</p>
20
<p>Чтобы обезопасить себя от факапов, в методике нужно сразу прописать значения всех терминов, чтобы потом не возникло недопонимания, которое обычно приводит к судам и нервотрёпке.</p>
21
<p>Я разрабатываю методику нагрузочного тестирования по такой структуре:</p>
21
<p>Я разрабатываю методику нагрузочного тестирования по такой структуре:</p>
22
<p>1. Информация о проекте и определения терминов.</p>
22
<p>1. Информация о проекте и определения терминов.</p>
23
<p>2. Цели тестирования. Например, "внедрить в программу новую фичу" или "подготовить интернет-магазин к распродаже, когда пользователей на сайте будет в X раз больше".</p>
23
<p>2. Цели тестирования. Например, "внедрить в программу новую фичу" или "подготовить интернет-магазин к распродаже, когда пользователей на сайте будет в X раз больше".</p>
24
<p>3. Ограничения нагрузочного тестирования. Это не функциональное тестирование, а значит, мы намеренно не ищем баги и не оцениваем внешние системы, потому что нас наняли на проверку только одной.</p>
24
<p>3. Ограничения нагрузочного тестирования. Это не функциональное тестирование, а значит, мы намеренно не ищем баги и не оцениваем внешние системы, потому что нас наняли на проверку только одной.</p>
25
<p>4. Отличия от настоящей системы. Клиент должен знать, что мы используем заглушки, эмуляторы и виртуализацию, а база данных отличается от той, которая будет на продакшене. Заглушки на результаты не влияют, виртуализация - слабо, а вот отличия в БД - сильно.</p>
25
<p>4. Отличия от настоящей системы. Клиент должен знать, что мы используем заглушки, эмуляторы и виртуализацию, а база данных отличается от той, которая будет на продакшене. Заглушки на результаты не влияют, виртуализация - слабо, а вот отличия в БД - сильно.</p>
26
<p>У меня заглушки и эмуляторы работают на Java, скрипты я пишу в HP LoadRunner, а запускаю в Performance Center.</p>
26
<p>У меня заглушки и эмуляторы работают на Java, скрипты я пишу в HP LoadRunner, а запускаю в Performance Center.</p>
27
<p>5. Причины ошибочных результатов. Пишем, что неправильный пейсинг - время задержки между сценариями - приведёт к некорректным данным тестов.</p>
27
<p>5. Причины ошибочных результатов. Пишем, что неправильный пейсинг - время задержки между сценариями - приведёт к некорректным данным тестов.</p>
28
<p>6. Раздел с описанием тестового стенда. Это схемы с серверами, заглушками и генераторами нагрузки.</p>
28
<p>6. Раздел с описанием тестового стенда. Это схемы с серверами, заглушками и генераторами нагрузки.</p>
29
<p>7. Таблица с требованиями к железу.</p>
29
<p>7. Таблица с требованиями к железу.</p>
30
<p>8. Таблица отличий стенда от системы на продакшене.</p>
30
<p>8. Таблица отличий стенда от системы на продакшене.</p>
31
<p>9. Стратегия тестирования.</p>
31
<p>9. Стратегия тестирования.</p>
32
<p>10. Описание видов тестирования.</p>
32
<p>10. Описание видов тестирования.</p>
33
<p>11. Требования к производительности от заказчика.</p>
33
<p>11. Требования к производительности от заказчика.</p>
34
<p>12. Моделирование нагрузки.</p>
34
<p>12. Моделирование нагрузки.</p>
35
<p>13. Профиль (который мы получаем от аналитиков или собираем на основе бизнес-прогнозов).</p>
35
<p>13. Профиль (который мы получаем от аналитиков или собираем на основе бизнес-прогнозов).</p>
36
<p>14. Мониторинг.</p>
36
<p>14. Мониторинг.</p>
37
<p>15. Стоимость внезапного изменения требований к проекту. Это избавит исполнителя и заказчика от лишних забот.</p>
37
<p>15. Стоимость внезапного изменения требований к проекту. Это избавит исполнителя и заказчика от лишних забот.</p>
38
<p>16. Материалы для сдачи проекта, куда входит всё, что мы подготовили для следующего специалиста.</p>
38
<p>16. Материалы для сдачи проекта, куда входит всё, что мы подготовили для следующего специалиста.</p>
39
<p>Если заказчик ничего не знает о конкретном тестировании, методика ответит на все его вопросы. В ней объясняется, за что компания платит деньги подрядчику и какие результаты получит на выходе.</p>
39
<p>Если заказчик ничего не знает о конкретном тестировании, методика ответит на все его вопросы. В ней объясняется, за что компания платит деньги подрядчику и какие результаты получит на выходе.</p>
40
<p>В МНТ можно дать определение максимальной производительности. Мы пишем, что выполним серию тестов и пошагово будем увеличивать нагрузку до предельной, а в конце сделаем контрольную проверку и выясним показатели производительности.</p>
40
<p>В МНТ можно дать определение максимальной производительности. Мы пишем, что выполним серию тестов и пошагово будем увеличивать нагрузку до предельной, а в конце сделаем контрольную проверку и выясним показатели производительности.</p>
41
<p>Стратегия заканчивается выводами и списком критериев успешного завершения НТ. В выводы включаются данные, которые мы получили в результате мониторинга, общее заключение и список успешно проведённых тестов.</p>
41
<p>Стратегия заканчивается выводами и списком критериев успешного завершения НТ. В выводы включаются данные, которые мы получили в результате мониторинга, общее заключение и список успешно проведённых тестов.</p>
42
<p>Чтобы провести нагрузочные тесты новой системы, я использую такой чек-лист:</p>
42
<p>Чтобы провести нагрузочные тесты новой системы, я использую такой чек-лист:</p>
43
<ol><li>Разбираюсь в системе.</li>
43
<ol><li>Разбираюсь в системе.</li>
44
<li>Узнаю, зачем клиенту нужно нагрузочное тестирование.</li>
44
<li>Узнаю, зачем клиенту нужно нагрузочное тестирование.</li>
45
<li>Разрабатываю методику и стратегию.</li>
45
<li>Разрабатываю методику и стратегию.</li>
46
<li>Пишу скрипты.</li>
46
<li>Пишу скрипты.</li>
47
<li>Провожу тесты.</li>
47
<li>Провожу тесты.</li>
48
<li>Собираю данные мониторинга.</li>
48
<li>Собираю данные мониторинга.</li>
49
<li>Анализирую полученные данные.</li>
49
<li>Анализирую полученные данные.</li>
50
<li>Пишу отчёт.</li>
50
<li>Пишу отчёт.</li>
51
<li>Сверяюсь с МНТ, чтобы удостовериться, что все пункты выполнены.</li>
51
<li>Сверяюсь с МНТ, чтобы удостовериться, что все пункты выполнены.</li>
52
</ol><p>Для проведения нагрузочного тестирования необходимо специфическое ПО.</p>
52
</ol><p>Для проведения нагрузочного тестирования необходимо специфическое ПО.</p>
53
<p>Я лично работаю с HP LoadRunner, ещё есть ПО Gatling, Apache JMeter, BlazeMeter, LoadNinja и даже отечественный "Яндекс.Танк". У каждого из них есть свои плюсы и минусы: одни не работают со специфическими протоколами, другие бесплатны, третьи больше дружат с тяжёлыми скриптами и так далее.</p>
53
<p>Я лично работаю с HP LoadRunner, ещё есть ПО Gatling, Apache JMeter, BlazeMeter, LoadNinja и даже отечественный "Яндекс.Танк". У каждого из них есть свои плюсы и минусы: одни не работают со специфическими протоколами, другие бесплатны, третьи больше дружат с тяжёлыми скриптами и так далее.</p>
54
<p>Почему я использую LoadRunner? С одной стороны, он ориентирован на энтерпрайз-приложения - и это влияет на ценообразование, он очень дорогой. Да, пару десятков вьюзеров вы, конечно, сможете прогнать бесплатно, но этого не хватит для полноценного НТ, в котором используются сотни и тысячи виртуальных пользователей.</p>
54
<p>Почему я использую LoadRunner? С одной стороны, он ориентирован на энтерпрайз-приложения - и это влияет на ценообразование, он очень дорогой. Да, пару десятков вьюзеров вы, конечно, сможете прогнать бесплатно, но этого не хватит для полноценного НТ, в котором используются сотни и тысячи виртуальных пользователей.</p>
55
<p>Зато LoadRunner позволяет тестировщикам ПО проводить комплексную оценку производительности своей системы. Его фишка - выявление узких мест ещё до того, как приложение будет внедрено или развёрнуто. В результате пользователи могут оценить каждый компонент по отдельности - даже прежде, чем он начнёт работать.</p>
55
<p>Зато LoadRunner позволяет тестировщикам ПО проводить комплексную оценку производительности своей системы. Его фишка - выявление узких мест ещё до того, как приложение будет внедрено или развёрнуто. В результате пользователи могут оценить каждый компонент по отдельности - даже прежде, чем он начнёт работать.</p>
56
<ol><li>Нагрузочное тестирование не выявляет баги, а помогает узнать, на что способна система. Вы будете уверены, что сайт или приложение не упадут, когда пользователей станет больше или база данных вырастет.</li>
56
<ol><li>Нагрузочное тестирование не выявляет баги, а помогает узнать, на что способна система. Вы будете уверены, что сайт или приложение не упадут, когда пользователей станет больше или база данных вырастет.</li>
57
<li>Работу нельзя начинать без методики нагрузочного тестирования. В ней необходимо указать, как пройдёт тестирование и какой результат получит клиент: это защищает от возможной нервотрёпки и судов.</li>
57
<li>Работу нельзя начинать без методики нагрузочного тестирования. В ней необходимо указать, как пройдёт тестирование и какой результат получит клиент: это защищает от возможной нервотрёпки и судов.</li>
58
</ol><a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
58
</ol><a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>