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

«Как вы проводите нагрузочное тестирование нативных мобильных приложений?» — вопрос из категории Тестирование производительности, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нагрузочное тестирование нативных приложений (Android/iOS) направлено на оценку стабильности, отзывчивости и потребления ресурсов под нагрузкой. Подход включает тестирование как серверной части (API), так и самого клиентского приложения.

1. Тестирование API-бэкенда: Использую инструменты вроде JMeter, Gatling или k6 для создания нагрузки на эндпоинты, которые использует приложение.

Пример конфигурации сценария в JMeter для имитации пользователей:

Thread Group: Пользователи
- Number of Threads (users): 200
- Ramp-up period: 60 секунд (постепенный рост нагрузки)
- Loop Count: Forever / 100

HTTP Request Sampler:
- Method: POST
- Path: /api/v1/login
- Body Data: {"username": "${USER}", "password": "test"} // Используем CSV Data Set для разных пользователей

Основные метрики:
- Throughput (пропускная способность) > 50 req/sec.
- 95-й перцентиль времени отклика < 1000 мс.
- Error Rate < 0.1%.

2. Тестирование клиентской части (на устройстве):

  • Инструменты: Xcode Instruments (для iOS), Android Profiler/Perfetto (для Android).
  • Что отслеживаю:
    • Потребление памяти (Memory Leaks): Проверяю утечки через Allocation Tracker/Heap Dump.
    • Использование CPU: Убеждаюсь, что под нагрузкой нет аномальных пиков (>80% на длительное время).
    • Энергопотребление (Battery Drain): Тестирую сценарии при активном и фоновом использовании.
    • Нагрев устройства.
  • Сценарии: Имитация длительных сессий, обработка множества push-уведомлений, работа в фоне.

3. Анализ и отчетность: Сопоставляю данные с серверных логов (например, время ответа от базы данных) и метрики с устройства, чтобы выявить узкие места: это сеть, серверный код или обработка данных на клиенте.