Тестирование Android-приложений на настоящих моделях
Тестирование Android-приложений на моделях настоящих телефонов
Тестирование Android-приложений на моделях тех телефонов, которые действительно есть у ваших пользователей: 150+ моделей от 11 брендов, Android с 12 по 17. Перед каждым прогоном — возврат к чистому снапшоту, для параллельных прогонов — клоны, а к каждому телефону — доступ через ADB и API.
Телефоны, которые есть у ваших пользователей.
Ферма Android-устройств без своей лаборатории: от бюджетных Galaxy A до Pixel этого года. Каждая модель собрана по слепку настоящего аппарата и сверена с ним, прежде чем её можно запустить. Это не эмулятор: Android работает нативно на ARM-серверах с профилем этой модели.
Вёрстка на настоящих экранах
Разрешение, плотность пикселей и особенности настоящей матрицы — вёрстка, скриншоты и визуальные проверки совпадают с устройством.
Графика как с завода
Строки производителя и рендерера GPU, версии OpenGL и Vulkan настоящего чипсета — приложение видит то железо, которое ожидает.
Google Play внутри
Сервисы Google Play и Play Store установлены как на телефоне — для приложений, которым они нужны для входа, оплаты или обновлений.
Чистый телефон для каждого прогона.
Приведите телефон в состояние, которого ждут ваши тесты, сделайте снапшот и возвращайте телефон к нему перед каждым прогоном. Если одного телефона мало, клонируйте новые из того же снапшота. Восстановление чистого снапшота — одним запросом.
- Сброс перед каждым прогономОдин запрос откатывает телефон к чистому снапшоту, и каждый прогон начинается с одного и того же состояния.
- Клоны для параллельных прогоновНовые телефоны из того же снапшота, каждый со своей личностью, чтобы разделить набор тестов между устройствами.
- Ночные копииСнапшоты телефонов каждую ночь по расписанию; остановленные телефоны в ожидании ничего не стоят.
ADB — когда нужно спуститься ниже.
У каждого телефона своё реле ADB. Оно выключено, пока вы не откроете его для своих IP на заданное время, и отклоняет всё, что может навредить устройству.
- Выключено, пока вы не включитеВключается для каждого телефона со списком разрешённых адресов — до 20 IP или CIDR.
- Закрывается самоПо умолчанию через 24 часа, максимум через 7 дней; неактивные сессии закрываются через 30 минут.
- Одноразовый код входаПоказывается один раз; неверные коды блокируют реле. До 3 сессий на телефон, push и pull — до 2 GiB за сессию.
- Опасные службы под запретомroot, remount, disable-verity, reverse, reboot, tcpip, usb, jdwp, sideload и restore отклоняются всегда. Каждая сессия записывается в журнал.
# 1. open ADB on qa01 for your IP, 24 hours (dashboard or API) curl -X POST https://api.clousd.com/v1/devices/qa01/adb \ -H "Authorization: Bearer $CLOUSD_KEY" \ -H "Content-Type: application/json" \ -d '{"allow_ips":["203.0.113.7"],"ttl_hours":24}' # → connect command and a one-time code, shown once # 2. connect and sign in with the code adb connect $HOST:$PORT adb -s $HOST:$PORT shell clousd-login $CODE # 3. work as usual adb -s $HOST:$PORT install app-debug.apk adb -s $HOST:$PORT shell pm list packages | grep example adb -s $HOST:$PORT logcat -d | tail -n 50
Подключите к CI.
Всё, что нужно тестовому прогону, — это REST-запросы к https://api.clousd.com/v1. Долгие операции отвечают 202 и задачей, которую можно опрашивать, а ключ можно ограничить тестовыми телефонами и правом чтения или управления. См. REST API и реле ADB и маршруты для CI.
API=https://api.clousd.com/v1 AUTH="Authorization: Bearer $CLOUSD_KEY" # reset qa01 to its clean snapshot and wait for the job JOB=$(curl -s -X POST -H "$AUTH" \ $API/devices/qa01/snapshots/v20/restore | jq -r .job.id) until [ "$(curl -s -H "$AUTH" $API/jobs/$JOB | jq -r .job.state)" \ != running ]; do sleep 3; done # install this build and open it curl -s -H "$AUTH" -F apk=@app-release.apk $API/devices/qa01/apk curl -s -H "$AUTH" -H "Content-Type: application/json" \ -d '{"op":"open_app","package":"com.example.app"}' \ $API/devices/qa01/action # keep the evidence curl -s -H "$AUTH" $API/devices/qa01/screenshot -o after.png curl -s -H "$AUTH" $API/devices/qa01/logs > logcat.txt
# the same steps on four phones at once, 0–5 s apart curl -X POST https://api.clousd.com/v1/groups -H "$AUTH" \ -H "Content-Type: application/json" -d '{ "phones": ["qa01", "qa02", "qa03", "qa04"], "steps": [ {"op": "open_app", "package": "com.example.app"}, {"op": "wait", "seconds": 3}, {"op": "if_text", "text": "Sign in", "skip": 1}, {"op": "screenshot"} ], "stagger": [0, 5] }' # 202 → progress per phone in job.output
# a key created with a webhook URL receives signed events POST https://ci.example.com/clousd X-Clousd-Signature: 9f2c…e41a {"event": "job.finished", "ts": …, "phone": "qa01", "job": {…}} # events: job.finished · health.problem · health.resolved # signature: HMAC-SHA256 of the body · 3 delivery attempts
Тестируйте приложение в разных странах.
Дайте телефону выход в другой стране — и за ним последуют часовой пояс, язык, клавиатура, магазин и страна SIM. Вы увидите приложение так, как его видят пользователи там. Следите за прогоном в реальном времени, не вставая из-за стола.
Если ваше соединение проседает, поток снижает качество, а когда оно восстанавливается — повышает обратно. Multi-view показывает много экранов сразу, а синхронный ввод повторяет ваши действия на выбранных телефонах.
Вопросы о тестировании приложений
Остались вопросы? Напишите в поддержку — ответит живой человек, обычно в течение рабочего дня.
Это эмулятор?
Нет. Android работает нативно на ARM-серверах с профилем модели настоящего телефона, поэтому приложение видит эту модель, а не безликое устройство эмулятора. Облачный телефон или эмулятор
Есть ли бесплатный пробный период?
Да. Первый телефон работает 30 минут бесплатно, без карты и без пополнения. Дальше — поминутная оплата, без платы за пользователей: $0.004 в минуту, пока телефон работает.
Можно ли выбрать точную версию Android?
Да, для каждого телефона. У каждой модели в каталоге указаны версии, которые можно запустить сегодня, — Android с 12 по 17. Android 12–14 идут по базовой цене; Android 15 дороже на 10%, Android 16 и 17 — на 25%.
Как сбросить телефон между прогонами?
Один раз сделайте снапшот в чистом состоянии и восстанавливайте его перед каждым прогоном. Это один запрос к API, который отвечает 202 и задачей для опроса по адресу /v1/jobs/{id}.
Можно ли запускать набор тестов параллельно?
Да. Клонируйте новые телефоны из чистого снапшота, каждый со своей личностью, и разделите набор между ними — или запустите одни и те же шаги на целой группе со случайным разбросом.
ADB открыт в интернет?
Нет. ADB по умолчанию выключен. Вы открываете его для каждого телефона — для списка до 20 IP или CIDR и на заданное время (по умолчанию 24 часа, максимум 7 дней), входите по одноразовому коду, а каждая сессия записывается в журнал.
Можно ли установить свой APK?
Да: загрузите его в панели, отправьте на POST /v1/devices/{id}/apk или поставьте через реле командой adb install.
Может ли тесты прогонять ИИ-агент?
Да, в раннем доступе: агент смотрит на экран и его элементы, затем нажимает и вводит текст через запросы observe и act, каждый раз начиная с чистого снапшота. Подробнее — тестирование силами агента.
Можно ли проверить, как приложение ведёт себя в другой стране?
Да. Дайте телефону выход в этой стране — и за ним последуют часовой пояс, язык, клавиатура, магазин и страна SIM. Выберите регион, ближайший к вашей команде, чтобы экран и ADB отзывались быстро.
Запустите приложение на настоящей модели за минуту.
- Первые 30 минут бесплатны, без карты.
- Выберите модель и версию Android.
- Установите свою сборку и начинайте тестировать.