Разделы портала

Онлайн-тренинги

.
3 пункта, которые Вы должны знать о тестировании мобильных приложений с разными типами подключений
11.02.2014 11:58

Статья подготовлена Александром Хозей и Андреем Дзыней в рамках подготовки к тренингу Тестирование мобильных приложений 2.0, который начнется 28 февраля.

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

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

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

 

1. Работа с конкретным типом и скоростью связи и потерями пакетов

Основные виды соединения с Интернет:

  • Передача данных по сотовой связи: 2G, 2.5G, 3G, 4G
  • Wi-Fi 
  • Mi-Fi - когда точка раздает интернет полученный по сотовой связи

Большинство умных телефонов поддерживают современные технологии передачи мобильного трафика. Тип устанавливаемого соединения зачастую доступен в настройках устройства (2G/3G/4G), но для этого не забудьте приобрести несколько SIM-карт с предустановленными тарифными планами от операторов сотовой связи. Рекомендую использовать miniSIM с переходниками под полноразмерные SIM карты и отдельные nanoSIM для iOS-устройств последнего поколения.

Проверка работы приложений с разными скоростями передачи данных

iOS

Начиная с iOS 6 нам стал доступен Network Link Conditioner в подменю Developer каждого iOS устройства. Приятным является тот факт, что по умолчанию ограничения по связи накладываются как на мобильный трафик, так и на Wi-Fi.

В меню Network Link Conditioner осуществялется выбор доступных предустановок, а в самом низу находится важнейший для нас пункт - создать свою предустановку (preset), где вы можете задать параметры вручную.

 

 

 

Другие операционные системы

Для iOS симуляторов или остальных операционных систем необходимо использовать Network Link Conditioner для MacOS, Wi-Fi точки доступа и встроенные средства эмуляторов/симуляторов

Способ 1 Работа с симуляторами/эмуляторами

Операционные системы семейств Android и Blackberry имеют стандартный набор настроек эмулятора для установки типа и качества соединения. Ниже представлены скриншоты OS Android.

Способ 2 Сторонняя прошивка на роутер

Многие прошивки роутеров по типу DD-WRT, Tomato позволяют манипулировать (“шейпить”) скоростью Wi-Fi соединения на лету, без разрыва соединения.

Лично я рекомендую связку Linksys WRT54G v2 + прошивка Tomato:

  • роутер стоит примерно €30
  • хорошие прошивки (DD-WRT и основанная на нём Tomato)
  • достаточно быстро перезагружается и восстанавливает Wi-Fi соединение после отключения кабеля из WAN-порта

Способ 3 Network Link Conditioner для MacOS

1. Устанавливаем Network Link Conditioner

2. Создаем точку доступа Wi-Fi на Mac

Далее тестируем приложение в симуляторах/эмуляторах на локальной машине либо подключившись к точке доступа, созданной на Вашем Mac.

Способ 4 Стороннее ПО

Сторонние инструменты, вроде WANEm, Dummynet (скорее всего, потребуется помощь системного администратора, т.к. пропускают трафик через себя и должны быть установлено до роутера/Вашего компьютера)

Различных прокси. Лично мне нравится CharlesProxy, он позволяет совершать throttling траффика по заранее подготовленным правилам (по аналогии с Network Link Conditioner)

2. Потеря связи и переключение между типами подключений

Потерять сотовую связь можно поиском мертвой зоны, но это зачастую достаточно сложно и неоптимально. Самым очевидным советом будет лифт! В лабораторных условиях лучше воспользоваться экранированным боксом в который есть возможность положить смартфон.

C потерей Wi-Fi соединения все значительно проще:

  1. iOS7: выдвигаем “шторку” снизу и включаем режим полета или выключаем Wi-Fi

  2. Смартфоны на Android от Samsung: выдвигаем верхнюю “шторку” и выключаем Wi-Fi, сотовую сеть или вообще включаем режим потлета

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

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

Для переключание между видами связи можно использовать ту же “шторку” или роутер. Операционная систему уже настроена на то, чтобы автоматически переключаться на самый сильный источник сигнала:

  1. выключили Wi-Fi

  2. приложение переключилось на мобильный трафик (2G/2.5G/3G/4G)

  3. включили Wi-Fi

  4. Wi-Fi найден - соединение автоматический переключается на Wi-Fi

3. Публичная сеть требующая авторизации и сложные сценарии

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

Самые распостраненные сети требующие авторизации:

  1. Принудительная Web аутентификация непосредственно после подключения к Wi-Fi сети. Такой тип подключения не дает доступ на сервисы, отличных от стартового

  2. Подключение устройства к локальной сети роутера посредством привязки к mac-адресу устройства. В таком случае Вы сможете подключиться к Wi-Fi, а воспользоваться интернетом - нет.

  3. Перенаправление на Web аутентификацию в случае отправки запроса на любой из публичных адресов

Для первого и второго случая мы можем воссоздать ситуацию таким способом:

подключаемся к Wi-Fi и отключаем Ethernet кабель от роутера. Соответственно, также все запросы не доходят до сервера и не приходят от него.

Во всех перечисленных случаях мы можем использовать Proxy для перехвата запросов и отвечать на них ожидаемым образом. Специальным образом сконфигурированный веб сервер так же может послужить отличным инструментом для проверок.

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

Несколько примеров таких сложных сценариев:

  1. симуляция запароленной сети => сеть потерялась (переключение на мобильный трафик) => потерялся и мобильный трафик => возобновление соединения (мобильный трафик или Wi-Fi)

  2. высокий процент потери пакетов

  3. скорость сети “прыгает” в очень больших пределах

  4. очень частое переключение 2G>3G>4G и наоборот

  5. работа с крайне медленной сетью (1-3Kb/s)

  • найти баги в слое работы с сетевой частью
  • позволяет проверить сервер на slow-DDoS. Те случаи когда сервер быстро обрабатывает огромный поток входящих запросов, но клиент принимает их с крайне медленной скоростью, поэтому очередь на сервере растет => растет потребление ресурсов.

Итак для того, чтобы пользователи вашего мобильного приложений чувствовали себя комфортно независимо от доступного типа соединения, всегда проверяйте:

  1. работу со всеми типами, скоростью связи и потеря пакетов

  2. потерю и переключение связи на всех видах соединений

  3. работу от публичой сети под паролем

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