我想针对网络连接性低的情况测试我的应用程序。除了站在电梯里,最好的方法是什么?我试过用铝箔纸把手机包起来,但没有多大帮助。
我需要在真实设备上测试它,而不是在模拟器中。
我想针对网络连接性低的情况测试我的应用程序。除了站在电梯里,最好的方法是什么?我试过用铝箔纸把手机包起来,但没有多大帮助。
我需要在真实设备上测试它,而不是在模拟器中。
这听起来可能有点疯狂,但微波炉可以起到微波屏蔽的作用。因此,将您的设备放入微波炉中(请勿在设备在里面时打开微波炉!)会导致您的信号强度显着下降。这绝对比站在电梯里要好……
您可以为此使用模拟器。看看这个页面: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 ∞ ∞
由于iPhone的开发人员选项适用于 wifi 网络共享,因此您可以获得具有iOS 6
及以上(并已设置为use for developments
)的 iPhone xcode
,将其设置为模拟所需的网络配置文件,将您的Android设备连接到其热点
Android Studio v 1.5 或更高版本的更新
正如@LouMorda 在下面的评论中Emulator
提到的,原始帖子中提到的选项卡已在 Android Studio v 1.5 中删除。
现在他们已经将这些设置放在模拟器设置中AVD Manager
。
要访问这些设置:
Tools -> Android -> AVD Manager
Edit AVD
按钮(铅笔图标)Network Settings
后即可访问Show Advanced Settings
原始帖子
对于使用 Android Studio IDE 的任何人:
Run -> Edit Configurations
Android Application -> [Your App]
Emulator
选项卡Network Speed
(互联网速度)和Network Latency
(延迟)的不同值以模拟不同的速度和延迟等或者,您可以Additional command line options
在 @inazaruk 的回答中提到的文本字段中输入各种参数。
下面的屏幕截图描述了此Run Configuration
屏幕的外观:
我知道回答这个问题有点晚了,但我希望这可以帮助其他面临类似问题的人!
编辑
对于使用 eclipse 的任何人,请参阅下面的@Abhi 的答案。
我知道这是一个老问题,但......
现在有些手机设置为仅使用 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 测试
转到设置->连接->移动网络-> 在网络模式下,您可以选择仅使用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 -连接/
在模拟器中使用低/坏连接测试您的应用程序的简单方法:
运行>运行配置,选择您的Android 应用程序,然后转到目标选项卡。看模拟器启动参数。在这里,您可以轻松修改网络速度和网络延迟。
我很惊讶没有人提到这一点。您可以通过蓝牙进行连接,并将它们分开十多米(或更少有障碍物)。你有一个非常糟糕的连接。没有微波炉,没有电梯,不需要软件。
或者在实际设备上,您可以转到“设置”->“移动网络”->“首选网络类型”并选择最慢的可用网络类型……当然,这非常有限,但对于某些测试目的,它可能就足够了。
Facebook 建立了一个叫做增强交通控制的东西。他们的 GitHub 页面的简短摘要:
增强流量控制 (ATC) 是一种模拟网络状况的工具。它允许控制设备与互联网的连接。开发人员可以使用 ATC 在不同的网络条件下测试他们的应用程序,轻松模拟高速、移动甚至严重受损的网络。可以控制的连接方面包括:
- 带宽
- 潜伏
- 数据包丢失
- 损坏的数据包
- 数据包排序
为了能够调整网络流量,ATC 必须在路由流量并查看设备真实 IP 地址的设备上运行,例如您的网络网关。这也允许通过 ATC 路由的任何设备能够调整其流量。可以使用 Web 界面对流量进行整形/取消整形,从而允许任何具有 Web 浏览器的设备在无需客户端应用程序的情况下使用 ATC。
你可以在 GitHub 上找到它:https ://github.com/facebook/augmented-traffic-control
他们还写了一篇关于它的博客文章:https ://code.facebook.com/posts/1561127100804165/augmented-traffic-control-a-tool-to-simulate-network-conditions/
Android工作室AVD的更新:
没有微波炉或电梯:)
对于 Mac OS 用户,您可以使用可以从 Apple 下载的 Network Link Conditioner。将其设置为mac上的AP,任何设备都可以连接它。
您可以使用 facebook 开源工具 ATC http://facebook.github.io/augmented-traffic-control/
运行 > 运行配置,选择您的 Android 应用程序,然后转到目标选项卡。进行如图所示的更改。
我为这个问题苦苦挣扎了半天,终于找到了这个解决方案:
总体而言,在真实设备上进行测试并没有多大意义,因为您必须经历很多才能使其正常工作。实现真正测试的唯一合乎逻辑的方法是让您的手机连接到低质量的蜂窝网络,如 EDGE,如果您的电话公司提供的话。您可以尝试通过拨打*#*#4636#*#*
电话应用程序来执行此操作
原始的 Android 模拟器对于测试来说太慢了,并且没有比上面的解决方案更多。
最好的方法是使用Genymotion。它是一款性能比原始 AVD 更好的 Android 模拟器,个人使用的版本是免费的。
在 Genymotion 中创建虚拟设备后,只需通过本教程为设备设置代理。
在你的主机上运行一个代理服务器来模拟糟糕的网络条件,比如Crapify或Toxiproxy(我只测试了前者),你就可以开始了。
更新:
我刚刚意识到你也可以在真实设备上选择相同的策略。我觉得自己像个白痴,没有早点意识到这一点。只需在您的计算机上启动一个 Crapify 代理,将您的手机代理设置为您计算机的本地地址,瞧,您的手机上的互联网很糟糕。
你想测试没有网络连接,还是只是一个慢速网络连接?如果是前者,您可以转到Settings > Wireless & networks > Airplane mode
并打开飞行模式。这将让您在实际设备上测试网络不可用性。
正如@VicVu Charles(或任何其他代理工具)所建议的那样,这是一种更简单的方法。但我想补充一点,您也可以使用您的设备执行此操作,而不仅仅是 genymotion 或其他模拟器。过程将是相同的:
修改您的设备/模拟器的 wifi 设置以使用手动代理。然后设置代理主机名和端口 a。将主机名设置为系统的 ip(使用 ifconfig/ifconfig 获取 pc/mac 的 ip) b。设置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 提供精细控制,并为您提供有关每个进程的数据吞吐量的图形反馈。目前处于免费测试阶段。 截屏
http://www.netlimiter.com/products/nl4
Play商店中有可用的应用程序来限制实际设备,但它们需要root(我无法就它们的工作情况提供任何建议,如果有的话 - YMMV。)
在play store上搜索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
你可以在这里找到一个简单的教程。
您可以在此处找到其他脚本示例。
我需要在 AndroidTV 本地设备上限制低互联网,根据我的阅读,最合适的解决方案是直接在我的路由器中限制互联网访问。
转到路由器设置(本地它就像 192.168.0.1)-> 设置 DHCP 服务器(如果它没有运行)-> 选择设备的 IP 地址并设置限制;
很老的帖子,但我会加两分钱。我对这个硬件产品( https://apposite-tech.com/products/linktropy-mini/ )非常满意,它使我们能够模拟很多真实世界的条件。很长一段时间以来,我们都面临着对在模拟器或飞行模式下可以工作的各种问题进行故障排除的挑战。
我们有几种不同的配置文件设置,从零连接到边缘连接的各个阶段,具有不同程度的延迟、数据包丢失和误码。它的好处是我们可以即时更改这些,而无需在模拟器中重新启动应用程序。对于我们的商店来说,这个价格完全值得,而且使用起来非常简单。