Привет, Хабр! Когда-то я пять лет проработал в отделе тестирования, а последние шесть занимаюсь разработкой под iOS и Android. На одном из первых проектов в мобилке я на Java под Android создал пирамиду тестирования: больше тысячи unit-тестов, больше ста интеграционных и с десяток UI и End‑to‑End. На текущей работе сделал то же самое с нуля, но уже под iOS на Swift.

Но не все сценарии можно покрыть автотестами. Многое все еще тестируется вручную. Например, на текущем проекте мне нужно проверять работу звонков. И для этого не подходят симуляторы/эмуляторы, так как часть функций звонков в них недоступна. Единственная возможность проверить - это взять два физических телефона и протыкать все руками. Обычно я так и делаю при разработке. А потом готовые фичи передают ручным тестировщикам, которые это проверяют на своих телефонах. 

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

Начал разбираться и узнал, что есть множество мировых ферм устройств: BrowserStack, Sauce Labs, LambdaTest, AWS Device Farm, Firebase Test Lab и другие. Но все они зарубежные. С текущими перебоями интернета в РФ — ненадежный вариант. Оказалось, что в России, кроме приватных ферм у корпораций, есть MWS SunQ. Можно развернуть STF и Appium самому — но это больше задача для DevOps. И ограничена теми устройствами, что есть у фирмы. У нас их штук десять — для полноценного тестирования мало. Поэтому я решил разобраться с MWS SunQ.

Что такое MWS SunQ

Зашел на https://sunq.mws.ru/ и меня встретил лендинг:

Можно потестить продукт 21 день. Мне, как выпускнику школы №21, цифра понравилась. Лучше бы, конечно, 42 или 67 дней, но так тоже неплохо. Или можно сразу выбрать тариф и оплатить. Ничего необычного.

Из преимуществ — интеграция с Jira, Git, Appium, Allure, SSO. Остальное достаточно стандартно.

В разделе «О продукте» — параметры фермы: 300+ реальных устройств iOS и Android, доступность 24/7, индивидуальные настройки. Из интересного: автоочистка данных после сессии, удаленная отладка и возможность встраивания в CI/CD. Как раз то, что мне нужно.

Дальше тарифы — о них поговорим позже. Потом красивые цифры и список клиентов. В целом так всегда делают на лендингах. И в конце итог:

Браузерное тестирование тоже доступно.

Посмотрев на него, понял: для мобилки скриншот-тесты не завезли и даже не планируют. Но если есть интеграция в CI/CD, думаю, это можно реализовать на своей стороне.

От входа до пространства

Пришло время потрогать SunQ своими ручками. Для авторизации достаточно ввести номер телефона и код из СМС.

Можно подключить биометрию, но я отложил это на потом.

После авторизации попадаю на экран создания пространства — нужно придумать для него название.

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

Посмотрел в документации, как проходит регистрация для тех, у кого нет MTC ID. Там ничего сложного, достаточно указать ФИО, телефон, рабочую почту и принять условия пользовательского соглашения:

Тут должна быть картинка

Пространство создано, можно пользоваться всеми возможностями платформы. На внутреннем лендинге не вижу смысла останавливаться.

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

На вкладке «Команда» личная информация обо мне и о тех, кто добавлен в команду. Оттуда можно исключить участников, изменить роль или настроить доступы.

На страницах API Token и Proxy Token — токены для интеграций.

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

И последняя иконка с человечком позволяет переключать аккаунты, выйти и войти в аккаунт MTC ID. Кстати, только сейчас понял, что у меня авторизация была такой простой, потому что я клиент МТС и у меня уже есть ID. Если у вас другой оператор — процесс регистрации/авторизации будет чуть сложнее. 

Перехожу к главному — каталогу устройств.

Каталог устройств

Тут сразу показаны iOS и Android устройства. Можно фильтровать по модели, производителю, версии OS. И посмотреть занятые устройства. Когда я заходил — таких не было. Также заметил, что за каждым устройством закреплен свой номер телефона — это для моих сценариев полезно, так как можно тестировать звонки на мобильные номера, да и в некоторых сценариях нужно вводить номер телефона.

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

Как бывший тестировщик, я не мог не найти мелкий баг. Выбираешь версию iOS, потом переключаешься на Android — а список версий Android не обновляется, а значит и список телефонов будет пустой.

Лечится повторным нажатием на версию ОС — тогда список доступных ОС сбрасывается и можно выбрать то, что нужно.

Пока смотрел, кто-то взял два телефона в тестирование — покажу, как выглядят занятые устройства.

И обнаружил, что сейчас доступно не 300+, а всего 63 устройства. Возможно, я попал на техобслуживание и часть устройств убрали.

Ладно, это мелочи. Пора пощупать устройства и посмотреть, как все работает.

iOS

Можно выбрать сразу два устройства. Для моих сценариев — в самый раз.

Потом какое-то время ждем загрузки:

Устройства загрузились. Параметры можно посмотреть, нажав на i над телефоном.

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

Пришла пора проверить приложение. Нажимаю “Установить приложение” и получаю:

Я думал, будет интеграция с TestFlight или что-то подобное. А тут — просто загрузить файл. Видимо, .ipa. У меня такого с собой не было, так что ручной тест на iOS не задался. Нажимаю «Завершить работу» и освобождаю эти два телефона.

Из документации про ручное тестирование:

  • 2 часа — максимальное время сессии;

  • 30 минут — автозакрытие при простое;

  • 4 устройства максимум для одновременной работы на одного пользователя;

  • при завершении работы автоматическое удаление установленных приложений;

  • минимальные системные требования к сети для стриминга одного устройства – 50 Мбит/с;

  • рекомендованные системные требования к сети для стриминга более одного устройства – 100 Мбит/с;

  • при работе с устройствами мышкой или тачпадом доступны тапы, лонгтапы и свайпы;

  • можно вводить текст с клавиатуры своего устройства (символы, пробел, enter, backspace);

  • можно использовать кнопки «Назад», «Домой», «Запущенные приложения»;

  • можно свернуть приложение (для устройств, у которых нет кнопки «Домой»);

  • можно заблокировать/разблокировать устройство;

  • можно повернуть устройство горизонтально/вертикально;

  • можно включить/выключить звук на устройстве.

В документации нашел, как тестировать без загрузки файла: открыть маркет (Google Play или App Store) через устройство, авторизоваться, установить нужное приложение. Так и сделал. Погонял — работает как на обычном устройстве. Показывать не буду — выглядит обычно.

Через TestFlight, наверно, тоже можно установить — разлогиниться в AppStore и зайти под своим аккаунтом. Но решил пока так не делать. Если в нашей фирме купим SunQ, тогда буду разбираться.

Android

Аналогично выбираю два устройства, жду загрузки.

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

Конечно же, тут есть возможность покрутить телефон:

Есть возможность отладки.

Если нужно посмотреть на отдельные пиксели, можно увеличить разрешение:

Есть еще куча других настроек для тестирования:

Например, настройка сети и интернета.

Можно поиграться с настройками доступности:

Из языков доступны только русский и английский. Можно указать геопозицию.

Также можно заменить телефон:

Само собой, можно изменить/выключить звук, отмасштабировать, заблокировать телефон, перейти на главный экран.

Можно записать видео с экрана и скачать его:

Для отладки доступны логи приложения с поиском, их тоже можно скачать:

Можно вызывать визуального инспектора и посмотреть, какие элементы отображаются на экране:

Можно вызвать проксирование локальных ресурсов — для каждой ОС будет своя инструкция:

Для прокси нужно скачать приложение SunQLocalTesting, запустить его с правами администратора из терминала, передав Proxy Token из настроек пространства.

Из документации по ограничениям проксирования:

1. Проксирование работает только для устройств с версией IOS 17.0.0 и выше и Android с версии 9 и выше.

2. ПК с операционными системами:

  • Windows 10 и выше с правами локального администратора;

  • MacOS любой версии;

  • Linux любой версии.

3. Возможность подключения зависит от настроек безопасности сети, к которой подключен ПК.

Браузеры

Тут все просто. Вводишь адрес страницы, которую нужно проверить, и выбираешь, в каком браузере это сделать. Потестирую Хабр:

После ввода URL и выбора браузера начинаю тестирование и жду загрузки:

Почему-то с Хабром что-то пошло не так, причем в двух браузерах:

Из полезного — можно менять разрешение, браузер, делать скриншоты. Не знаю, нужно ли еще что-то для тестирования веба. Моя задача — мобилки, так что на ручном тестировании браузеров на этом остановимся.

Из документации:

  • 2 часа — максимальное время сессии;

  • 15 минут — автозакрытие браузера при простое;

  • 2 экземпляра максимум одновременно;

  • Chrome, firefox, Opera, Edge — доступные браузеры;

  • доступны четыре последних версии;

  • разрешение экрана от 800×600 до 2560×1440.

Appium и тестирование через API

С ручным тестированием разобрались. Перейдем к самому интересному — автотестам.

В вебе все просто. Это не моя главная цель, но кое-что покажу.

При нажатии на ссылки в инструкции открывается Swagger с методами:

  • POST /api/v1/support/browsers — получить список доступных браузеров;

  • POST /api/v1/request/sync/cbt — зарезервировать браузер, получить адрес для Selenium и ID ресурса;

  • POST /api/v1/cancel/{orderId} — освободить ресурс, вызвав этот метод с ID, полученным ранее.

API лежит тут.

Переходим к автотестам для мобилки. Тут все немного сложнее.

Вначале надо скопировать токен - этот блок в скриншоте опустил, чтобы не светить.

А далее нужно выполнить семь запросов к API:

Тут уже используются несколько API: сервис по работе с файлами, с устройствами и с приложением.

А теперь к самим запросам:

  • POST /api/v1/files — отправляем файл приложения на загрузку в хранилище, получаем ID файла, ссылку на скачивание файла, его размер и имя;

  • POST /api/v1/devices/search — получаем список устройств по заданным фильтрам с их статусом и характеристиками;

  • POST /api/v1/reservations/create — резервируем до четырех устройств по серийникам, в ответ получаем, сколько найдено и сколько зарезервировано;

  • POST /api/v1/management/file — отправляем ранее загруженный файл на установку, указав ID и URL файла, а также фильтр по серийникам устройств;

  • GET /api/v1/management/info/{id} — проверяем корректность установки приложения и получаем базовую информацию о приложении и телефоне;

  • GET /api/v1/reservations/access/{serial} — по серийнику телефона получаем ссылку на Appium Driver.

Далее запускаем автотесты через Appium и по их завершении:

Также есть возможность настройки прокси и изменения параметров WiFi на устройстве, но это уже для более специфических сценариев.  По ним и по всем остальным фичам есть документация в PDF. Кстати, ее можно скормить нейросети и попросить настроить все под себя.

Я с Appium раньше не работал. Видимо, придется разбираться, но это уже совсем другая история. Честно говоря, ожидал, что можно будет запускать нативные UI-тесты на Swift или Kotlin. Погуглил — вроде есть библиотеки, которые это позволяют через Appium. Но настройка там нетривиальная, и в обзорную статью это точно не влезет. Так что с автотестами остановлюсь на этом.

Экономика фермы: тарифы и затраты

Сколько же это все стоит? Для физлиц тарифы расписаны на лендинге:

А вот для юрлиц цены не публикуют — только по заявке. Так что я их не узнал.

Сравню цены для физлиц с конкурентами по тестированию mobile:

Сервис

Ручные тесты

Автотесты

Источник

MWS SunQ

4200 ₽ (около 50 $) в месяц (до 5 пользователей)

- 24000 ₽ (около 290 $) за 4 устройства;

- 4200 ₽ (около 50 $) за каждое следующее

https://sunq.mws.ru/#tariffs

BrowserStack

- от 39 $ за пользователя в месяц;

- 150 $ - команда из 5 пользователей.

- 199 $ в месяц при оплате за год;

- 249 $ в месяц при оплате по месяцам;

- тариф Pro 249 $ в месяц.

https://www.browserstack.com/pricing

Sauce Labs

- 39 $ в месяц при оплате за год;

- 49 $ в месяц при оплате по месяцам.

- 199 $ в месяц при оплате за год;

249 $ в месяц при оплате по месяцам.

https://saucelabs.com/pricing

TestMu AI (ex-LambdaTest)

- 39 $ в месяц при оплате за год;

- 49 $ в месяц при оплате по месяцам.

- от 199 $ в месяц при оплате за год;

- 249 $ в месяц при оплате по месяцам.

https://www.lambdatest.com/pricing

AWS Device Farm

- 0.17$ - минута устройства;

- от 250$ в месяц.

- 0.17$ - минута устройства;

- от 250$ в месяц.

https://aws.amazon.com/device-farm/pricing/

Firebase Test Lab

- 30 минут в месяц бесплатно, далее - 0.15$ в минуту.

- 5$ - 1 устройство в час.

https://firebase.google.com/docs/test-lab/usage-quotas-pricing

Оценим стоимость нескольких сценариев:

Сценарии

MWS SunQ

BrowserStack

Sauce Labs

TestMu AI (ex-LambdaTest)

AWS Device Farm

Firebase Test Lab

Один ручной, каждый день

50$

49$(39$)

49$(39$)

49$(39$)

250$

Около 1440$

Команда из 5 ручных, каждый день

250$

150$ за команду

245$(195$)

245$(195$)

1250$

Около 7200$

Автотесты на 1 устройство постоянно

290$

249$(199$)

249$(199$)

249$(199$)

250$

Около 800$

Автотесты на 4 устройства постоянно

290$

996$(796$)

996$(796$)

996$(796$)

1000$

Около 3200$

Редкий ручной прогон (1 час в месяц)

50$

49$(39$)

49$(39$)

49$(39$)

10.2$

4.5$

Редкий прогон автотестов (1 час в месяц)

290$

249$(199$)

249$(199$)

249$(199$)

10.2$

5$

Бесплатный период

21 день, полный доступ

30 минут всего (часто лимит 1 мин на устройство)

28 дней, но всего 60 минут на устройствах, сессии короткие, пул урезан

есть только разовая короткая сессия

разово 1 000 

минут на устройствах

30 мин/мес бесплатно на урезанной ферме

Из таблицы видно: для редких коротких прогонов дешевле взять AWS или Firebase. Если тесты нужны постоянно — MWS SunQ или западные конкуренты выходят примерно в одну цену. А вот автотесты на четырех устройствах на SunQ стоят заметно дешевле. Для команды из пяти ручных тестировщиков выгоднее BrowserStack.

Но важна не только цена. У западных сервисов фермы на тысячи устройств, у SunQ пока меньше сотни. Но SunQ работает на российской инфраструктуре, и на телефонах есть реальные номера, что в текущих условиях важно.

Впечатления от MWS SunQ: плюсы и минусы

Итак, какие плюсы у MWS SunQ?

  • Российская инфраструктура реальных устройств — единственная в РФ ферма (кроме приватных корпоративных). В текущих условиях — самый жирный плюс.

  • Бесплатный период 21 день с полным доступом — значительно больше, чем у аналогов.

  • На телефонах есть реальные номера — удобно для тестирования звонков, СМС, авторизаций.

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

  • Appium API для автотестов на 4 устройствах заметно дешевле, чем у зарубежных аналогов.

Но также есть и минусы.

  • Бета-версия — есть баги, пока нет автоочистки после сессий. В каталоге значительно меньше заявленных 300+ устройств (надеюсь, исправят).

  • Общий пул телефонов — нужные модели могут оказаться заняты (пока редко, я только однажды видел занятыми два устройства).

  • Билд ставится только через загрузку .apk/.ipa. Нет интеграции с Google Play и TestFlight (хотя можно установить прямо из маркета).

  • Лимиты сессии: 2 часа, 30 минут простоя, 50‑100 Мбит/с — для большинства сценариев достаточно.

  • Нельзя использовать нативные тесты (XCTest/Espresso) напрямую — только через Appium.

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

На сколько эта ферма устройств подходит под ваши задачи — решать вам.

Комментарии (0)