Как проверить условия низкой пропускной способности на iPhone - PullRequest
5 голосов
/ 29 июля 2010

У меня есть приложение, которое выполняет загрузку двоичных данных.Я сталкивался со сценариями, когда нестабильное соединение 3G может прерываться во время загрузки некоторых из этих двоичных данных, вызывая проблемы.

Есть ли какой-либо способ, с помощью симулятора или иным образом, проверить на низкую пропускную способность/ нестабильные сценарии подключения?

Кажется, я помню Adobe Flash с симуляторами пропускной способности в своем наборе тестов.

Ответы [ 8 ]

6 голосов
/ 13 сентября 2012

Вы можете сделать это, создав беспроводную сеть на своем Mac с помощью общего доступа к Интернету, снизив уровень этого интерфейса с помощью правил брандмауэра и подключив iPhone к этой сети.Это на самом деле будет работать для отладки любого устройства, которое подключается к беспроводной сети.

Используя эту технику, вы можете симулировать очень скудные, с потерями или скрытые сети.

Я использую эту технику вместо AppleОфициальный Network Link Conditioner по нескольким причинам:

  • Дросселирование может применяться только к определенным подключенным устройствам, но не влияет на сетевое подключение вашего компьютера разработки.
  • Сценарий можно быстро моделироватьизменение или «взрывные» сети.
  • В отличие от встроенного в iOS Network Link Conditioner, вы можете изменять настройки, пока ваше приложение остается на переднем плане.

При этом используется dummeynet ipfw.особенность.ipfw технически устарел в современных версиях OS X, но все равно работает нормально.К сожалению, pf (замена) пока не поддерживает произвольные задержки пакетов.Я обновлю этот ответ, если что-то изменится.

Создание ужасной сети Wi-Fi

  1. Подключите Ethernet, если вы этого еще не сделали.
  2. Включите ИнтернетСовместное использование на панели общего доступа в Системных настройках.Выберите «Поделиться своим подключением из: Ethernet» и установите флажок «Wi-Fi».image
  3. Подключите телефон к сети, которую вы только что создали, и убедитесь, что вы можете просматривать веб-страницы.
  4. Скажите встроенному брандмауэру Mac OS (ipfw), чтобы обеспечить пакетыс задержкой (проходящей через "dummynet" на языке ipfw) все еще маршрутизируются по обычным правилам.Это позволяет Internet Sharing продолжать работать:

    phil@Nebula ~$ sudo sysctl -w net.inet.ip.fw.one_pass=0
    net.inet.ip.fw.one_pass: 0 -> 0
    
  5. Настроить канал низкого качества, по которому будет проходить трафик вашего iPhone (пропускная способность 14 Кбит / с с потерей пакетов 1%):

    phil@Nebula ~$ sudo ipfw pipe 1 config bw 14KB/s
    phil@Nebula ~$ sudo ipfw pipe 1 config plr 0.01
    

Следующий шаг зависит от того, находитесь ли вы на Горном льве или ниже, или на Маверикс.

Для Горного льва(10.8) или ниже:

Направляйте пакеты в канал, но только для трафика через интерфейс AirPort:

phil@Nebula ~$ sudo ipfw add 10 pipe 1 ip from any to any via en1
00010 pipe 1 ip from any to any via en1

Важно : Если вы 'Если вы используете Air или новый MacBook Pro без физического порта Ethernet, ваш интерфейс AirPort, скорее всего, будет называться en0.Замените en1 на en0 выше, если это так.

Для Mavericks (10.9):

Проверьте вывод ifconfig и найдите мостинтерфейс, созданный с помощью Internet Sharing:

bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=63<RXCSUM,TXCSUM,TSO4,TSO6>
    ether xx:xx:xx:xx:xx:xx
    Configuration:
            id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
            maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
            root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
            ipfilter disabled flags 0x2
    member: en4 flags=3<LEARNING,DISCOVER>
            ifmaxaddr 0 port 6 priority 0 path cost 0
    nd6 options=1<PERFORMNUD>
    media: <unknown type>
    status: inactive
bridge100: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=3<RXCSUM,TXCSUM>
    ether xx:xx:xx:xx:xx:xx
    inet 192.168.2.1 netmask 0xffffff00 broadcast 192.168.2.255
    Configuration:
            id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
            maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
            root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
            ipfilter disabled flags 0x2
    member: en1 flags=3<LEARNING,DISCOVER>
            ifmaxaddr 0 port 5 priority 0 path cost 0
    media: autoselect
    status: active

Требуется интерфейс моста с IP-адресом;в большинстве случаев это будет bridge100.

Направлять пакеты в канал, но только для трафика через интерфейс моста:

phil@Nebula ~$ sudo ipfw add 10 pipe 1 ip from any to any via bridge100
00010 pipe 1 ip from any to any via bridge100

Изменить bridge100, если он имеет другойимя в вашей системе.

Моделирование изменяющейся сети

Вы можете изменить значения 14KB/s и 0.01 в шаге 5 выше, чтобы имитировать различные типы сетей.Вы также можете указать config delay 1000, чтобы ввести задержку в 1000 мс.См. man-страницу для получения дополнительных опций.

Вы можете продолжить перенастройку канала после добавления правила для него.Например, чтобы смоделировать близость к границе сотовой связи, введите эту команду, когда ваше приложение работает и подключено (потеря пакета 95%):

    phil@Nebula ~$ sudo ipfw pipe 1 config plr 0.95

Нет необходимости снова запускать sudo ipfw add 10 … после перенастройкитруба.Вы можете запрограммировать эти изменения для имитации чрезвычайно динамичной сетевой среды.

Очистка

Вы можете выполнить sudo ipfw delete 10, чтобы вернуть все в нормальное состояние или просто перезагрузиться.

5 голосов
/ 30 июля 2010

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

Сохраните код в файл на вашем компьютере и назовите его «throttling». Затем для запуска просто введите ниже в терминале и выберите одну из следующих скоростей: [full|fast|medium|slow|wwdc|off].

"./throttling medium"

Если у вас настроен скрипт для throttle localhost: 3000 и stackoverflow.com, то загрузка страницы из любого из этих доменов в вашем браузере (или симуляторе iphone, или любом другом) будет реагировать медленнее и загружать файлы медленнее. Это было действительно здорово для тестирования ошибок подключения iphone.

http://gist.github.com/499177

2 голосов
/ 30 июля 2010

Вы можете протестировать несколько вещей, если выключите 3G и подключитесь к Wi-Fi.

  1. Войдите в свой маршрутизатор и ограничьте скорость доступа по MAC-адресу вашего iphone.(для проверки медленных соединений)

  2. Отключите питание Wi-Fi, когда происходит загрузка данных

  3. Перезагрузите маршрутизатор Wi-Fi при загрузке, чтобытелефон имеет соединение, теряет его и получает снова.(для тестирования различных сценариев)

Счастливого кодирования!

2 голосов
/ 29 июля 2010

Я читал, что кто-то тестировал свой iPhone, подключенный через USB-кабель, и телефон, завернутый в алюминиевую фольгу, чтобы уменьшить сотовый сигнал. Вы можете отключить Wi-Fi и 3G и просто иметь Edge, а затем ослабить его с помощью фольги. Звучит грубо, но ...

Вы также можете использовать iPhone 4 и держать в руке, чтобы замкнуть две антенны вместе; -)

0 голосов
/ 13 октября 2014

Chrome 38 включает сетевую эмуляцию в настройках эмуляции устройства.Вы можете выбрать Offline, GPRS, EDGE, 3G, DSL и WiFi.Также эмулирует увеличенную задержку.

Это не так точно, как тестирование на реальном устройстве, но гораздо быстрее настроить.

0 голосов
/ 29 июля 2010

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

В этом блоге описаны некоторые подходы для этого:

http://blog.aptivate.org/2010/01/23/make-sure-your-apps-work-in-the-field/

0 голосов
/ 29 июля 2010

Полагаю, вы могли бы подключиться к Mac (если он у вас был), настроенному как базовая станция WiFi (специальная сеть). Затем на Mac установите ограничение полосы пропускания «dummynet» и / или фильтр с высокой потерей пакетов.

Это то, что я делаю, чтобы имитировать медленные линии DSL с более высокой задержкой, которые я настраиваю для установки программного обеспечения для Mac.

0 голосов
/ 29 июля 2010

Ну, низкая пропускная способность проста: выключить Wi-Fi, выключить 3G.Обрезать соединение также просто: включите Wi-Fi, подключитесь, выключите вашу точку доступа Wi-Fi.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...