如何在iPhone上测试低带宽条件

时间:2010-07-29 18:02:32

标签: iphone testing wireless bandwidth

我有一个应用程序可以执行大量二进制数据加载。我遇到过这样的情况:在加载某些二进制数据期间,不稳定的3G连接可能会间歇性地切断,从而导致问题。

有没有办法,使用模拟器或其他方法来测试低带宽/不稳定的连接方案?

我似乎记得Adobe Flash在他们的测试套件中有带宽模拟器。

8 个答案:

答案 0 :(得分:6)

您可以通过使用Internet共享在Mac上创建无线网络,使用防火墙规则降低该界面,以及将iPhone连接到该网络来实现此目的。这实际上可以调试任何连接到无线网络的设备。

使用这种技术,您可以模拟非常微薄,有损或潜伏的网络。

我使用这种技术代替Apple的官方网络链接调节器有几个原因:

  • 限制只能应用于特定的连接设备,而不会影响开发机器的网络连接。
  • 可以编写脚本来模拟快速变化或“突发”网络。
  • 与iOS内置的网络链接调节器不同,您可以在应用程序保持在前台时更改设置。

这使用了ipfw的dummeynet功能。在现代版本的OS X中,ipfw在技术上已被弃用,但它仍然可以正常工作。不幸的是,pf(替换)还不支持任意数据包延迟。如果有变化,我会更新这个答案。

创建糟糕的Wi-Fi网络

  1. 如果您还没有插入以太网。
  2. 在“系统偏好设置”的“共享”面板中启用Internet共享。选择“从以太网共享您的连接”并选中“Wi-Fi”。
  3. 将手机连接到刚创建的网络,并确保可以浏览网页。
  4. 告诉Mac OS的内置防火墙(ipfw)以确保应用延迟的数据包(通过ipfw用语中的“dummynet”)仍然通过正常规则进行路由。这允许Internet共享继续工作:

    phil@Nebula ~$ sudo sysctl -w net.inet.ip.fw.one_pass=0
    net.inet.ip.fw.one_pass: 0 -> 0
    
  5. 配置iPhone流量通过的低质量管道(吞吐量为14Kb / s,丢包率为1%):

    phil@Nebula ~$ sudo ipfw pipe 1 config bw 14KB/s
    phil@Nebula ~$ sudo ipfw pipe 1 config plr 0.01
    
  6. 下一步会有所不同,具体取决于您是使用Mountain Lion还是以下或Mavericks。

    对于Mountain Lion(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,则可能会将您的AirPort界面称为en0。如果是这种情况,请将en1替换为en0以上。

    小牛队(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

    模拟不断变化的网络

    您可以在上面的步骤5中更改值14KB/s0.01,以模拟不同类型的网络。您还可以指定config delay 1000以引入1000毫秒的延迟。有关更多选项,请参阅the manpage

    添加规则后,您可以继续重新配置管道。例如,要模拟接近蜂窝覆盖的边缘,请在应用运行并连接时发出此命令(95%丢包):

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

    重新配置管道后无需再次运行sudo ipfw add 10 …。您可以编写这些更改的脚本以模拟极其动态的网络环境。

    清理

    您可以发出sudo ipfw delete 10以使所有内容恢复正常,或者只是重新启动。

答案 1 :(得分:5)

这是一个很棒的脚本,我在OS X上使用它来限制连接速度,或者只是关闭它,对于你想要的任何域。我希望我能记住我从哪里得到它来表扬。

将代码保存到计算机上的文件中,并将其命名为“限制”。然后运行,只需在终端输入以下内容,然后从以下速度中选择一个:[full|fast|medium|slow|wwdc|off]

"./throttling medium"

如果您将脚本设置为限制localhost:3000和stackoverflow.com,则在浏览器(或iphone模拟器或其他)中从这些域中的任一域加载页面将响应较慢并加载文件较慢。这对于测试iphone连接错误非常有用。

http://gist.github.com/499177

答案 2 :(得分:2)

我读到有人用iPhone连接iPhone测试,手机用铝箔包裹,以减少手机信号。您可以关闭WiFi和3G,只需要Edge,然后用箔片将其衰减。听起来很粗但是......

您也可以使用iPhone 4并握在手中将两个天线短接在一起; - )

答案 3 :(得分:2)

如果你关闭3G并连接到wifi,你可以测试很多东西。

  1. 登录路由器并对iPhone的mac地址进行速率限制。 (测试慢速连接)

  2. 在下载数据的过程中将电源切换到wifi

  3. 下载时重新启动wifi路由器,以便手机连接,丢失并重新获取。 (测试不同的场景)

  4. 快乐的编码!

答案 4 :(得分:0)

嗯,低带宽很简单:关闭Wifi,关闭3G。切割连接也很简单:打开wifi,连接,关闭wifi接入点。

答案 5 :(得分:0)

我猜你可以连接到Mac(如果有的话)设置为WiFi基站(ad-hoc网络)。然后在Mac上设置“虚拟网络”带宽限制和/或高数据包丢失过滤器。

我正在做的是模拟我为Mac设置软件的速度较慢的高延迟DSL线路。

答案 6 :(得分:0)

在iPhone上你不能。一种方法是与iPhone共享您的计算机WIFI连接,但使用特殊应用程序将其降低速度。

此博客文章描述了一些方法:

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

答案 7 :(得分:0)

Chrome 38在设备模拟设置中包含network emulation。您可以选择离线,GPRS,EDGE,3G,DSL和WiFi。还模拟增加的延迟。

它不如在真实设备上测试那么准确,但设置起来要快得多。

相关问题