Лого vc.ru

Настройка системы для тестирования приложений на Android-устройствах — опыт «Почты Mail.Ru»

Настройка системы для тестирования приложений на Android-устройствах — опыт «Почты Mail.Ru»

Тестировщик «Почты Mail.Ru» Алексей Перфилов написал колонку, в которой рассказал о том, как команда построила гибкую и расширяемую систему для выполнения автотестов на Android-смартфонах, дал рекомендации по выбору телефонов и поделился кодом для настройки систем тестирования.

Поделиться

Сейчас у нас используется около 60 устройств для регрессионного тестирования мобильного приложения «Почты Mail.Ru». В среднем они тестируют около 20 сборок приложения ежедневно. Для каждой сборки выполняется около 600 UI-тестов и более 3500 unit-тестов.

Автотесты доступны круглосуточно — они экономят очень много времени тестировщиков и позволяют нам выпускать качественное приложение. Без них мы бы тестировали каждую сборку около 13 часов. Вместе со сборкой, актуализацией переводов, при рабочей загрузке агентов с автотестами тестирование в среднем занимает 1,5 часа, что ежедневно позволяет нам экономить недели работы тестировщиков.

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

Какие телефоны выбрать для автотестов на Android

Когда Android только-только становился популярным, у разработчиков тестов был выбор из двух зол: покупать дорогой зоопарк телефонов либо работать с медленными и глючными виртуалками. Сегодня всё несколько проще, на рынке появились дешёвые аппараты «эконом»-класса, а виртуальный Android обзавёлся образом для x86 и HAXM.

Однако выбор всё ещё остался, многие предпочитают для автотестов виртуальные машины, но телефоны уже стали вполне доступной опцией даже для скромного бюджета на автотестирование. Так как же выбрать телефон для регрессионных автотестов и какое оборудование ещё нужно, чтобы всё вместе оно могло работать 24/7?

Рынок телефонов очень большой — глаза разбегаются. У меня после череды проб и ошибок вышел такой список (цену на аппарат опускаю, с ней, надеюсь, всё понятно):

  1. Есть возможность получить права root.
  2. Есть возможность анлока boot-раздела телефона.
  3. На телефоне стоит версия Android, максимально близкая к стоковой, или подобные можно установить (чтобы не пришлось лопатить кучу вариантов теста под разные интерфейсы).
  4. Оперативная память на телефоне желательно должна быть размером от 1 Гб (можно работать и на меньшей, но, даже если тесты написаны стабильно, различные проверки отображения «тяжёлых» объектов на телефоне с низкой оперативной памятью окажутся долгими).
  5. Совсем здорово, если у телефона будет долгий саппорт от производителя или пользователей, тогда у нас остаётся шанс продлить ему жизнь новыми версиями ОС.

Основная часть критериев достаточно прозрачна. Если окажется, что на телефоне что-то работает не так, то мы должны хотя бы иметь шанс заставить это работать сами. К сожалению, большая часть критериев — это не те вещи, о которых можно спросить продавца при покупке, поэтому в первую очередь наш путь лежит на forum.xda-developers.com и 4pda.ru/forum, где о рыночной модели можно узнать все подробности.

Плюс ко всем перечисленным критериям, если модель уже долго продаётся, обращайте на форумах внимание на отзывы о браке и времени ресурса памяти и батареек, без них ваше устройство превратится в тыкву. Проблемы экрана, кнопок, корпуса, динамиков и прочего, что обычно интересует пользователя, вас, как правило, пугать не должны: телефон прекрасно будет работать с браком этих элементов, хотя всё зависит от специфики проекта.

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

1. Модель телефона имеет кучу региональных подвидов, при этом только на части из них можно получить рут или разлочить бутлоадер.

Мало того что наткнуться на российский сертифицированный телефон в неофициальном магазине сложно — серые и белые телефоны выглядят одинаково, — так ещё и многие продавцы или их поставщики перепрописывают названия моделей, характеристики «железа», регионы и даже версии операционных систем.

Вполне возможен случай, когда внутри «Настроек» в Android вы видите одну модель, внутри бутлоадера другую, а в шелле, когда набираете getprop и получаете айдишники, — третью. Просто телефон прошёл пару рук и пару регионов до вас. Сначала его хозяином был пользователь Verizon из Южной Дакоты, потом тот сдал его, в refurbished-состоянии аппарат как-то попал торговцу в Тель-Авиве, который его криво перепрошил на их версию операционной системы, а через ещё какое-то время телефон перекупил продавец в Москве, который уже стал продавать его как новый.

Вам привозит его курьер, вы берёте в руки своё новое восьмиядерное перепрошиваемое российское устройство, не подозревая, что это шестиядерный залоченный региональный эксклюзив для контрактных пользователей оператора сотовой связи из США.

Элементы коробки и телефона с «современной» начинкой и высокой ценой, который по внутренним характеристикам оказался перепрошитой младшей моделью от AT&T

2. Один и тот же серийный номер.

Здесь определить проблему попроще, но, к сожалению, даже официальные продавцы этим страдают, отсутствие серийного номера — это напасть многих бюджетных девайсов. Если при работе ваших автотестов используется adb, а к машине подключено несколько устройств, нужно либо переписывать код adb (так он увидит только одно устройство), либо, если покупка совершалась по критериям выше, вписывать уникальный серийник самому.

Типичные значения серийников у бюджетных телефонов

3. Псевдослучайный MAC-адрес у Wi-Fi-модуля после перезагрузки телефона.

Это была довольно серьёзная проблема, потому что мы узнали о ней, когда я убедился, что «всё хорошо», телефон нам подходит, и мы заказали 20 штук точно таких же. В процессе работы автотестов телефоны иногда перезагружаются, через какое-то время тесты начали падать из-за отсутствия доступа к сети по Wi-Fi, хотя всё при этом выглядело нормально: соединение с сетью было и после включения и выключения Wi-Fi-модуля всё работало корректно.

Просто после перезагрузок в какой-то момент у пары телефонов оказывался одинаковый MAC, Wi-Fi-точка доступа же пускала только последний присоединившийся. На тех телефонах, где в итоге генерировался MAC-адрес, я, к сожалению, не нашёл, пришлось в загрузочном разделе поместить скрипт, который устанавливал его насильно на уникальный.

Телефон демонстрирует чудеса spoofing'а из коробки

Тем не менее, если соблюдать при выборе телефона перечисленные выше критерии, эти проблемы не должны быть фатальными — всё это можно исправить руками и заставить телефон работать как нужно.

Кроме телефонов, для запуска автотестов понадобится сам компьютер и USB-хабы, тут тоже есть несколько нюансов. Постоянно работающим телефонам нужно хорошее питание (минимум 0,5 А на устройство, лучше больше), многие хабы на рынке идут со слабыми адаптерами и никак не рассчитаны на то, что в каждый порт будет подключён постоянно работающий телефон.

С планшетами ещё сложнее, девятидюймовые планшеты при постоянной работе разряжаются, экран слишком большой, приходится выбирать из семидюймовых. Из практики у нас вышло, что на адаптер в 4 А можно подключить 6–7 телефонов (в зависимости от их загрузки работой), т. е. большая часть многопортовых хабов с характеристиками типа «адаптер на 3 А, 20 USB-портов», мягко говоря, бесполезны. Самые крутые — серверные решения, но цена у них зашкаливает, так что ограничимся пользовательским рынком. Чтобы телефоны не разряжались, стоит брать хабы на четыре порта с питанием в 3 А, либо хабы на шесть портов с питанием на 4 А. Если есть хабы с хорошим питанием, но с большим количеством портов, – часть портов можно просто не использовать.

Готовим телефон к работе

Давайте для примера возьмём одну модель телефона, решим одну из проблем его операционной системы, а дальше попробуем собрать эти устройства в примитивный тестовый стенд для автотестов. Телефон сам по себе дешёвый и хороший, но с некоторыми недостатками (описанными выше). В частности, у этих телефонов одинаковый iSerial, adb видит только одно устройство. Совсем везде на телефоне его менять не будем, но сделаем так, чтобы adb отдельные телефоны отличал.

Для этого нам нужно будет перепрошить у телефона boot-раздел и установить на устройстве кастомный раздел восстановления — так вы сможете уберечься от неудачных экспериментов. У наших телефонов стоит МТ6580, то есть процессор фирмы Mediatek, значит, для перепрошивки можно использовать SP Flash Tool.

Ещё готовый образ recovery.img и scatter-файл устройства. Почти для всех устройств их можно найти в интернете, на тех же самых ресурсах XDA и 4PDA, но при желании recovery можно перекомпилировать для своего устройства, взяв за основу TWRP, а scatter-файл создать самому. В любом случае, берём наши готовые файлы и перепрошиваем:

После установки раздела восстановления сохраните через него бэкап boot-раздела и переместите его к себе на машину, обычно в этом разделе располагаются конфигурационные файлы ОС. Чтобы захардкодить свой iSerial, нужно распаковать образ загрузочного раздела телефона, это можно сделать с помощью Android Image Kitchen. Запускаем unpackimg.sh и получаем распакованный образ в папке ramdisk:

Здесь много init-файлов, в которых указываются различные переменные, в том числе и серийный номер.

Находим файл, где устанавливается серийный номер ${ro.serialno}, и заменяем его на свой номер, например, 999222333019:

find ramdisk/ -maxdepth 1 -name "init.mt*" -exec sed -i 's/${ro.serialno}/999222333019/g' {} +

Запаковываем образ обратно с помощью repackimg.sh, перекидываем его на телефон и устанавливаем с помощью кастомного рекавери. Теперь adb будет отличать устройства, нам остаётся включить режим разработчика на телефоне и разрешить debug в меню разработчика. Любые подобные проблемы можно решать точно таким же путём, практически всё в телефоне можно перепрошить или поправить, если этого потребуют задачи тестирования.

Настройка тестовой машины

В качестве хоста нашего стенда будем использовать обычный десктоп с установленной на него Ubuntu. Телефоны затем можно будет разделить на отдельные виртуальные машины, использовать все вместе или, как это делаю я, разделить их в отдельные docker-контейнеры.

При заказе и сборке машины, к которой будут подключены телефоны, есть специфика. Кроме стандартных HDD/RAM/CPU, нужно обратить внимание на количество USB-контроллеров на материнской плате и поддерживаемый протокол USB.

Телефоны, работающие на USB 3.0 (xHCI), могут существенно ограничить максимальное количество устройств на машине (обычно 8 на контроллер, в итоге 16 устройств на машину с двумя контроллерами), поэтому стоит проверить, есть ли возможность его отключить и использовать только EHCI. Такие опции есть в биосе или ОС, лучше всего насильно отключить xHCI в биосе, если вам не нужны высокоскоростные устройства.

Заключение

Физические мобильные устройства в системе интеграции рано или поздно появляются у любого более-менее крупного проекта на Android — неизбежно возникают необходимость покрытия ошибок, нестандартные тестовые случаи или просто фичи, которые требуют реального устройства.

Кроме всего этого, устройства не используют ресурсы ваших серверов, так как процессоры и память у них свои, а хост для телефонов не должен быть супермощным, «домашний» десктоп со всем этим вполне справится. Соизмеряйте плюсы и минусы, считайте, что выгоднее, — наверняка в вашей системе автоматизированного тестирования есть место реальным устройствам. Желаю вам поменьше багов и побольше тестового покрытия.

Присылайте колонки, соответствующие требованиям редакции, на secret@vc.ru

Популярные статьи
Показать еще
Комментарии отсортированы
как обычно по времени по популярности

Очень даже приятное чтиво, спасибо.

0

Есть вопрос к VC - у вас кросспостинг не запрещен?

Эта же статья опубликована на Хабре

0

Сначала она была опубликована у нас, потом — на Хабре.

0

Все понятно, разработчики там типа крутые, тесты настроены, приложение не падает.

Но почта Mail.ru это же ебаный мрак? Кто последний раз в веб версию логинился с компа?

И что там не так? У яндекса в почте вообще кошмар, у мэйла более-менее всё работает

0

Гугловской почтой сам пользуюсь, не спорю, что она гораздо лучше и шустрее работает))

0

Вопросов много реальных ответов только три - gmail, outlook и hushmail
Нужное подчеркни

0

Возможность комментирования статьи доступна только в первые две недели после публикации.

Сейчас обсуждают
Роман Романович
SmartXML

прочитал на одном дыхании.

спасибо!

«В кризис банк никто не купил, пришлось развивать самому»
0
Илья Поздняков

Ситуация перегрета... А премия за то, что он отработал в 2014 году всего 3-4 месяца,а выписал себе премию за год, не перегрета ? Так еще и прибыль, на основе которой он и решил себя порадовать, сформирована за счет гос субсидии... А господин Страшнов не боится, что если не органы его посадят, то просто какой-нибудь обиженный сотрудник Почты России посадит его на перо ?!

ФСБ изъяла документы в офисе «Почты России» из-за премии гендиректору компании
0
Michil Androsov
inDriver

На самом деле клевое же приложение, ну че вы

Ашот Габрелянов представил приложение Magic для создания индивидуальных стикеров на основе эмоций
0
Andrew Stoleshnikov
CraftedPIxels

Какая чушь.

«Вжух»: реакция российских компаний на мем с котом и волшебной палочкой
0
Максим Митин
SOVZOND

А что, мнений экспертов мемасной отрасли в статье не будет? Жаль.

«Вжух»: реакция российских компаний на мем с котом и волшебной палочкой
1
Показать еще