Привет, Хабр! На связи Саша, менеджер фермы мобильных устройств в Selectel. Чуть больше года назад я выпустил текст про наши эксперименты во время работы над продуктом, чтобы клиенты могли тестировать ферму удаленно. Тогда мы находились только в начале пути и показали первый вариант решения. Не обошлось без сложностей, которые мы выяснили в том числе благодаря вам. Спасибо, что вписались в авантюру и попробовали себя в роли фермера!
С тех пор многое изменилось: ферма мобильных устройств вышла в релиз, разрослась до 100+ устройств разных моделей и форм-факторов, а в панели управления появился крутой интерфейс. Хочу вкратце рассказать о наших достижениях за последний год и показать, как живет продукт сегодня. Подробности под катом!
Вспомнить все: что такое ферма мобильных устройств
Часто при тестировании приложений мобильные разработчики придерживаются двух подходов.
- «Покупаешь телефоны, загружаешь свое приложение и тестируешь». Это самый простой подход, но сильно затратный для бюджета. Например, чтобы проверить мобильное приложение дополненной реальности, нужно закупить десятки телефонов с разными камерами и драйверами. И все равно может потом всплыть версия, на которой все «валится».
- «Зачем вообще реальные устройства? Установил эмулятор — и в бой!» Это хороший способ, если нужно быстро протестировать базовый функционал и найти явные «мобильные баги». Разработчику не нужны большие средства на покупку телефонов. Кажется, что это оптимальный путь тестирования, но все ли так просто?
Не во всех сценариях релевантны эмуляторы. Когда речь заходит о тестах на производительность, UI или на взаимодействие с «реальным железом» (например, камерой или антенной), лучше вернуться к модели «на столе». Но что делать, если телефонов 5, 10, 15 или еще больше? Если команда находится на разных концах города или даже страны, передача устройств может сильно затянуться.
Решение — ферма мобильных устройств. Мы решили объединить лучшие практики из классических способов тестирования и создали ферму мобильных устройств. Теперь клиенты могут тестировать свои приложения на реальном железе.
Ферма мобильных устройств — это инфраструктурное решение для удаленного тестирования и сборки приложений под Android. Имея доступ к большой базе смартфонов с различными параметрами (версиями OS Android, процессорами, диагоналями, производительностью и оболочкой), пользователь может проводить широкий набор тестов. Тем самым ускорить обнаружение багов и деплой в продакшен.
Тестирование продукта было запущено в августе 2023 года. За год ферму мобильных устройств протестировали более 80 человек — и в июле этого года продукт вышел в релиз.
Выводы после альфа-тестирования
После альфа-тестирования фермы мы пообщались с большим числом пользователей и погрузились в доработки. Был ряд проблем, которые нужно было решить.
Проблема 1: длинный путь до управления телефоном
Изначальная схема подключения к мобильным устройствам через ферму, альфа-версия.
В нашей изначальной схеме пользователь получал доступ к ARM-серверу, к которому были подключены мобильные устройства. Для того, чтобы добраться до телефона, нужно было сделать целых девять шагов:
Девять шагов от пользователя к мобильному устройству.
Это слабо похоже на быстрый и интуитивный инструмент для тестирования.
Мы хотели сделать так, чтобы пользователь мог за считанные минуты зайти в панель управления и увидеть заветный экран телефона.
Проблема 2: высокий порог входа
Мы работаем с серверным оборудованием каждый день. Через наши руки прошло тысячи разных машин, у нас постоянно выходят про это материалы в Академии Selectel и на Хабре. «Глаза замылились» — мы не обратили внимание, что ферма может быть сложна для людей без навыков в работе с серверным оборудованием и ARM.
За весь период альфа-тестирования нам приходилось не раз помогать клиентам с получением доступа к управлению сервером и телефонами. Мы не учли, что у коллег из области разработки и тестирования мобильных приложений другой взгляд на мир. Инструкции в такой ситуации не помогают, насколько бы подробными они ни были.
Проблема 3: «прослойки» для подключения порождали задержки
Здесь все достаточно прозаично. Каждый элемент нашей системы вносил свои задержки в работу с устройством. «Лидером замедления» оказался ARM-сервер. Точнее, подключение к нему через RDP.
Мы не говорим про географическую удаленность, слабое соединение с интернетом или высокие задержки — все намного приземленнее. Передача видеопотока с телефона в реальном времени крайне тяжело «переваривалась» удаленным рабочим столом. Подключившись к системе напрямую, мы получали плавную и корректную картинку, чем не могли похвастаться участники тестирования.
Обрабатывать статичные картинки и проверять верстку на корректность в такой ситуации все еще можно, но это сильно растягивает время тестирования. По сравнению с телефоном на руках, выбывают почти все сценарии, где важно проверить динамику.
Проблема 4: клиенты зависели от инженеров
Действительно, первую итерацию мы собирали фермы как нечто статичное. Для работы пользователю необходимо было спланировать, под какие задачи нужны устройства, заказать и дождаться сборки бандла. Это могло занять более одного дня. А ведь потом еще нужно было долго и упорно подключаться к самой ферме.
Это никуда не годилось, учитывая гибкость разработки, циклов тестирования и неожиданные баги, которые специфичны для разных устройств. К тому же, чтобы внести изменения в ферму (например, добавить новый смартфон), нужно было каждый раз обращаться к инженеру. Это мешало быстро отлавливать неполадки и реагировать на них, ферма просто неэффективно «коммуницировала» с пользователем через посредника.
Проблема 5: «один за всех, и все за одного»
Устройства периодически вели себя нестабильно. Мы заметили, что с выходом из строя одного девайса обрывалась связь с остальными. Исключив проблемное устройство из фермы, все восстанавливалось. Более того, если что-то сломалось у одного пользователя, то проблема затрагивала всех тестировщиков фермы.
Хабы были не резиновые, так что на один управляющий сервер можно было подключить ограниченное количество USB-девайсов. Помимо этого, в базовых сборках ОС, с которыми мы работали, это значение было порядка 10-15 штук. Пересборкой Ubuntu мы смогли достичь стабильного значения — до 50 девайсов на одну физическую машину. Но есть минус: если сервер отключится, мы потеряем доступ уже не к 15 смартфонам, а к 50.
Проблема 6: если телефон не нужен в одной ферме, его нельзя использовать в другой
Я писал про USB hub для подключения нескольких девайсов одновременно. На тот момент, действительно, его было достаточно, чтобы собрать статичную схему, где можно подключаться сразу к нескольким девайсам и заряжать их.
Хаб всегда «принадлежал» одному клиенту. И если он выходил из строя, то мы всегда знали, кто пострадал. Далее быстро устраняли неполадку с помощью замены. Смена «принадлежности» хаба была очень громоздкой и часто требовала участия инженера. Все еще усложнялось тем, что набор телефонов за хабом перемещался вместе с ним. Если у пользователя было пять девайсов, то оставить четыре, «одолжив» один телефон другому пользователю, в нашей схеме было невозможно без инженера.
Это лишь часть трудностей, с которыми мы столкнулись в процессе тестирования. Если их описывать дальше, статья превратится в огромный лонгрид.
Мы будем постепенно выпускать новые материалы, в которых расскажем, как отказались от STF (полностью ли?) и решали вопросы с безопасностью устройств. Подписывайтесь на наш блог на Хабре и следите за обновлениями!
Ферма мобильных устройств сегодня
Ферма мобильных устройств.
Ферма мобильных устройств предлагает комфортный и быстрый способ тестирования любых мобильных приложений на широком диапазоне девайсов. Мы сильно сократили путь до управления конечным смартфоном. Теперь это выглядит проще, но есть куда расти и в этом направлении.
Актуальная схема подключения к мобильным устройствам через ферму, релиз-версия.
Теперь устройства существуют независимо — без прослоек между ними и пользователями. Можно быстро взять нужный телефон, добавить к себе в ферму и поработать с ним ровно столько, сколько требуется. А после — отправить обратно в пул свободных устройств. Больше не нужно быть специалистом в области администрирования, чтобы настроить работу с девайсами.
Мы избавились от зависимостей между устройствами, а размещение стало плотнее и удобнее. Теперь можно обслужить отдельно взятый смартфон — без отключения остальных девайсов
По точкам отказа команда инженеров отдельно провела работы, которые улучшили архитектуру фермы в целом. Больше мы не зависим от одного сервера, к которому подключены устройства. Служебные сервисы находятся в надежном облаке, а устройства и личные Raspberry Pi — в отдельной инсталляции. Иначе говоря — там, где их обслуживают инженеры.
Пользователи могут собирать фермы из любых девайсов на выбор — прямо в панели управления. Это позволяет перестраивать ферму «на лету», в зависимости от ваших задач.
Аренда в пару кликов
Создать мобильную ферму можно по цене от 1 ₽/мин. Вы получите доступ к базе смартфонов для удаленного тестирования и сборки приложений под Android. Всего за пару кликов.
1. Перейдите в панель управления, в раздел Мобильная ферма, выберите нужные устройства и настройте их количество. Нажмите кнопку Создать ферму.
Панель управления, выбор устройств для фермы.
2. Если вы забыли добавить какое-то из устройств, это можно сделать и после создания фермы. Достаточно нажать кнопку Добавить.
Панель управления, ферма мобильных устройств.
3. В списке устройств кликните ЛКМ по нужному серийному номеру — откроется окно тестировщика.
Панель управления, окно тестировщика.
4. Нажмите кнопку включения в правом верхнем углу экрана или Начать использование — вы получите доступ к удаленному рабочему столу устройства.
Супер — все готово, вы можете удаленно протестировать свое приложение на реальном устройстве.
Работу также упрощают встроенные в панели управления фичи. Прямо из браузера можно загрузить свое приложение, внести изменения в файловую систему, получить доступ логам и терминалу. И все это — в одном окне.
Панель управления, доступ к файловой системе удаленного устройства.
Неочевидные возможности
Помимо того, что вы можете получить удаленный доступ к базе из 100+ мобильных устройств, есть неочевидные бенефиты, о которых стоит сказать.
1. Вы можете не просто листать экран, но и имитировать разные виды нажатий. Это полезно для тестирования приложений, в которых нужно проверить верстку, или узнать, верно ли работают переходы между экранами. Или убедиться, что приложение корректно обрабатывает прерывания работы и т. д.
2. Вы можете проверить, как устройство будет взаимодействовать с внешним миром через тестируемое приложение. У всех девайсов есть доступ к сети Wi-Fi с выходом в интернет. О том, как подключиться, подробнее рассказали в документации.
Панель управления, подключение удаленного устройства к Wi-Fi.
3. Кроме вас «на телефоне» никого нет. По завершении тестирования устройство полностью очищается.
4. Время сессии при работе с устройством не ограничено. При необходимости вы можете арендовать ферму на день, неделю, месяц и даже год — неважно, все устройства только ваши.
5. Устройства можно разделять на разные группы — как по командам, так и по тарифам. Это поможет, если нужно различать, для каких задач и на какое время вы берете девайсы.
Честно про ограничения
У фермы мобильных устройств есть и ограничения. Не все действия можно протестировать.
С устройств нельзя позвонить. Звонки через мобильную сеть не работают, так как в смартфоны не установлены SIM-карты. Мы не хотим стать очередной «Службой поддержки банка».
Камера смотрит на квадрат Малевича. Вы, конечно, можете запустить камеру, но увидите просто черный экран. Мы пока еще думаем, как реализовать подачу изображения.
Face ID и Touch ID недоступны для считывания данных. Здесь, кажется, дополнительные комментарии не нужны. Это просто данность, с которой нужно мириться.
Остались вопросы? Делитесь своим мнением в комментариях!