+38 (093)  990-30-70

Новости

Королевский бал у Вас дома

Тестування навантаження мобільних додатків: запис трафіку і створення скриптів

  1. Вступ
  2. запис трафіку
  3. створення скрипта
  4. На практиці з додатком
  5. Альтернативний варіант запису трафіку для Android
  6. Запис трафіку банківських додатків
  7. висновок

Ця стаття описує процес запису трафіку і створення скрипта для jMeter з метою провести тестування навантаження мобільних додатків для iOS і Android.

Вступ

Мобільний ринок - один з найбільш швидкозростаючих у всіх напрямах: від реклами до використання в бізнес-сфері.

Використання мобільних пристроїв в деяких завданнях ще в 2014 році прийшло до показників ПК, тому тестування мобільних додатків стає все популярніші.

У цьому матеріалі ми хочемо звернути увагу на тестування продуктивності, а саме описати процес створення скриптів для навантажувального тестування.

Відразу варто уточнити, що зустрічається поділ на Protocol-Level Load Generation (протокольний) і Device (User Interface) level Load Generation (навантаження за допомогою мобільного клієнта).
Перший варіант - стандартна генерація HTTP-трафіку за допомогою навантажувального інструменту.
Другий варіант передбачає наявність реальних пристроїв, які створюють навантаження за допомогою клієнта.
Також є поділ на продуктивність безпосередньо додатки (в тому числі споживання ресурсів "заліза" і витрата батареї), продуктивність сервера і продуктивність мережі.

У даній статті буде розглянута реалізація навантаження на протокольному рівні для з'ясування продуктивності сервера.

Для цього використовуються ті ж інструменти, що і для роботи з веб-додатками: Fiddler, jMeter, LoadRunner і т.д.
В даному випадку ми використовуємо тільки безкоштовні інструменти.

Подальші кроки робилися на пристроях iPhone і iPad, так само даний метод був перевірений на пристроях з Android на борту.

запис трафіку

Загальна схема запису трафіку виглядає наступним чином:

  1. Вибір пристрою з додатком, роботу якого потрібно емулювати.
  2. Налаштування проксі-сервера, який буде записувати і перенаправляти запити клієнта на сервер (і відповіді від сервера клієнту).
  3. Підключення пристрою до проксі-сервера.
  4. На мобільному пристрої виконуються бізнес-операції, які необхідно записати.

Для цього нам зійде будь-яка з програм, у якій є така функція
Для цього нам зійде будь-яка з програм, у якій є така функція. У прикладі нижче використовується Fiddler 4, але можливо використовувати і Jmeter.

Насамперед потрібно встановити на пристрій сертифікат безпеки нашого proxy - SSL сертифікат, який дозволить нам пропустити і розшифрувати HTTPS-трафік через Fiddler.

У Fiddler потрібно проставити настройки на розшифровку HTTP (S) трафіку і підключення віддалених комп'ютерів:

Далі потрібно вручну налаштувати проксі підключення на пристрої:
Далі потрібно вручну налаштувати проксі підключення на пристрої:

Сертифікат знаходиться за адресою http: //ipv4
Сертифікат знаходиться за адресою http: //ipv4.fiddler: номер_порту /.
Викачуємо його через браузер і встановлюємо. На Samsung Galaxy S7 (Android 7.0.1) було недостатньо просто клікнути по сертифікату, незважаючи на повідомлення про успіх, сертифікат був відсутній в системі. Вирішилося установкою сертифіката через параметри безпеки.

Ту ж операцію можна виконати з jMeter HTTP (S) Proxy Recorder.

створення скрипта

Запускаємо програму і робимо всі необхідні операції, які будуть потрібні для скрипта.

Після того, як створений тест-план, корелюючи значення і перевіряємо, чи правильно виконується скрипт.

На даному етапі процес ідентичний стандартної налагодженні скрипта.

Якщо запит (особливо POST із завантаженням файлу) повертається з помилкою, його має сенс повторно перехопити за допомогою іншої програми (тобто ловили трафік в Fiddler, значить тепер зробимо через jMeter, і навпаки) і порівняти, в чому різниця.

На практиці з додатком

Тестоване додаток Gloopt - сервіс по створенню каналу з можливістю ділиться своїми відеороликами тривалістю до 1 хвилини.
Трафік ми записали через Fiddler, так як jMeter не дозволив нам відтворити відеоролик і завантажити кліп на сервер.
Для конвертації запитів в скрипт jMeter'а ми використовували плагін авторства нашого колеги, Дениса Скорнякова (https://git.performance-lab.ru/d.skornyakov/FiddlerJmxCreator) - він зберігає сесію в .jmx файл. Попередньо прямо з Fiddler можна корелювати значення.

Якщо створювати тест-план за допомогою плагіна, а не вручну, сесію Fiddler краще зберегти, тому що не всі заголовки можуть бути перенесені коректно.

Обмін повідомленнями між клієнтським додатком і сервером виглядає приблизно так:

1. Спочатку запитується інформація про фото, з респонза ми дізнаємося його розмір в байтах.

2. Далі додаток посилає запит на якийсь відрізок файлу, наприклад, від нуля.

Виглядає як "Content-range: bytes був = 0", сервер повертає вже конкретний відрізок, "Content-range: bytes був = 0-37895".

Наступний запит клієнта запитує частина від 37896 і так далі, поки не дійдемо до кінця.

У Fiddler, до речі, реквести з боку клієнта йшли з певним діапазоном. Спочатку було незрозуміло, яким чином додаток формує запит.
Зате в деббагере Chrome можна було побачити, що запитуваний діапазон залежить від респонза сервера.
Відповідно, отримуючи довжину контенту, ділимо його на n частин і через While симулюючи перегляд відео.

Завантаження відео в нашому додатку може бути в двох варіантах - записати ролик одразу з камери або завантажити вже готовий відеоролик.
У першому випадку він все одно спочатку зберігається в файлову систему, тому для нас обидва процеси з точки зору навантаження ідентичні.

Цю транзакцію не вдалося виконати з jMeter після конвертації - чи то Fiddler специфічно сприймає подібну операцію, то чи в jMeter доводиться викручуватися по-особливому.
У підсумку довелося саме цю частину записати допомогою jMeter, щоб були правильно проставлені параметри семплера.

Зокрема, для завантаження відео треба було видалити Content-Type з header'a, прописати MIME Type у відправляється файлу, поставити галочки у "Use multipart / form data for POST" і "Browser-compatible headers", що не було зроблено при конвертації запиту з Fiddler (там сам запит побудований трохи по-іншому).

Альтернативний варіант запису трафіку для Android

У разі, якщо тестоване додаток працює під Android, є альтернативний варіант запису трафіку У разі, якщо тестоване додаток працює під Android, є альтернативний варіант запису трафіку. Для його використання знадобиться пристрій і додаток Packet Capture . Цей додаток не вимагає Root-привілеїв, може розшифровувати HTTPS трафік і майже повністю автоматично дозволяє створити сертифікат для розшифровки такого трафіку. Від користувача потрібно лише погодитися з установкою сертифіката.

Для запису трафіку необхідно дозволити програмі встановити сертифікат і запустити запис, використовуючи зелену кнопку. Далі можна переключитися на тестоване додаток і виконувати необхідні дії, запис трафіку буде вестися в тлі.

Далі можна переключитися на тестоване додаток і виконувати необхідні дії, запис трафіку буде вестися в тлі

По закінченню запису (зупиняти запис не обов'язково) можна знову переключитися на Pocket Capture і подивитися записані запити і відповіді до них. На головному екрані відображаються всі сесії запису. Для перегляду запитів, потрібно вибрати поточну сесію (або одну з попередніх, для перегляду старих записів). З'явиться список підключень кожної програми, що виходить в Internet.

Вибираємо потрібну програму і бачимо записаний трафік.

Можна дешифрувати його, якщо натиснути відповідну кнопку. Можливо збереження окремих з'єднань (на жаль, немає пакетної обробки, тобто неможливо зберегти всю сесію запису або всі запити додатки).

Можливо збереження окремих з'єднань (на жаль, немає пакетної обробки, тобто неможливо зберегти всю сесію запису або всі запити додатки)

Запис трафіку банківських додатків

На жаль, при спробі записати трафік мобільних банківських додатків під платформою Android обома перерахованими варіантами, додатки відмовлялися працювати, посилаючись на проблеми з підключенням. Ймовірно, додатки використовують ssl-pinning. Однак, і дане ускладнення можна обійти.

Можна спробувати використовувати Interceptor-NG , Zaproxy, Mallory Proxy, MITMPROXY, WebScarab, Burp Proxy або SSLSplit для SSL MiTM. Для Android можна спробувати використовувати модуль SSL unpinning для Xposed, який дозволяє перехоплювати стандартні виклики на перевірку сертифікатів і відв'язувати їх, або спробувати пропатчити додаток вручну. Важливо пам'ятати, що не існує ідеальної технології, і до задачі потрібно підходити творчо.

висновок

Отже, ми перехопили трафік мобільного застосування і перетворили його в скрипт для jMeter. Подальші кроки нічим не відрізняються від навантажувального тестування WEB додатків - кореляція, підготовка тестових даних, запуск тестів і т.д.

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

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