Принимайте участие в зарплатном опросе! Уже собрано почти 8 000 анкет.

DOU Labs: як у Wire створили власну лабораторію з автоматизованого тестування мобільних платформ

В рубриці DOU Labs ми запрошуємо IT-компанії ділитись досвідом власних цікавих розробок та внутрішніх технологічних ініціатив. Питання і заявки на участь надсилайте на editors@dou.ua.

Доброго дня усім читачам DOU. Сьогодні хотілось би розповісти про структуру нашої тестової лабораторії для автоматизованого тестування Wire на мобільних платформах iOS та Android. Думаю, наш досвід буде корисним стартапам або командам, які хотіли би організувати стабільну роботу автоматизованого тестування свого мобільного продукту в локальному оточненні, не витрачаючи на це захмарні кошти.

До плюсів такого підходу можна віднести:

  • менша вартість рішення у довготривалій переспективі;
  • повний контроль над оточенням;
  • відсутність необхідності ділитися збірками аплікації та автоматизованого фреймворку з третіми сторонами.

Мінуси, відповідно:

  • необхідність наявності персоналу достатньої кваліфікації для обслуговування інфраструктури;
  • необхідність проведення регулярного обслуговування.

Мережева архітектура

На даний час лабораторія містить біля двох десятків фізичних машин, кілька десятків віртуальних машин та кільканадцять мобільних пристроїв. Усі клієнти об’єднані в окрему мережу класу C, яку контролює роутер Microtik. Наш вибір впав на продукт даної компанії, тому що в даному контексті це було оптимальне відношення ціна/можливості індивідуального налаштування.

Логічна структура мережі виглядає наступним чином:

IP-адреси в діапазоні 192.168.2.1-10 зарезервовані для мережевого обладнання. Діапазон 192.168.2.11-200 зарезервований для статичних IP-адрес, які отримують фізичні та віртуальні клієнти. Все що більше 200 — діапазон динамічних адрес, що автоматично присвоюються мобільним пристроям, які тестуються в лабораторії (роутер також має окрему точку доступу Wi-Fi).

Всі фізичні машини в мережі пронумеровані по порядку і кожна така машина отримує статичну IP-адресу, останній розряд якої завжди кратний 5. Віртуальні машини, розміщені на даній фізичній машині, мають статичні адреси в діапазоні [192.168.2.x+1, 192.168.2.x+4], де x — адреса їхнього фізичного хоста. Тобто, один хост може вміщати не більше чотирьох віртуалок з «реальними» адресами. Дана закономірність також відображається в іменах хостів. Так, якщо фізична машина називається node1, то її віртуалки отримають імена node11, node12, ... Така структура дозволяє спростити задачу по отриманню IP-адрес машин для автоматизованих скріптів, що виконуються в мережі. Також сам роутер надає можливість для клієнтів отримувати інформацію про конфігурацію мережі та про клієнтів (IP/MAC-адреси, імена хостів) через власний API.

Hardware-компоненти

Лабораторія включає в себе як Mac-, так і PC-сервери. В якості перших були вибрані Mac Mini, а другі — портативні юніти на платформі Intel NUC. Для всіх машин була вибрана конфігурація з 16 і більше GB оперативної пам’яті та процесором Intel Core i5 або i7. Також рекомендується використовувати SSD або хоча б Fusion Drive у випадку з Mac Mini. Інакше будуть сильно відчутні «просідання» в продуктивності віртуалок, особливо якщо їх більше однієї. Дуже важливо наперед продумати правильне підключення машин до електромережі та розрахувати навантаження. Одночасне включення усіх серверів після збою живлення або їхня одночасна робота з повним завантаженням запросто може «відрубати» автомат на електрощитку.

Wire має окремі native-аплікації для Android та iOS. Для автоматизованого тестування на платформі Android ми використовуємо реальні пристрої з множини популярних серед користувачів. Для автоматизованих iOS-тестів використовується симулятор, і тільки невелика їх множина виконується на реальних пристроях в силу обмежень властивих для симулятора (наприклад, відсутність камери, фреймворка CallKit і т. д.). Усі мобільні пристрої постійно підключені через USB-конектори до фізичних серверів. Кожен сервер в свою чергу містить статичну таблицю, де вказується, якій віртуальній машині належить той чи інший підключений пристрій. Тобто кожен віртуальний хост «бачить» не більше одного фізичного пристрою.

Переваги віртуалізації

Образи віртуальних машин абсолютно однакові для кожної окремої платформи, за виключенням мережевих налаштувань та списку довірених пристроїв. Це дозволяє зекономити час на бекапах, оскільки образів для кожної платформи є кілька і всі вони фізично «розкидані» по різних машинах. Тому після «падіння» фізичної машини або пошкодження самого образу можна легко все відновити з іншого сервера простим копіюванням. Також така стратегія дозволяє розпаралелювати автоматизовані тести за принципом MapReduce, полегшує масштабування, покращує стійкість до випадкових збоїв та спрощує архітектуру фреймворку для автоматизації, оскільки не потрібно задумуватись над паралельним доступом до спільних ресурсів в межах конкретного тесту.

Проблеми та рішення

В процесі роботи лабораторії ми стикнулися з кількома проблемами. Так, основною був перегрів мобільних пристроїв, постійно підключених до джерела живлення. Тепер ми знаємо, чому виробники мобільних телефонів не рекомендують на тривалий час залишати їх в режимі заряджування підключеними до електромережі. В деяких лабораторних пристроях через два-три місяці роботи акумуляторні батареї буквально роздувались до такого розміру, що видавлювали тач-скрін і задню кришку (які були, до речі, приклеєні). Першим рішенням було перемістити все обладнання в серверну кімнату з середньою температурою 19℃ . А для особливо «гарячих кандидатів» був придбаний просунутий USB хаб Acroname з можливістю програмного управління подачею живлення на кожен з підключених пристроїв через власний API. Далі був написаний скріпт, що автоматично переключає стан лінії живлення на підключених пристроях кожні дві години, що дозволяє уникнути небажаного перегріву. До речі, цікавий факт — хаб має можливість відключити тільки лінію живлення, залишаючи лінію даних включеною, але це все одно призведе до зникнення відповідного пристрою зі списку видимих для ОС.

Друга проблема спостерігалася на підключених пристроях та віртуалізованих ОС внаслідок тривалої роботи в режимі високого навантаження. Особливо діставали проблеми викликані «втіканням» пам’яті та ресурсів (memory and resources leaks). Це призводило до несподіваних «зависань» без видимих на те причин або неочікуваних помилок в роботі тестів. Допомогло примусове перезавантаження усіх підключених пристроїв та віртуальних машин за розкладом.

Третя проблема — робочі станції з Mac OS автоматично відключають прискорення графіки, якщо до машини не підключено жодного фізичного дисплею. Це створює великі незручності при роботі з віддаленим екраном по протоколу VNC, а також унеможливлює нормальне функціонування аплікацій, що вимагають OpenGL (в тому числі iOS Simulator). Звичайно, можна було взяти монітор, підключити до нього купу кабелів і створити строкате накопичення, в якому сам дідько ногу зламає. А можна придбати заглушку для виходу HDMI або Display Port, наприклад, fit-Headless від компанії Compulab, що і було зроблено.

Висновки

Наша тестова лабораторія за два роки свого існування (а починалося все всього з двох Mac Mini) показала хороші можливості по масштабуванню та забезпенню стабільної роботи в цілодобовому режимі. Ми вважаємо, що вона чесно відпрацювала і продовжує відпрацьовувати кожен євроцент вкладений в обладнання для неї (в основному, це вартість самих серверів та ліцензій для програм). Очевидно, що для дуже масштабних проектів з десятками і сотнями пристроїв для проведення автотестів, таке рішення не буде оптимальним, тому ми ще на початку статті окреслили цільову аудиторію. Але якщо хочеться, щоб було дешево і сердито, є бажання та люди, які крім автоматизованого тестування ще й знайомі з послідовністю кольорів у витій парі для обтиснення патч-корду, то чому б і не спробувати?

LinkedIn

6 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

Жодних деталей, нащо така стаття? Який софт використовується, як доставляється софт на девайси, як запускаються тести???
Я зараз теж займаюсь схожею задачею щодо тестування, поки що зупинився на зв’язці Jenkins + OpenSTF — ферма девайсів фізично підключених до серверу по usb — використовются usb hubs. Jenkins стежить за коммітами, при новому збирає та запускає тести на девайсах і у випадку непроходження тестів повідомляє у slack.

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

Ми юзаєм Perfecto Mobile, впринципі зі своїми задачами справляється на ура

$299 /month/user
$3,588 per year/billed annually
20 Hours ($15 per hour)

Дорогувато якось виходить. Якщо взяти для прикладу нашу лабу, то буває що за одну добу тривалість тестів більше 8 годин (це разом з нічними регресіями, що містять сотні end-to-end тестів).

Там є моживість безлімітний акк взяти. Ну є свої переваги, особливо якшо велика організація

Подписаться на комментарии