ФРЕЙМВОРК KASPRESSO. ПРИНЦИПЫ РАБОТЫ ADB SERVER Текст научной статьи по специальности «Философия, этика, религиоведение»
Аннотация научной статьи по философии, этике, религиоведению, автор научной работы — Мацюк Евгений Викторович
в статье рассматриваются принципы работы AdbServer в рамках фреймворка Kaspresso , предназначенного для написания автотестов под Android .
i Надоели баннеры? Вы всегда можете отключить рекламу.
Похожие темы научных работ по философии, этике, религиоведению , автор научной работы — Мацюк Евгений Викторович
KASPRESSO. ФРЕЙМВОРК ДЛЯ АВТОТЕСТИРОВАНИЯ
СРАВНЕНИЕ ИНСТРУМЕНТОВ ДЛЯ АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯ МОБИЛЬНЫХ ПРИЛОЖЕНИЙ НА ОС ANDROID
Realization of a TCP Syn Flood attack using Kali Linux
СРАВНИТЕЛЬНЫЙ АНАЛИЗ СРЕДСТВ ТЕСТИРОВАНИЯ МОБИЛЬНЫХ ПРИЛОЖЕНИЙ
ТЕХНОЛОГИЯ АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯ ANDROID-ПРИЛОЖЕНИЙ С ИСПОЛЬЗОВАНИЕМ ПРОТОКОЛА WEBDRIVER НА ПЛАТФОРМЕ.NET
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.
Текст научной работы на тему «ФРЕЙМВОРК KASPRESSO. ПРИНЦИПЫ РАБОТЫ ADB SERVER»
ФРЕЙМВОРК KASPRESSO. ПРИНЦИПЫ РАБОТЫ ADB SERVER
Мацюк Евгений Викторович — эксперт-разработчик, направление: Android, Google, г. Москва
Аннотация: в статье рассматриваются принципы работы AdbServer в рамках фреймворка Kaspresso, предназначенного для написания автотестов под Android.
Ключевые слова: Android, Kaspresso, ADB, AdbServer, Kotlin, Espresso, UI Automator.
В сравнении фреймворков автоматизации [1] плюсом Appium часто указывают возможность исполнения adb команд, в то время как Espresso и UI-automator обделены таким функционалом.
В Kaspresso была произведена попытка это исправить, в результате чего появился AdbServer.
В основе Kaspresso лежат Espresso и UI-automator, значит при переходе с Appium теряеся фича — взаимодействие с девайсом по adb.
Но почему вообще это может понадобиться при прохождении тестов? Помимо стандартных команд, таких как установка приложения, скачивание каких-либо файлов с телефона, а также установки системных настроек, adb умеет еще много всего. Например, в Google сделали такую команду — adb emu [2]. Она поднимает на эмуляторе telnet сервис, который позволяет управлять внутренним состоянием телефона и делать такие нестандартные вещи как:
— симуляция прикосновения к сканеру отпечатка пальца
— звонок на телефон
— и многие другие.
Это все является полной эмуляцией системных вызовов, нет необходимости в приложении пытаться замокать отсутствие интернета, система предоставляет то, как это произойдет на реальном устройстве.
Почему в Appium возможно было это сделать, а на Espresso нет?
Работа с Appium выглядит так:
Рис. 1. Схема работы Appium
1. На телефон устанавливается тестируемое приложение
2. Написанные нами тесты находятся на компьютере
3. Поднимается Selenium
4. Selenium поднимает Appium Server
5. Appium Server устанавливает на телефон Bootstrap
6. Общение с BootStrap происходит по adb
Можно заметить, что приложение просто находится на телефоне и с ним нет никакого прямого взаимодействия. Это говорит о том, что Appium тесты — blackbox.
Что происходит, когда мы пишем тесты на Espresso?
Рис. 2. Схема работы Espresso
1. На телефоне установлено приложение, которое мы собираемся тестировать
2. На телефон устанавливается тестовая арк, содержащая тесты которые мы написали
3. От компьютера по adb приходит команда Запустить тесты
4. Приложение и тестовая арк общаются друг с другом
В этой схеме Adb был потерян, компьютер после запуска тестов здесь не нужен.
Как можно возместить потерю?
Возникла идея, посылать из теста сигнал «Выполни Adb команду»
После исследования документации, было обнаружено, что на всех эмуляторах поднимается виртуальный роутер с рядом адресов, и один из них 10.0.2.2. Если перейти на эмуляторе на 10.0.2.2, он обратится к localhost вашего компьютера
Network Address Description
10.0.2.1 Router/gateway address
10.0.2.2 Special alias to your host ioopback interface (i.e., 127.0.0.1 on your development machine)
10.0.2.3 First DNS server
10.0.2.4/10.0.2.5/10.0.2.6 Optional second, third and fourth DNS server (if any)
10.0.2.15 The emulated device network/ethernet interface
127.0.0.1 The emulated device Ioopback interface
Рис. 3. Сетевые адреса Android Emulator Как только это было обнаружено, был реализован сервер на Flask
Рис. 4. Сервер на Flask
1. Приложение с телефона обращается по адресу http://10.0.2.2 с указанием команды в cmd параметре
2. Сервер обрабатывает запрос
3. С компьютера отправляется указанная в cmd команда
Написали первые тесты, команды попадали на компьютер, он их исполнял. До тех пор, пока в тест-кейсе не столкнулись со строчкой «Отключить интернет». Как только отключается интернет, пропадает работа с виртуальным роутером. Почему так происходит?
Вспомним, что Android внутри Linux, и когда у нас включены wi-fi и мобильная сеть, мы можем зайти в shell и спросить какие интерфейсы подняты. Соответственно помимо localhost у нас есть wifi [wlanO] и мобильные данные [radioO].
radioO Link encap:UNSPEC
inet addr:192.168.200.2 Beast:192.168.200.255 Hask:255. inet6 addr: fec0::cc71:78ff:fee9:49df/64 Scope: Site inet6 addr: fe80:: cc71:78ff :fee9:ij9df /64 Scope: Link inet6 addr: fecC::odd:ea97:5b58:e6f2/64 Scape: Site UP BROADCAST RUNNING MULTICAST MTU:150O Metric:l RX packets:80 errors:0 dropped:G overruns:Q frame:© TX packets:91 errors:0 dropped:0 overruns:© carrier:0 collisions:© txqueuelen:1000 RX bytes:35762 TX bvtes:11113
wlanG Link encap:UNSPEC
UP BROADCAST MULTICAST MTU:15O0 Metric:l RX packets:© errors:B dropped:© overruns:© frame:0 TX packets:© errors:0 dropped:© overruns:© carriers collisions:© txqueuelen:1000 RX bytes:0 TX bytes:©
lo Link encap:UNSPEC
inet addr:l27.0,0,1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope: Host UP LOOPBACK RUNNING MTU:65536 Metrie:l RX packets:© errors:© dropped:0 overruns:© frame:0 TX packets:© errors:© dropped:0 overruns:© carrier:0 collisions:0 txqueuelen:© RX bytes:0 TX bytes:0
23:42 — С6,30 OKT. в ✓ ф —
^^ AndroidWiti Android 100% v
Не decrowns (в .шш (Чжич прпма
Рис. 5. Интерфейсы Android Emulator при выключенном AirPlane Mode
Но как только мы нажимаем кнопку AirPlane Mode, все становится намного печальнее. У нас пропадают необходимые интерфейсы, и остаются лишь те, которые не позволяет работать с виртуальным роутером, установленным на эмуляторах
generic_x86:/ $ ifconfig lo Link encap:UNSPEC
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope: Host
UP LOOPBACK RUNNING MTU:65536 Metric:l
RX packets:522 errors:0 dropped:© overruns:© frame:0
TX packets:522 errors:© dropped:© overruns:© carrier:©
RX bytes:38036 TX bytes:38036
23:43 • Сб, 30 окт. е / О ~ ■О
WW Android 100% го
с Не беспокоить © Автоповорот (±) \ о
Рис. 6. Интерфейсы Android Emulator при включенном AirPlane Mode
Так была потеряна фича.
И вновь обратившись к документации, мы нашли такую вещь как port forwarding.
Работает она так:
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
1. На телефоне поднимаем сервер, как в этом примере на :7100
2. На компьютере выполняется команда adb forward tcp:6100 tcp:7100
3. Обращаемся на компьютере по адресу localhost на порт 6100 и попадаем на сервер, который установлен на мобильном устройстве
Важно отметить, что это работает при полном отсутствии интернета, так как порты пробрасываются поверх подключения, по которому подключен эмулятор. Например, если телефон подключен по USB, нам не важно какие интерфейсы будут подняты у телефона, это будет происходить по USB.
Также в противовес команде forward есть команда adb reverse, которая позволяет в телефоне из приложения сделать http запрос на localhost телефона, при этом попадая на самом деле на компьютер.
Однако у этой команды есть ограничение, она работает только с Android 5.0, что нас немного не устраивало, так как была необходимость тестировать телефоны с версией ОС 4.2.
Теперь, мы стали поднимать на компьютере клиент, а внутри тестовой апк у нас появилась такая сущность как сервер.
Вместо тысячи слов лучше сразу взглянуть на схему:
Рис. 7. Итоговая схема
Внимание! Схема непростая, поэтому мы постарались все досконально описать. Наберитесь терпения дочитать до конца, пожалуйста.
1. На телефоне выбираем порт. Так как со стороны девайса будет всегда одно соединение, то мы можем всегда ставить один и тот же порт. Пускай это будет :8500.
2. Со стороны десктопа соединений может быть множество, так как одновременно несколько девайсов могут быть к нему подключены. На каждое соединение создается уникальный незанятый порт из диапазона 6000.. 49000. В этом примере, для подключения двух девайсов, выберем порты :6100 и :48999.
3. На десктопе мы пробрасываем порты к каждому девайсу с помощью команд
adb -s devicel forward tcp:6100 tcp:8500
adb -s device2 forward tcp:48999 tcp:8500
4. На десктопе мы создаем сокетные клиенты по адресам localhost:6100 и localhost:48999. На всякий случай напомним, что сокетное соединение между клиентом и сервером происходит при условии наличия клиента и
сервера на одном адресе. То есть созданные клиенты будут ожидать появления сокетных серверов по обозначенным выше адресам (localhost:6100 и localhost:48999).
5. А теперь главный фокус. Мы пробросили порты :6100 и :48999 десктопа на :8500 девайсов. А это значит, что созданные сокетные клиенты на самом деле ждут сервера по адресу localhost:8500 девайсов!, а не по адресам localhost:6100 и localhost:48999 десктопа.
6. На каждом девайсе мы поднимаем сокетный сервер по адресу localhost:8500.
7. Происходит установка сокетного соединения на девайсе по адресу localhost:8500, где есть и клиент, и сервер. При этом помним, что физически сокетный клиент находится на десктопе (localhost:6100 и localhost:48999 на десктопе). Дальнейшее взаимодействие происходит по сокетному соединению. На девайсе нам может понадобится выполнение adb-команды, о чем мы сообщаем десктопу (передаем строку в канале), а десктоп уже физически исполняет данную команду с указанием девайса и отправляет по каналу ответ (строка со статусом).
Благодаря уведомлениям о выполнении команд в схему добавляется синхронность, так, например, при передаче больших файлов можно получить фидбек, когда команда будет выполнена.
Резюмируя, теперь можно использовать adb команды с условием того, что девайс подключен к компьютеру любым способом (с помощью WiFi, Bluetooth или USB).
[Устранение неполадок] Сигнал WiFi часто прерывается
Если WiFi-клиент может получить доступ к Интернету через оборудование провайдера (через Wi-Fi модема) , откройте веб-меню роутера ASUS, проверьте статус подключения к сети провайдера, чтобы увидеть, показан ли статус подключения роутера ASUS к оборудованию провайдера. Подробнее — в разделе часто задаваемых вопросов.
- [Карта сети] Описание состояния интернета в GUI роутера
- [Устранение неполадок] Ошибки при подключении к сети Интернет через роутер
Если WiFi-клиент не может получить доступ к Интернету через Wi-Fi модема (через оборудование провайдера),
(1). Обратитесь к своему интернет-провайдеру по поводу проблем с подключением модема к Интернету.
(2). Если проводные устройства-клиенты могут получить доступ к Интернету через модем (через оборудование провайдера), обратитесь к приведенным ниже шагам по устранению неполадок.
3. При использовании роутера для подключения к Интернету появляются проблемы частого отключения беспроводных устройств-клиентов от сети.
(Например, при использовании телефона, компьютера и т. д. для подключения Wi-Fi SSID роутера (2,4 ГГц или 5 ГГц), которые легко отключить от сети)
Вы можете обратиться к следующим шагам для простого устранения неполадок.
Введение
- Проверить версию прошивки
- Установите пропускную способность канала по умолчанию
- Переключиться на канал управления с меньшими помехами
- Отключите Smart Connect
- Отрегулируйте направление антенн роутера
- Отрегулируйте размещение роутера
- Вмешательство в окружающую среду
- Обновите драйвер или прошивку беспроводного устройства.
- Восстановите настройки роутера по умолчанию
Пожалуйста, убедитесь, что прошивка роутера обновлена.

Перейдите в «Беспроводная сеть» > «Основные» > «Диапазон» (выберите 2,4 ГГц или 5 ГГц) > «Пропускная способность канала».
а). Диапазон 2,4 ГГц

б). Диапазон 5 ГГц или 5 ГГц-1

в). Диапазон 5 ГГц-2

Перейдите в «Беспроводная сеть» > «Основные» > «Диапазон» (выберите 2,4 ГГц или 5 ГГц) > «Канал управления».
а). Диапазон 2,4 ГГц

Выберите другой канал управления и нажмите «Применить» для сохранения.

б). Диапазон 5 ГГц

Выберите другой канал управления и нажмите «Применить» для сохранения.

в). Диапазон 5 ГГц-2

Выберите другой канал управления и нажмите «Применить» для сохранения.


Измените угол направления антенн (например, 45 градусов, 90 градусов и т. д.).
Ниже мы взяли RT-AC88U для примера (для других моделей пожалуйста, обратитесь к руководству пользователя)
Чтобы обеспечить наилучший приём беспроводного сигнала, установите четыре съёмные антенны, как показано в примере ниже.
[Примечание]: руководства пользователя можно найти в Центре загрузок ASUS.

>> Wi-Fi работает на диапазонах 2,4 ГГц и 5 ГГц, расстояние передачи сигнала 2,4 ГГц больше, чем 5 ГГц, но скорость передачи медленнее, чем на 5 ГГц.
На 5 ГГц расстояние передачи сигнала короче, но скорость может быть выше.
Если ваше клиентское устройство часто отключается от сети роутера, сначала проверьте, к какой сети подключено ваше устройство — 2,4 ГГц или 5 ГГц.
Проверьте расстояние между беспроводным устройством и роутером, когда сеть Wi-Fi отключена.
Помехи: микроволновые печи, холодильники, беспроводные телефоны, блоки питания и так далее. Некоторая бытовая техника тоже создаёт помехи беспроводным каналам.
Барьеры: железные шкафы, железные двери, цементные стены, закрытые шкафы, поставленные на землю, за диваном. Некоторые строительные материалы с высокой плотностью также могут влиять на проникновение сигнала Wi-Fi, например гипс, доски, колючая проволока и т. д.
>> Рекомендуется размещать роутер по возможности в центре помещения, на открытой площадке, где меньше мебели, где нет стены, или на деревянном шкафу, на столе.
- Беспроводное устройство-клиент(пример): ноутбук, смартфон, USB-адаптер Wi-Fi, КОНСОЛЬ.
Примечание. Сигнал Wi-Fi устройства Mac (Apple) часто прерывается после роуминга между роутером AiMesh и узлами, см. этот FAQ .
На следующих рисунках в качестве примера взят RT-AC68U.
(различные модели могут иметь небольшие различия, пожалуйста, подтвердите соответствующую информацию в руководстве пользователя, если у вас есть какие-либо сомнения)
(1) Нажмите и удерживайте кнопку RESET примерно 5–10 секунд, пока светодиодный индикатор питания роутера не начнёт мигать, отпустите кнопку.
Все светодиодные индикаторы роутера должны будут погаснуть (это нормальное явление), это будет означать что запущен автоматический процесс перезагрузки.
Ожидайте, пока светодиодный индикатор питания и светодиодные индикаторы Wi-Fi снова не загорятся, заново откройте веб-меню роутера.


Примечание: после сброса настроек роутера все его настройки «обнулятся»: их потребуется ввести заново.
(2) Используйте Мастер быстрой настройки (QIS) для новой настройки роутера.
Подробнее о мастере быстрой настройки (QIS):
- [Беспроводное устройство] Как настроить ASUS Wi-Fi роутер через приложение ASUS Router?
- [Беспроводное устройство] Как использовать QIS (Quick Internet Setup) для настройки роутера? (Web GUI)

Если результат не изменится, сделайте сброс настроек роутера (Hard Factory Reset).
Как получить (Утилиту/Прошивку)?
Последние версии драйверов, программного обеспечения, прошивки и руководств пользователя можно скачать в Центре загрузки ASUS .
Если Вам нужна дополнительная информация о Центре загрузок ASUS, перейдите по этой ссылке .
Не удается подключить телефон HUAWEI к компьютеру с помощью USB-кабеля
Если вам не удается подключить телефон к компьютеру с помощью USB-кабеля, выполните следующие действия для устранения проблемы:
1. Используйте другой USB-кабель
Если телефон не заряжается после подключения к компьютеру, возможно, кабель поврежден. Попробуйте использовать другой кабель для передачи данных с рекомендуемыми характеристиками.
Кабели передачи данных, не входящие в комплект поставки вашего устройства (например, кабель для зарядки смарт-часов HUAWEI), могут поддерживать только зарядку и не поддерживать передачу данных.
2. Измените режим USB-подключения
Подключите телефон к компьютеру, выберите Переданные файлы после появления диалогового окна USB-подключение . Вы также можете провести по панели уведомлений, выбрать опцию Нажмите, чтобы посмотреть , затем выбрать Переданные файлы . Теперь вы можете просматривать файлы на компьютере.
- Если диалоговое окно USB-подключение не появляется на вашем телефоне, откройте Настройки , перейдите в раздел О телефоне и нажмите на Номер сборки семь раз подряд, пока не появится сообщение « Вы стали разработчиком! ». Перейдите в раздел Настройки > Система и обновления > Для разработчиков , включите функцию Всегда спрашивать при USB-подключении и повторите попытку.
- Режим Для разработчиков может быть включен только в режиме владельца и не может быть включен в пространстве PrivateSpace , при добавлении хотя бы одного аккаунта, не являющегося аккаунтом владельца, в раздел Пользователи или при включении режима Цифровой баланс для детей.
3. Проверьте USB-драйвер, установленный на компьютере
Подробную информацию см. в разделе «Не удается подключиться к HiSuite, или подключение нестабильное», перейдите к шагу 3, чтобы проверить, установлен ли USB-драйвер и работает ли он корректно.
Вы можете установить HiSuite, если эта программа не установлена на вашем компьютере.
4. Если проблема не решена
- Используйте другой USB-порт или другой компьютер, чтобы проверить соединение. Если соединение удается установить, USB-порт на вашем компьютере, возможно, поврежден или несовместим.
- Если проблема не решена, обратитесь на горячую линию службы поддержки клиентов Huawei. Мы сделаем все возможное, чтобы помочь вам.
Как имитировать медленное подключение к Интернету на iOS и Android [QA гайд]
-p-500.png)
В этой статье покажем, как «испортить» интернет на тестовом устройстве без возни и проблем.
iOS
Для начала расскажем о тестировании iOS-приложений с использованием стандартной утилиты Network Link Conditioner. Она дает тестеру возможность настраивать интернет-соединение так, как ему необходимо.
Чтобы включить эту функцию на iPhone, вам также понадобится устройство на MacOS:
2) Открыть Xcode на Mac
3) Подключить iPhone к Mac
4) Разрешить доступ Mac к iPhone
![🐌 Как имитировать медленное подключение к Интернету на iOS и Android [QA гайд], image #1](https://assets-global.website-files.com/647d86e4fc32c113a4d42852/64bed72a26318281906c1a9b_e2wDq6h4fMY.jpeg)
5) Открыть настройки на iPhone
6) Проскроллить вниз
7) Нажать «Developer»
![🐌 Как имитировать медленное подключение к Интернету на iOS и Android [QA гайд], image #2](https://assets-global.website-files.com/647d86e4fc32c113a4d42852/64bed72a42664613220096d2_ma3mzCewSsE.jpeg)
8) Нажать «Network Link Conditioner»
![🐌 Как имитировать медленное подключение к Интернету на iOS и Android [QA гайд], image #3](https://assets-global.website-files.com/647d86e4fc32c113a4d42852/64bed72a3fcefb14d2ee169b_QS1mpJcJ5Kg.jpeg)
9) Выбрать пресет сети или создать свой
10) Включить тоггл «Enable»
![🐌 Как имитировать медленное подключение к Интернету на iOS и Android [QA гайд], image #4](https://assets-global.website-files.com/647d86e4fc32c113a4d42852/64bed72bbca1394e1ecfa5d1_hZXi8xwYhA0.jpeg)
iOS дает нам возможность выбрать один из предустановленных пресетов качества соединения или же создать свой собственный пресет.
Для собственного пресета доступны следующие настройки:
![🐌 Как имитировать медленное подключение к Интернету на iOS и Android [QA гайд], image #5](https://assets-global.website-files.com/647d86e4fc32c113a4d42852/64bed72cf14d28788f28c4b6_bAgFCACM6k4.jpeg)
Здесь мы видим, что Apple позаботился о возможности тестирования приложений при разных уровнях качества соединения и дал нам практически все нужные настройки.
Познакомившись с Network Link Conditioner на iOS, мы были уверены, что подобная фича будет и на Android. О Боги, как мы ошибались.
Android
Эмулировать медленное\нестабильное соединение на реальном Android с помощью стандартных средств оказалось невозможно. Следовательно, у меня было 2 пути: эмулировать медленное соединение с помощью устанавливаемых из Google Play приложений, или с помощью особой настройки точки доступа к интернету.
C приложениями у меня не сложилось ☹ Все приложения, которые дают нам эту функцию, требуют Root доступа, а это, в свою очередь, разрушает концепцию тестирования в реальных условиях.
Поэтому, отложив на крайний случай Root доступ, я решила рассмотреть поподробнее путь №2 – настройку точки доступа.
В студенчестве, когда мобильный интернет трафик быстро кончался (а нужно было почитать, посмотреть что-то на паре и т.д.), мы часто использовали iPhone как точку доступа. В голову пришла идея — совместить студенческий опыт и недавно полученные знания.
Использование Network Link Conditioner и точки доступа из устройств на MacOS или iOS не требует совершенно никаких дополнительных знаний и отличается простотой настройки. Это именно то, что нужно, если мы хотим сэкономить своё время.
Итак, для эмуляции плохого соединения на Android нужен сам девайс на Android и iPhone с включенным Developer Tools.
- Делаем iPhone точкой доступа (Настройки > Режим Модема)
- Настраиваем соединение с помощью Network Link conditioner
- Подключаемся Android’ом к точке доступа
- Готово. Вы восхитительны 🙂
Использование облачных ферм
Сейчас для тестирования приложения на большом ассортименте новейших и не очень устройств совсем не обязательно иметь собственную ферму мобильных телефонов. Это к тому же ещё и неудобно — многие работают удалённо. Мы в Fora Soft всё чаще используем услуги облачных ферм устройств.
В некоторых таких фермах, например, Browserstack или LambdaTest, есть опция троттлинга сети — замедления соединения — при тестировании на мобильных устройствах.

Для использования троттлинга может понадобиться платная подписка. Например, в ферме Browserstack индивидуальная подписка для тестирования приложений на реальных девайсах стоит от $29 в месяц.
Тестирование на Android-эмуляторе
Эмулятор — софт для ПК, который копирует другую операционную систему. Эмулятор Android имитирует поведение смартфона и позволяет тестировать мобильные приложения, даже если реального устройства нет под рукой.
Тестирование на эмуляторах не сравнится с тестированием на реальных устройствах, но на этапе начальной разработки этого достаточно.
На эмуляторах Android Studio можно задать ограничение по типу мобильной связи (LTE, EDGE и т.д.). У каждого типа связи — свои ограничения по скорости соединения:
gsm — GSM/CSD (up: 14.4, down: 14.4)
hscsd — HSCSD (up: 14.4, down: 57.6)
grps — GRPS (up: 28.8, down: 57.6)
edge — EDGE/EGPRS (up: 473.6, down: 473.6)
umts — UMTS/3G (up: 384.0, down: 384.0)
hsdpa — HSDPA(up: 5760.0, down: 13,980.0)
lte — LTE (up: 58,000, down: 173,000)
evdo — EVDO (up: 75,000, down: 280,000)
full — No limit, the default (up: 0.0, down: 0.0)
Как протестировать приложение на Android эмуляторе с ограниченным интернет-соединением?
- Установите Android Studio
- Создайте эмулятор с помощью Android Virtual Device Manager
- В настройках эмулятора при его создании или редактировании выберите тип сети:
- Нажмите Show advanced settings

- В разделе Network выберите Speed

- Запустите эмулятор
- Запустите приложение на эмуляторе
- Выключите Wi-Fi на эмуляторе, чтобы он использовал настройки именно мобильного соединения
Изменение типа сети в настройках телефона
Выбрать конкретный тип мобильной связи можно и на реальном Android или iOS устройстве. Для этого помимо девайса понадобится действующая SIM-карта с оплаченным интернетом.
Как переключиться на другую сеть на Android-устройстве:
- Откройте настройки / Settings
- Перейдите в “Сеть и интернет” / Network & Internet
- Перейдите в “Интернет” / Internet
- Откройте “Настройки SIM карты”
- Нажмите “Предпочтительный тип сети” / Preferred network type
Как переключиться на другую сеть на Android
Актуально для Android 12. Названия и расположение разделов могут отличаться в зависимости от версии ОС и модели девайса.
Как переключиться на другую сеть на iOS-устройстве:
- Откройте настройки / Settings
- Перейдите в Сотовая связь / Mobile Data
- Перейдите в Параметры / Mobile Data Options
- Нажмите Голос и Данные / Voice & Data
Как переключиться на другую сеть на iOS
Актуально для iOS 15.
Симуляция медленного соединения в инструменте для дебаггинга Charles
Если облачные фермы — это дорого, запуск эмулятора — это непросто, а SIM-карты с оплаченным интернетом под рукой нет, можно воспользоваться опцией троттлинга сети в приложении Charles.
Вообще вы можете использовать Charles, чтобы отслеживать трафик мобильных приложений во время функционального тестирования или дебаггинга. Но этот же инструмент можно использовать для тестирования при медленном соединении.
Как сымитировать медленное соединение с помощью Charles

- Настройте хост-машину с установленным Charles в качестве прокси для девайса / приложения, которое нужно протестировать. Подробнее об этом в документации Charles
- В Charles перейдите в Proxy > Throttle settings
- Кликните Enable Throttling
- Выберите пресет ограничения скорости или настройте его самостоятельно
- Сохраните настройки
- Кликните Proxy > Start throttling
Ограничение скорости в настройках роутера
Решить проблему можно и радикально — просто ограничить скорость соединения прямо на роутере. Такой способ подойдёт, если вы тестируете дома на реальном девайсе и у вас есть доступ в админ-панель своего роутера. Также стоит иметь ввиду, что наличие такой опции зависит от самого роутера.
Как ограничить скорость интернет-соединения на роутере:

- Зайдите в настройки роутера. Для этого введите в адресной строке браузера специальный URL или IP роутера в домашней сети (192.168.1.1 или 192.168.0.1)
- Введите логин и пароль. Они, а также URL для входа, могут быть написаны на самом роутере (обычно и логин, и пароль это слово “admin”)
- Найдите в панели Bandwidth control / Контроль пропускной способности
Не забудьте снять ограничение по окончанию тестирования 🙂
Есть множество способов протестировать приложение в условиях ограниченной скорости интернета. Самым удобным, на наш взгляд, все равно остается Network Link Conditioner. Но вполне можно обойтись и без него.
Технологии

Поделиться
Ссылка скопирована!
Комментарии

Спасибо за ваш комментарий
Обновите страницу, чтобы увидеть его
Cообщение не отправлено, что-то пошло не так при отправке формы. Попробуйте еще раз.
kak-razrabotchiku-ocenit-trudozatraty
Суперполезная статья, рекомендуемые книги интересные
rezhim-kartinka-v-kartinke-na-ios-realizaciya-i-osobennosti
rezhim-kartinka-v-kartinke-na-ios-realizaciya-i-osobennosti
PiP можно сделать для Android?
Fora Soft Team
Да, можно! Есть статья про это вот тут https://blog.fora-soft.ru/post/picture-in-picture-na-android
kak-my-gotovim-razrabotchikov-k-rabote-nad-proektami-nastavnichestvo-v-fora-soft
У менторов тоже есть менторы?
kak-my-gotovim-razrabotchikov-k-rabote-nad-proektami-nastavnichestvo-v-fora-soft
Менторство это круто!
chto-takoe-nefunkcionalnye-trebovaniya
Отличная статья!
Fora Soft Team
chto-mogut-delat-neironnye-seti-v-android-v-2022
Fora Soft Team
Рады были помочь!
kak-nalozhit-effekt-na-video-v-ios
Спасибо за статью! Очень полезно
Похожие статьи

Технологии
Разработка
Возможно ли добиться задержки менее секунды в видеобродкасте? А если стрим ещё и идёт на тысячную аудиторию? Да. Как? Ответим на этот вопрос на примере проекта Worldcast Live. Мы делали его на WebRTC. WCL транслирует концерты в HD-качестве на аудиторию в сотни и тысячи человек.
Зачем понижать задержку в видеотрансляции в прямом эфире?
Задержка (latency) менее секунды в видеоконференции — норма, иначе общаться невозможно. Для односторонней же трансляции на большую аудиторию норма — и 2, и даже 20 секунд. Часто это приемлемо: задержка телевизионного сигнала — тоже около 6 секунд.
Но бывают случаи, когда в бродкасте нужна latency менее секунды, как в видеочате:
Вряд ли пользователь будет доволен, когда все соседи заорут: “Гол!”, а на его трансляции мяч где-то на центре поля. А если он ещё и ставки вживую делает?
В век пандемии в онлайн перешло не только общение между друзьями, но и интервью с известными личностями. Сложите задержки интервьюера и интервьюируемого, добавьте миллисекунды, потраченные по дороге к пользователю. Чем больше результат — тем хуже опыт для всех сторон.
Плейер WCL встраивается в разные сайты. Трансляция концерта идет на них одновременно в прямом эфире. Если вы смотрите с другом с разных сайтов, задержка в 20 секунд подпортит впечатление от просмотра. Сегодня организаторы концертов пытаются минимизировать задержку до конечного пользователя. Хоть ему и не так важно, услышит он гитарный рифф моментально или через 2 секунды, общий тренд на уменьшение задержки есть. Чем быстрее, тем лучше 🙂
А ещё.
Примеры выше комбинируются. В Worldcast Live зрители и исполнители на концерте общаются по видеочату. Значит, и latency должна быть как у видеочата: нужно минимальное время между вопросом и ответом.
Как добиться задержки менее секунды в бродкасте?
Используйте WebRTC
Стандартный пакет WebRTC предлагает среднюю задержку в 500 миллисекунд (полсекунды). На этом можно было бы и закончить: просто сделать видеочат, чтобы все друг к другу подключались — не сложно. Но сложно сделать так, чтобы это все стабильно работало на тысячную аудиторию и добавить кастомизацию потоков для повышения их качества.
Базовый WebRTC — это не HD стриминг. И качество аудио достаточно для разговора, но недостаточно для трансляции музыки. Для сокращения задержки WebRTC может ухудшать качество, пропускать небольшие куски видео и аудио. Чтобы этого избежать, придётся залезть под капот WebRTC, что мы и сделали.
Настройте WebRTC
Для того, чтобы уменьшение задержки не шло вопреки качеству и опыту конечного пользователя, требуется дополнительная разработка. Что делали мы для WCL, которая транслирует HD-концерты на аудиторию в тысячи человек:
Стандартное аудио в WebRTC — моно, это 1 канал. Стерео — 2 канала. На WCL 5 аудиоканалов.
Настройки WebRTC по умолчанию ограничивают скорость передачи видео до 500 кб/с. Для активных действий на экране этого мало: если быстро сменяются яркие цвета и есть ограничение в 500 кб/с — качество видео будет понижаться, чтобы пролезть в ограниченный канал, полезут пиксели. Так себе опыт просмотра концерта. Поэтому мы подняли битрейт (пропускную способность) до 1,5 Гб, чтобы передавать HD-видео
Таким образом мы подняли качество аудио и видеопотоков, низкие и высокие частоты, которые не теряются при кодировании. Что конкретно мы сделали, раскрывать здесь не будем, но если интересно — напишите нам!
Масштабируйте Kurento
Kurento Media Server — WebRTC-сервер с открытым исходным кодом. Для видеостриминга, настройте Master Kurento, через который идёт трансляция. К одному Master Kurento можно подключить до 500 человек, откуда они напрямую забирают видеопоток. Если зрителей больше, в игру вступает Edge Kurento — ответвление от Master, к которому подключаются другие пользователи. Чем больше зрителей на стриме, тем больше Edge Kurento нужно задействовать. Всё вместе это образует схему типа дерева.

В каких случаях оставить задержку больше секунды?
В условиях ограниченного бюджета. WebRTC дороже HLS, если вам нужно масштабирование. Сервер WebRTC на WCL стоит $0,17 в час, что выливается в $122,40 в месяц, если взять 30 дней.
HLS, однако, стоит $0,23 в час, и его, в отличие от WebRTC, можно включать и выключать, избавляясь от необходимости платить за часы простоя. Если взять, что у нас 3 часовых концерта в неделю, то за 12 концертов в месяц мы отдадим чуть меньше, чем $0,28. Разница заметна 🙂 Учтите, что провайдеров серверов много, и цены везде отличаются, но на примере нашего проекта масштаб понятен.
Первая стабильная версия оптимальной задержки для WCL заняла 3,5 недели работы. Если необходимости в latency менее 1 секунды нет — у вас не интервью во время концерта — стоит ли тратиться?
А если вкратце?
Задержка не более секунды в видеобродкасте необходима, если идет общение между участниками или просмотр мероприятия, где что-то стремительно меняется. C WebRTC это возможно даже на тысячи человек, если с технологией поработать.
Если ваше приложение ориентировано на что-то из этого — обязательно приглядитесь к WebRTC. Ну и свяжитесь с нами — поможем.

Вопросы клиентов
Технологии
К нам часто обращаются за разработкой текстовых чатов. Одни хотят мессенджер, где чат — основная или единственная функция. Другие — добавить чат в проект для другой цели, например, телемедицины. В этой статье мы рассмотрим наиболее популярные варианты технологий для чата.
Все решения для создания чатов можно разделить на 2 типа:
1) Готовые платформы для чатов: например, Firechat, SendBird.
Предоставляют готовый функционал для основных опций чата. От разработчика требуется минимум усилий и времени, чтобы внедрить чат в приложение или сайт. Но поведение функционала жестко задано создателем платформы, и возможности кастомизации ограничены.
2) Технологии для обмена данными между клиентом и сервером: например, Firebase Сloud Messaging, Node.js + Socket.io.
Позволяют построить на своей основе очень гибкое решение для чата с любыми желаемыми опциями и поведением. Требуют времени на внедрение, но предоставляют неограниченные возможности кастомизации.
Все 4 рассмотренных в статье варианта кросс-платформенны: поддерживают веб, iOS, Android.
Firebase Cloud Messaging
Firebase Cloud Messaging — это платформа для обмена информацией между мобильным приложением и сервером. Широко используется для рассылки уведомлений на устройства. На ее основе можно построить чат.
- Бесплатный до 100 пользователей одновременно
Для продуктов, которыми пользуются менее 100 активных юзеров одновременно, использование платформы бесплатно - Продукт компании Google
Является частью платформы Firebase, принадлежащей Google. Можно ожидать стабильной работы без ошибок при правильном использовании. - Экономия времени и денег на разработку
Хорошая подробная документация и высокая популярность. Значит, высока вероятность, что разработчик быстро найдет ответ на любой вопрос. Поэтому он потратит на разработку меньше времени, по сравнению с менее популярной технологией. И разработка обойдется дешевле, если платить за время. - Можно не покупать сервер
Простой чат можно сделать, не имея собственного сервера. То есть за сервер отдельно платить не нужно. Все будет работать через сервер Firebase. - Автоматическое масштабирование
При использовании базы данных Firestore сервера будут создаваться при наплыве пользователей и ликвидироваться, когда они не нужны. Вы заплатите за сервер значительно меньше, чем если бы покупали сервера на все время. Если используете Node.js и socket.io — масштабирование придется разрабатывать отдельно. - Можно искать информацию в чате без интернета
Данные по умолчанию кэшируются и доступны в оффлайне.
-
Сложные поисковые запросы реализовывать долго, а некоторые невозможно
Например, запросы наподобие такого: “найти все сообщения с текстом “Привет”, отправленные юзеру в прошлом году от тех юзеров, имя которых начинается с буквы “А””.
Дело в том, что используя Firebase Cloud Messaging, вы ограничены в выборе базы данных: или Firebase Realtime Database, или Firestore.
Firebase Realtime Database — NoSQL база данных, в которой данные хранятся в виде JSON. Это имеет ряд плюсов по сравнению с традиционными SQL базами данных, но возможности для создания требуемого поискового запроса ограничены разработчиками — для сохранения производительности.
Для Firestore — максимум 1 млн одновременных соединений.
- Платный от 100 одновременных пользователей
Если приложением/сайтом в один и тот же момент пользуются более 100 человек — необходимо использовать платный тариф.
При использовании Firestore стоимость использования определяется в основном операциями чтения/записи в базу данных. И чем больше количество данных в базе — тем выше стоимость. Например, по оценке Firestore для небольшого приложения (5000 активных пользователей в день, 50 000 установок) стоимость использования Firestore составит $12.14 в месяц. Для большого приложения (1 млн активных пользователей ежедневно, 10 млн установок) стоимость составит $2951.52 в месяц. Есть пределы, в рамках которых использование Firestore бесплатно.
При использовании Firebase Realtime Database стоимость определяется объемом данных, хранимых в базе, и скачиваемых из нее — $5 в месяц за каждый ГБ, хранящийся в базе, и $1 в месяц за каждый скачиваемый ГБ.
Таким образом, для приложения, которое выполняет много операций чтения/записи в базу, будет дешевле использовать Firebase Realtime Database, а не Firestore. Наиболее выгодным вариантом может оказаться использовать для одних данных Firestore, а для других — Firebase Realtime Database. Например, для типичного E-commerce приложения операции чтения из каталога товаров будут выполняться при каждом открытии приложения, и число операций будет быстро расти с числом юзеров. В то время как размер каталога скорее всего не будет зависеть от числа юзеров. Для такого приложения самым выгодным вариантом будет хранить данные для каталога в Firebase Realtime Database (чтобы не платить за множество операций чтения), а данные юзеров хранить в Firestore (поскольку хранение 1 ГБ в нем стоит дешевле) (источник).
Использование самой платформы Firebase Cloud Messaging бесплатно, то есть платить нужно только за использование базы данных, хостинг, аутентификацию.
- Медленно работает при поиске в оффлайн
Для Firestore: если количество документов в базе исчисляется сотнями, поиск в оффлайне (по закэшированным документам) может быть медленным и ухудшить UX. Например, если в чате сотня каналов, и надо найти нужный без доступа к интернету — поиск будет работать заметно медленно. - От разработчика требуется опыт работы с NoSQL, чтобы построить удобную и эффективную структуру базы данных
Лимит для Firestore: 1 операция записи в секунду для 1 документа. Документ — структурная составляющая базы данных Firestore. База данных Firestore состоит из документов, которые организованы в коллекции. Документ — это фактически набор пар “ключ-значение”. На практике это ограничение гибкое: если один раз сделать 10 операций записи одновременно, то Firestore корректно их обработает. Но если постоянно в течение длительного времени отправлять тысячи запросов на запись в базу с частотой более 1 в секунду, то Firestore вернет ошибки для некоторых из этих запросов.
Firechat
Firechat — фреймворк для создания чатов, созданный командой Firebase на основе Firebase (Firechat использует Firebase для авторизации, синхронизации, хранения данных). Предоставляет API для чата, позволяющее реализовать аутентификацию юзеров, пересылку сообщений, изображений и файлов, создание групповых чатов, рассылку приглашений. Официальный сайт — здесь, код проекта — тут.
- Экономия времени и денег на разработку
Готовое API для основных функций чата позволяет не писать реализацию этих функций самостоятельно. - Те же плюсы, что у Firebase Cloud Messaging
- Получится сделать не все функции
Используя готовое API для функций чата, можно реализовать только тот функционал, который оно предусматривает. Например, не поддерживается отображение непрочитанных сообщений, нет опции удаления сообщений, максимум 100 юзеров в группе чата. Полный список функций отыскать непросто, но можно сложить впечатление о них по набору методов API тут. - Те же минусы, что и у Firebase Cloud Messaging с Firebase Realtime Database
В Firechat из коробки используется только Firebase Realtime Database. Выбора базы данных, как в Firebase Cloud Messaging — Firebase Realtime Database или Firestore — нет.
SendBird
SendBird — готовая платформа для чатов. Предоставляет множество готовых фич вплоть до индикации количества непрочитанных сообщений, блокировки юзеров и панели админа.
- Много функций
Множество фич уже реализовано и работают “из коробки”: обмен сообщениями и файлами, приглашения, блокировка юзеров, индикация печатания, редактирование сообщений, автоматический перевод, панель админа, групповые чаты до 100 юзеров. - Есть готовый UI с ограниченными возможностями кастомизации
Не обязательно разрабатывать интерфейс и его дизайн. Из коробки есть стандартные варианты интерфейса — можно использовать как есть. Поверх стандартного интерфейса можно наложить и свой дизайн, изменив цвет и форму компонентов чата. Схема добавления SendBird может быть примерно такой: добавляем в свой продукт SendBird с дефолтными настройками, и получаем чат c дизайном по умолчанию, а после этого при необходимости кастомизируем те компоненты чата, которые требуется. - Автоматически масштабируется
Вам не придется беспокоиться о ситуации, когда пользователей стало слишком много, и ваш сервер не успевает справляться с запросами. Новые сервера будут создаваться сами. Может поддерживать более 1 млн юзеров, использующих чат одновременно. Использует AWS.
- Не все функции можно реализовать
Структура чата и поведение функционала строго заданы. Юзер логинится в аккаунт и получает доступ к списку каналов. Он может выбрать имеющийся канал или создать новый. Каналы бывают двух видов: публичные (для всех юзеров) и приватные (для ограниченного круга юзеров). Через каждый канал юзер может отправлять и получать сообщения.
Это стандартная для большинства чатов структура, но если для вашего продукта требуется что-то более необычное, реализовать это через SendBird будет проблематично. Какие-то функции будет невозможно реализовать в принципе, какие-то могут занять больше времени, чем если бы их разрабатывали с нуля — например, на Node.js и socket.io. Например, треды для ответов на сообщения канала, как в Slack, создать не удастся. - Не все доступные функции можно реализовать как хочется
Возможности кастомизации SendBird шире, чем может показаться на первый взгляд (хоть и скрыты в глубинах документации). Но есть заметные ограничения. Например, SendBird позволяет хранить дополнительную информацию о каждом юзере, но не более 5 параметров. Это, к примеру, имя, фамилия, город, пол, вес, цвет глаз… То есть для чатов знакомств это неудобно — чаще всего им надо хранить гораздо больше информации. В таком случае хранить и синхронизировать эту информацию придется без SendBird. - Не так популярен, как решения на Firebase и Socket.io
Популярность — довольно важная метрика при выборе фреймворка. Чем популярнее фреймворк, чем больше сообщество разработчиков, использующих его — тем проще и быстрее новые разработчики могут получить необходимые ресурсы, поддержку, ответы на вопросы для реализации тех или иных опций. При прочих равных, чем популярнее технология, тем быстрее программисты разработают ваш продукт. И тем дешевле, если вы платите за время работы. - Цена
— зависит от числа юзеров. Базовый пакет стоит $400 в месяц для 5000 активных юзеров в месяц. При 100 000 активных юзеров в месяц цена составит уже $5000 в месяц. Или $7600, если захотите перевод сообщений на другие языки и “продвинутую модерацию”. Есть бесплатный пробный период в 30 дней. Для продуктов с более 100 000 активных пользователей в месяц цена рассчитывается индивидуально.
Node.js + Socket.io
Серверная платформа Node.js вместе с библиотекой для обмена данными в реальном времени Socket.io позволяет построить чат с безграничными возможностями кастомизации.
- Позволяет реализовать любой функционал
У разработчика есть полный контроль над всеми компонентами: интерфейс, логика, данные и эндпоинты сервера могут быть любыми, какими требуется. Например, это позволяет организовать треды для ответа на отдельные сообщения, что нельзя сделать в SendBird. Можно ввести удаление сообщений, которое не реализовано в Firechat. - Масштабируется
Можно реализовать автоматическое масштабирование в зависимости от нагрузки — как на AWS, так и на других готовых решениях вроде Oracle. Но масштабирование — не “из коробки”, его нужно разрабатывать программисту. - Можно выбрать тот вид базы данных, который наилучшим образом подходит именно вашему продукту
Например, если в будущем продукте предполагается реализовать много сложных поисковых запросов, можно выбрать SQL базу данных (а не использовать Firestore или Firebase Realtime Database, в которых такие запросы не поддерживаются). - Чат быстро работает
Сообщения идут между сервером и клиентом напрямую, что обеспечивает высокую скорость работы. А при использовании Firebase Cloud Messaging сообщение идет с вашего сервера на сервер Firebase, и через него на девайс. Но, надо признать, даже если будет задержка в полсекунды — для текстового чата это несущественно. Скорее всего, пользователь не заметит разницы в скорости. - Бесплатно
Опенсорсное и бесплатное решение — вам не придется платить ежемесячно за использование технологии.
Стоит иметь в виду, что нужно будет платить за аренду сервера, где будет установлен ваш продукт. Но стоимость аренды сервера как правило заметно ниже, чем плата за использование Firebase Cloud Messaging или Firechat.
Как спрогнозировать стоимость серверов — обсудим в отдельной статье.
- Требует больше времени и денег на реализацию
Каждую функцию программист разрабатывает сам с нуля. - Не каждый сможет разработать
Нужно подобрать квалифицированного программиста с опытом разработки чатов на Node.js и Socket.io.
Суммируя
Готовые платформы для чатов дадут быстрый результат, потому что функции доступны “из коробки”, уже готовы. Но вы ограничены теми функциями, что сделали разработчики этой готовой платформы.
На Node.js и socket.io можно сделать какой угодно чат, но каждую функцию программист будет разрабатывать с нуля. Это занимает время и стоит денег.
Что выбрать?
Выбирая решение для чата, в первую очередь стоит принять во внимание, какое из решений лучше всего подходит именно вашему продукту и компании.
- Если от чата требуется минимальный базовый функционал, нет высоких требований к нему, и не ожидается много одновременных пользователей, то Firechat или решение на основе Firebase Cloud Messaging может вполне подойти.
- В том случае, если от чата требуются более продвинутые возможности, то имеет смысл присмотреться к платформе для чатов SendBird. Здесь стоит сравнить стоимость разработки чата с нуля на Node.js и Socket.io с ежемесячными оплатами SendBird.
- Если к чату предъявляются высокие требования или требуются кастомные опции, то лучше всего подойдет кастомное решение на основе Node.js и Socket.io.
Хотите обсудить ваш проект?
Оставьте заявку — мы созвонимся и познакомимся с проектом. Бесплатно составим первичные требования, порекомендуем технологии и дадим оценку по стоимости.