Когда следует начинать нагрузочное тестирование?

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

Многие тестировщики стремятся к реализму, но создание реалистичной симуляции может занять много времени и усилий. Это может значительно задержать нагрузочное тестирование, что приведет к серьезным рискам. А как отмечают Кент Бек и Синтия Андрес в книге “Extreme Programming Explained”, выявление проблем на ранней стадии обходится дешевле, чем их устранение в конце жизненного цикла разработки.

Другой вариант – запускать “достаточно хорошее” тестирование как можно раньше. Я бы сказал, что во многих случаях этот подход дает лучшие результаты. Мы можем потратить 20 процентов усилий на настройку теста и при этом узнать 80 процентов того, что мы хотим знать, и выявить проблемы, когда их еще дешево и легко исправить.

Друзья, поддержите нас вступлением в наш телеграм канал QaRocks. Там много туториалов, задач по автоматизации и книг по QA.

Правило 80/20 в тестировании производительности

Правило 80/20, также известное как принцип Парето, гласит, что для многих вещей 20% усилий дают 80% результата.

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

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

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

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

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

Упрощайте нагрузочное тестирование и запускайте его пораньше

Здесь вступает в силу принцип Парето: если вы не пытаетесь идеально смоделировать реальность, ваша конфигурация будет намного проще. Вы можете обойтись лишь 20 процентами усилий по настройке нагрузочного теста.

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

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

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

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

Все это, конечно, очень хорошо, но как это сделать на практике?

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

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

Если вы тестируете приложение, управляемое API (например, мобильное приложение), вам лучше не заботиться о потоках пользователей, а попытаться задействовать конечные точки API – либо в комплексе, либо по отдельности.

Допустим, вы знаете, сколько вызовов в секунду будет иметь конечная точка API “X” при 1000 одновременных пользователей. Вы можете запустить нагрузочный тест, генерирующий такое количество запросов в секунду, и посмотреть, сможет ли ваша внутренняя система справиться с этим и где в вашей системе возникают узкие места. Затем проделайте то же самое для каждой конечной точки (конечно, при желании можно использовать несколько конечных точек в одном тесте).

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

Доведение симуляции до реалистичной

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

  • Проведение простых тестов означает, что каждый тест требует меньше времени и усилий.
  • Меньше времени и усилий на тест позволяет проводить больше тестов.
  • Большее количество тестов дает вам больше возможностей для итераций и оптимизации настройки тестов.
  • Большее количество небольших тестов также позволяет проводить тестирование на более ранних этапах процесса разработки. Это, в свою очередь, позволяет выявлять проблемы на более ранних этапах и снижать затраты на их устранение и риски срыва сроков поставки.

Проведение многочисленных и при этом более простых тестов позволит вам многое узнать о том, как проводить более сложные, масштабные тесты:

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

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

Учитывайте, что лучшее – враг хорошего

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

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

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

Перевод статьи Ragnar Lonn «When should I start load testing?».

Оставьте комментарий

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