HTML Diff
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>