Сегодня практически каждая компания имеет собственное мобильное приложение, которое обеспечивает миллионы клиентов продуктами и услугами по самым разным запросам. Только подумайте: каждый день разработчики загружают в Google Play и App Store тысячи новых приложений. Чтобы привлечь и удержать пользователей, необходимо не только иметь принципиально новые идеи, отличный код и дизайн, но и быть уверенным в высокой производительности системы.
Качество, надежность и скорость работы вашего приложения должны быть лучшими на этом высококонкурентном рынке. Наиболее надежным способом выявления возможностей и потенциала вашего продукта является тестирование производительности. В этой статье мы пошагово рассмотрим, как провести нагрузочное тестирование для мобильного приложения, генерируя HTTP/HTTPS-трафик на сервере приложения с помощью JMeter.
Выбор операций и создание профиля нагрузки
Первый шаг к тестированию производительности мобильного приложения – это понимание того, какие операции и с какой периодичностью необходимо выполнять, то есть создание профиля нагрузки. Выбор процедур и их интенсивности осуществляется путем анализа статистики за наиболее загруженный месяц, выбора пикового дня этого месяца по количеству взаимодействий и выбора пикового часа этого дня. Выбираем из списка наиболее интенсивные операции для этого часа. Они должны составлять более 80% от общей нагрузки.
В профиль следует включить и наиболее ресурсоемкие операции, и те, которые важны для вашего бизнеса. Стоит рассмотреть возможные временные ограничения и для этих взаимодействий. В случае если у вас нет подходящей статистики, например, из-за новизны приложения, профиль создается на основе анализа и прогнозов рынка.
Подготовка реального устройства или установка эмулятора
Теперь пришло время решить, что использовать для написания скрипта – реальный смартфон или эмулятор мобильной операционной системы. Последний вариант гораздо дешевле, поскольку не нужно покупать коллекцию различных устройств у нескольких поставщиков. С другой стороны, если ваше приложение должно взаимодействовать с микрофоном или GPS-модулем, то, скорее всего, вы не сможете протестировать его без соответствующего оборудования.
Для примера мы используем эмулятор MEmu Android. Ранее мы протестировали это на реальном мобильном устройстве на базе Android 10, и никакой разницы, кроме некоторых визуальных эффектов, нет.
Настройка подключения к сети
Для дальнейшей работы необходимо подключить рабочий стол и реальное или виртуальное устройство к одной локальной сети. В случае с эмулятором ОС Android все просто, поскольку он установлен на ПК и, следовательно, подключен к той же сети. В этом случае можно смело считать данный шаг выполненным.
Для реального мобильного устройства необходимо вручную настроить соединение с компьютером по локальной сети, что сделать очень просто. Достаточно подключить мобильное устройство и ПК к одному маршрутизатору через Wi-Fi или, в случае компьютера, LAN.
Создание скрипта в JMeter и настройка HTTP-прокси-сервер на локальном компьютере
Что касается скрипта, то вам потребуется установить Apache JMeter. Это популярный инструмент для нагрузочного тестирования, но если вы еще не работали с этой программой, то это не проблема. Прежде всего, необходимо убедиться, что на ПК установлен Java Development Kit (JDK), иначе программа не запустится.
Когда JDK установлен, самое время загрузить архив с программой с одного из зеркал, указанных на официальном сайте Apache, а затем распаковать его на рабочем столе. Затем следует запустить файл с названием jmeter.bat в папке bin. После запуска на экране появится графический интерфейс пользователя. С его помощью вы будете работать над планом тестирования.
Теперь можно приступить к созданию сценария с использованием JMeter:
- Добавление основного элемента в план тестирования. Щелкните правой кнопкой мыши Test Plan -> Add -> Threads (Users) -> Thread Group. Эта группа потоков может состоять из одного или нескольких скриптов, каждый из которых выполняет определенную задачу для ваших виртуальных пользователей. Все элементы из Threads (Users) необходимы для настройки доставки нагрузки перед началом тестирования. Помните, что для каждого скрипта необходим отдельный буфер потоков, так как интенсивность работы этих скриптов может быть различной.
- Добавление слушателя. Щелкните правой кнопкой мыши Test Plan -> Add -> Listener -> View Results Tree. Это добавляет элемент для просмотра будущих запросов и ответов, что очень удобно при отладке сценария.
- Добавление контроллера записи. Щелкните правой кнопкой мыши на Thread Group -> Add -> Logic Controller -> Recording Controller, чтобы добавить внутри буфера элемент, позволяющий автоматически группировать скрипт на запись транзакций. Это очень удобно для многих действий.
- Добавление регистратора тестовых сценариев. Щелкните правой кнопкой мыши на Test Plan -> Add -> Non-Test Elements -> HTTP(S) Test Script Recorder, чтобы добавить элемент для записи скрипта. Обратите внимание на порт подключения: убедитесь, что он совпадает с портом, указанным в настройках мобильного устройства или эмулятора.
Не забудьте выбрать Test Plan > Thread Group > Recording Controller в поле Target Controller. Этот параметр указывает, куда будет записываться сценарий.
Затем следует нажать кнопку Start, и JMeter создаст сертификат, который понадобится на следующем шаге. Подтвердите создание Root-сертификата во всплывающем окне или дождитесь его исчезновения и остановите запись.
Созданный сертификат будет действителен в течение 7 дней. Если в дальнейшем потребуется его продлить, можно снова нажать кнопку Start.
Копирование и установка сертификата на мобильное устройство
Следующая задача – копирование и установка сертификата Apache JMeter на смартфон или эмулятор. Сертификат можно найти в папке bin каталога установки JMeter. Искомый файл называется ApacheJMeterTemporaryRootCA.crt.
Перенести его с рабочего стола на реальное устройство не составит большого труда, а вот копирование файла на эмулятор может показаться сложным. В качестве примера можно взять MEmu. Щелкните на значке папки справа на панели инструментов и откройте экран общих папок. Каждая папка имеет значок Windows, который открывает папку на компьютере, и значок Android, который открывает соответствующую директорию на эмуляторе. Вы можете скопировать сертификат в любую из этих четырех папок на ПК, а затем найти его на эмуляторе, нажав на соответствующий значок Android.
Для установки скопированного сертификата на мобильное устройство иногда недостаточно просто запустить его через программу установки сертификатов. Даже если система сообщает, что сертификат успешно установлен, на самом деле это не так. Поэтому необходимо зайти в настройки и выполнить следующие действия:
- Перейдите в раздел Настройки -> Безопасность -> Установить с SD-карты. Точный путь может отличаться в зависимости от устройства и версии ОС Android.
- Найдите свой сертификат в хранилище.
- Укажите имя сертификата.
- Нажмите кнопку OK для подтверждения установки.
- Система предложит ввести пароль блокировки экрана или создать его, если у вас его нет. Согласитесь и введите пароль или задайте новый.
Загрузка и установка приложения на мобильное устройство
Пришло время загрузить и установить мобильное приложение, которое вы хотите протестировать с помощью JMeter. Поскольку все знают, как это сделать на реальном устройстве, давайте рассмотрим эмулятор.
Для MEmu существует два способа установки приложения. Во-первых, можно щелкнуть на значке APK в правой части панели инструментов. Откроется проводник файлов Windows, в котором можно найти и запустить пакет приложения. Другой вариант – загрузить его непосредственно из Google Play, что также работает в эмуляторе.
Стоит отметить, что если вы хотите загрузить какое-либо клиент-серверное приложение и попытаться написать скрипт, то сделать это без проблем не удастся. Причина в том, что в настоящее время для защиты приложения от некорректных данных, взлома, кражи данных и т.п. разработчики добавляют в код множество проверок и внедряют SSL-сертификаты. Поэтому получить ответ от сервера через прокси-сервер не удастся. Конечно, это можно обойти с помощью специальных утилит, но если вы являетесь частью команды, работающей над проектом, то лучше попросить разработчиков решить эту проблему.
Настройка прокси на мобильном устройстве
Следующий шаг – настройка прокси. Для анализа скриптов необходимо перехватывать мобильный трафик и передавать его через определенный порт локальной сети в Apache JMeter. Вы уже настроили прокси-сервер на локальном компьютере, теперь необходимо сделать то же самое на эмуляторе.
- Откройте список беспроводных сетей в настройках и выберите ту, к которой вы подключены. Щелкните левой кнопкой мыши и удерживайте ее, пока не откроется новое меню, затем выберите пункт Modify Network. Щелкните по выпадающему пункту расширенных настроек и переключите прокси на ручной.
- Введите IPv4 вашего ПК в качестве имени хоста прокси и введите номер порта, который должен совпадать с тем, что вы указали в настройке HTTP(S) Test Script Recorder в настройках Apache JMeter.
- В поле IP Settings оставьте значение DHCP. Не забудьте сохранить изменения.
Запись сценария тестирования с помощью JMeter
Теперь можно приступить к записи сценария. Нажмите кнопку Start в JMeter и запустите приложение в эмуляторе или на смартфоне. Если все настроено правильно, то контроллер записи добавит транзакцию, в которой будут сгруппированы несколько запросов. Каждое следующее действие в приложении будет добавлять транзакцию со своими запросами, пока вы не завершите запись, нажав кнопку Stop.
Все элементы тест-плана можно перемещать или комментировать, а также скрывать или показывать содержимое каждого элемента, копировать и вставлять, удалять их. Также можно скопировать сценарий в другой сценарий, открыв два окна инструмента, что удобно при разработке большого проекта. Если вы хотите сохранить записанный сценарий и продолжить работу позже, нажмите File -> Save Test Plan as.
Отключение прокси-сервера на мобильном устройстве
Когда запись включена, трафик отправляется в Apache JMeter, но после записи сценария у вас не будет доступа к Интернету через Wi-Fi. Чтобы восстановить соединение, отключите прокси-сервер на тестовом смартфоне.
Если вы записываете много скриптов с помощью реального устройства, можно переключиться с Wi-Fi на сотовые данные и обратно. Настройки прокси-сервера в беспроводной сети при этом не сбрасываются, поэтому можно быстро приступить к записи очередного скрипта.
Обработка скрипта и запуск теста
Этот этап не отличается от обработки обычного скрипта. После параметризации, соотнесения и добавления тестовых данных запускается отладочный тест (одна итерация с одним виртуальным пользователем) для проверки на наличие ошибок. Результаты отладки скрипта можно увидеть, выбрав в дереве скриптов элемент View Results Tree. Для максимального приближения к реальным условиям может потребоваться вставка задержек между действиями.
Для сглаживания нагрузки используйте Ultimate Thread Group или Stepping Thread Group. Их можно найти в разделе Test Plan -> Add -> Threads (Users). Если нужный элемент отсутствует, его можно добавить через Options -> Plugins Manager.
Также необходимо рассчитать темп выполнения каждой операции, количество используемых виртуальных пользователей, количество и длительность этапов нагрузки. Важным шагом является добавление элементов мониторинга через Test Plan -> Add -> Listener, таких как Transactions per Second, Active Threads Over Time, Hits per Second, Aggregate Report и др.
Эти инструменты помогут собрать данные для дальнейшего анализа. После выполнения всех этих действий можно приступать к тестированию.
- Выбор операций и создание профиля нагрузки
- Подготовка реального устройства или установка эмулятора
- Настройка подключения к сети
- Создание скрипта в JMeter и настройка HTTP-прокси-сервер на локальном компьютере
- Копирование и установка сертификата на мобильное устройство
- Загрузка и установка приложения на мобильное устройство
- Настройка прокси на мобильном устройстве
- Запись сценария тестирования с помощью JMeter
- Отключение прокси-сервера на мобильном устройстве
- Обработка скрипта и запуск теста