【发布时间】:2011-08-11 12:57:00
【问题描述】:
我想测试我的应用程序是否存在网络连接不足的情况。除了站在电梯里,最好的方法是什么?我试过用铝箔纸包裹手机,但效果不大。
我需要在真实设备上测试它,而不是在模拟器中。
【问题讨论】:
-
也研究Faraday cages。它们很容易构建。
标签: android connectivity
我想测试我的应用程序是否存在网络连接不足的情况。除了站在电梯里,最好的方法是什么?我试过用铝箔纸包裹手机,但效果不大。
我需要在真实设备上测试它,而不是在模拟器中。
【问题讨论】:
标签: android connectivity
这听起来可能有点疯狂,但微波炉可以起到微波屏蔽的作用。因此,将您的设备放入微波炉中(请勿在设备在里面时打开微波炉!)会导致您的信号强度显着下降。这绝对比站在电梯里要好......
【讨论】:
您可以为此使用模拟器。看看这个页面:Android Emulator。注意接下来的两个参数:
-netdelay <delay>
将网络延迟模拟设置为 .默认值为无。看 网络延迟仿真表中支持的值。
-netspeed <speed>
将网络速度模拟设置为 .默认值为满。看 网络速度仿真表中支持的值。
增加 kbps 的参考速度:
UP DOWN
-------- ----------
gsm GSM/CSD 14.4 14.4
hscsd HSCSD 14.4 57.6
gprs GPRS 28.8 57.6
umts UMTS/3G 384.0 384.0
edge EDGE/EGPRS 473.6 473.6
hsdpa HSDPA 5760.0 13,980.0
lte LTE 58,000.0 173,000.0
evdo EVDO 75,000.0 280,000.0
full No limit ∞ ∞
【讨论】:
tc 命令(来自busybox)。
由于 iPhones 开发者选项适用于 wifi 网络共享,您可以获得具有 iOS 6 及以上(并已设置为 use for developments 和 xcode)的 iPhone,将其设置为模拟所需的网络配置文件,将您的 Android 设备连接到其热点
【讨论】:
Android Studio v 1.5 或更高版本的更新
正如@LouMorda 在下面的评论中提到的那样,原始帖子中提到的Emulator 选项卡已在Android Studio v 1.5 中删除。
现在他们已将这些设置放在 AVD Manager 的模拟器设置中。
要访问这些设置:
Tools -> Android -> AVD Manager
Edit AVD按钮(铅笔图标)Show Advanced Settings按钮后可以访问Network Settings
原帖
对于使用 Android Studio IDE 的任何人:
Run -> Edit Configurations
Android Application -> [Your App]
Emulator标签Network Speed(网速)和Network Latency(延迟)的不同值,以模拟不同的速度和延迟等或者,您可以在@inazaruk 的回答中提到的Additional command line options 文本字段中输入各种参数。
下面的屏幕截图描述了Run Configuration 屏幕的外观:
我知道回答这个问题有点晚了,但我希望这可以帮助其他面临类似问题的人!
编辑
对于使用 eclipse 的任何人,请参阅下面的@Abhi's answer。
【讨论】:
我知道这是一个老问题,但是......
现在有些手机设置为仅使用 2G。它非常适合在真实设备上模拟慢速互联网。
【讨论】:
几岁了,但是嘿,我会用我的 Genymotion 万无一失的方法插话。
下载 Charles 免费试用版:http://www.charlesproxy.com/download/
安装它
点击Proxy -> Throttle Settings
设置您的 HTTP 限制速度
关闭那个窗口
点击Proxy -> Throttling开启油门
打开一个 Genymotion 模拟器
打开wifi设置
长按启用的wifi连接
点击Modify Network
点击Show Advanced Options
将Proxy设置为Manual
将Proxy hostname设置为10.0.3.2
将Port设置为8888
点击Save
现在您的网络将受到限制!
【讨论】:
您还可以在真正的 Android 设备上测试慢速互联网连接:
通过三星 Galaxy S8 + Android 8.0.0 测试
进入设置 -> 连接 -> 移动网络 -> 在networkmode下您可以选择仅使用 2G 或 3G 连接
【讨论】:
有一种在真实设备上测试低速的简单方法似乎被忽略了。它确实需要 Mac 和以太网(或其他有线)网络连接。
在 Mac 上打开 Wifi 共享,将您的计算机变成 Wifi 热点,将您的设备连接到此。使用 Netlimiter/Charles Proxy 或 Network Link Conditioner(您可能已经安装)来控制速度。
欲了解更多详情并了解您应该在结帐时测试哪种速度:http://opensignal.com/blog/2016/02/05/go-slow-how-why-to-test-apps-on-poor-connections/
【讨论】:
在模拟器中使用低/坏连接测试您的应用程序的简单方法:
转到运行 > 运行配置,选择您的Android应用程序,然后转到Target标签。 查看模拟器启动参数。在这里,您可以轻松修改网络速度和网络延迟。
【讨论】:
我很惊讶没有人提到这一点。您可以通过蓝牙进行连接,并将它们分开十多米(或更少有障碍物)。你有一个真正的坏连接。无需微波炉,无需电梯,无需软件。
【讨论】:
或者在实际设备上,您可以转到设置 -> 移动网络 -> 首选网络类型并选择最慢的可用网络... 当然,这是非常有限的,但对于某些测试目的来说可能就足够了。
【讨论】:
Facebook 构建了一个名为 Augmented Traffic Control 的东西。来自他们的 GitHub 页面的简短摘要:
增强流量控制 (ATC) 是一种模拟网络状况的工具。它允许控制设备与互联网的连接。开发人员可以使用 ATC 在不同的网络条件下测试他们的应用程序,轻松模拟高速、移动甚至严重受损的网络。可以控制的连接方面包括:
- 带宽
- 延迟
- 丢包
- 损坏的数据包
- 数据包排序
为了能够调整网络流量,ATC 必须在能够路由流量并查看设备真实 IP 地址的设备上运行,例如您的网络网关。这也允许通过 ATC 路由的任何设备能够调整其流量。流量可以使用网络界面进行整形/取消整形,允许任何带有网络浏览器的设备使用 ATC,而无需客户端应用程序。
您可以在 GitHub 上找到它:https://github.com/facebook/augmented-traffic-control
【讨论】:
Android Studio AVD 更新:
没有微波炉或电梯:)
【讨论】:
对于 Mac OS 用户,您可以使用可从 Apple 下载的 Network Link Conditioner。在mac上设置为AP,任何设备都可以连接。
您可以使用 facebook 开源工具 ATC http://facebook.github.io/augmented-traffic-control/
【讨论】:
运行 > 运行配置,选择您的 Android 应用程序,然后转到目标选项卡。如图做修改。
【讨论】:
为这个问题苦苦挣扎了半天,终于找到了这个解决方案:
总体而言,在真实设备上进行测试没有多大意义,因为您必须经历很多事情才能使其正常工作。实现真正测试的唯一合乎逻辑的方法是让您的手机连接到低质量的蜂窝网络,如 EDGE,如果您的电话公司提供的话。您可以尝试通过在手机应用中拨打*#*#4636#*#* 来完成此操作
原来的 Android 模拟器太慢了,无法测试,而且没有比上面的解决方案更多。
最好的方法是使用Genymotion。是一款性能比原版AVD好很多的安卓模拟器,个人使用的版本是免费的。
在 Genymotion 中创建虚拟设备后,只需通过 this tutorial 为设备设置代理即可。
在您的主机上运行一个模拟不良网络条件的代理服务器,例如 Crapify 或 Toxiproxy(我只测试了前者),然后您就可以开始了。
更新:
我刚刚意识到您也可以在真实设备上选择相同的策略。我觉得自己像个白痴,没有早点意识到这一点。只需在您的计算机上启动一个 Crapify 代理,将您的手机代理设置为您计算机的本地地址,瞧,您的手机上的互联网很糟糕。
【讨论】:
您是要测试没有网络连接,还是只测试慢速网络连接?如果是前者,你可以去Settings > Wireless & networks > Airplane mode打开飞行模式。这将让您在实际设备上测试网络不可用性。
【讨论】:
正如@VicVu Charles(或任何其他代理工具)所建议的那样,这是一种更简单的方法。但我想补充一点,您也可以使用您的设备执行此操作,而不仅仅是 genymotion 或其他模拟器。过程将是相同的:
修改您的设备/模拟器的 wifi 设置以使用手动代理。然后设置代理主机名和端口 一种。将主机名设置为系统的 ip(使用 ifconfig/ifconfig 获取 pc/mac 的 ip) 湾。设置genymotion的端口号(检查charles中的代理设置)
PS:您的设备/模拟器必须使用相同的 wifi,因为您使用的 ip 很可能是私有 ip。
【讨论】:
在 Android Studio 中打开终端并转到 ../../Android/sdk/tools。 'emulator' 可执行文件应在此处可用。
运行 ./emulator -netdelay "delay_in_millis" -avd "emulator_device_name"
例如:./emulator -netdelay 60000 -avd Nexus_5_API_21
现在构建您的应用并将其安装在模拟器中。
确保您的代码更改在应用程序中设置超时并处理您的请求。
【讨论】:
只需从 Android studio 进入 Android 设备监视器,然后 DDMS -> Emulator Control。会有 Speed 和 Latency 属性。
【讨论】:
我发现 netlimiter4 是限制模拟器数据的最佳解决方案。 它通过体面的 gui 提供精细控制,并为您提供有关每个进程的数据吞吐量的图形反馈。目前处于免费测试阶段。 screenshot
http://www.netlimiter.com/products/nl4
Play 商店中有可用的应用程序可以限制实际设备,但它们需要 root(我无法就它们的工作情况提供任何建议,如果有的话 - YMMV。)
在Play商店搜索bradybound,我不能发布多个链接..
【讨论】:
你试过吗? 设置 - 网络 - 更多 - 移动网络 - 网络模式 - 选择首选网络(例如 2G)。
上面提到了我使用的另一种方法。通过 iPhone 热点连接。 希望这会有所帮助。
【讨论】:
我正在使用 mitmproxy HTTPS 代理。 https://mitmproxy.org/
Mitmproxy 是一个开源代理应用程序,允许拦截任何 HTTP(S) 客户端之间的 HTTP 和 HTTPS 连接。它允许实时监控、捕获和更改这些连接。更改请求、响应、标头、... 此外,您可以拦截不同的请求。
例如response_delay.py:
from mitmproxy import http
from time import sleep
def response(flow: http.HTTPFlow) -> None:
sleep(5.0)
然后执行此注释会延迟来自服务器的所有响应:
mitmproxy --cert \*.asdf.at=./cert.pem --scripts response_delay.py
在我的应用中,我使用的是证书固定,因此您需要添加证书(私有 + 公有)
cat private.key public.key > cert.pem
你可以找到一个简单的教程here。
您可以找到其他脚本示例here。
【讨论】:
我需要在 AndroidTV 原生设备上限制低互联网,根据我所阅读的内容,最合适的解决方案是直接在我的路由器中限制互联网访问。
转到路由器设置(本地它就像 192.168.0.1)-> 设置 DHCP 服务器(如果它没有运行)-> 选择设备的 IP 地址并设置限制;
【讨论】:
很老的帖子,但我会加两分钱。我对这款硬件产品 (https://apposite-tech.com/products/linktropy-mini/) 非常满意,它使我们能够模拟许多真实世界的条件。很长一段时间以来,我们都面临着对在模拟器或飞行模式下可以工作的各种问题进行故障排除的挑战。
我们有几种不同的配置文件设置,从零连接到边缘连接的各个阶段,具有不同程度的延迟、数据包丢失和误码。它的好处是我们可以即时更改这些,而无需在模拟器中重新启动应用程序。对于我们的商店来说,这个价格完全值得,而且使用起来非常简单。
【讨论】: