废话引用:
Facebook此前开源了增强网络流量控制工具ATC,能利用WiFi网络模拟各种移动网络,测试智能手机和APP在不同国家地区和应用环境下的性能表现。ATC能够模拟2G、2.5G(Edge)、3G和LTE4G网络环境,测试工程师可以快速在各种不同模拟网络环境中切换。
ATC能够模拟真实网络环境中的用户体验,Facebook开发ATC的目的是确保更多的人,尤其是发展中国家的用户也能够获得最好的APP体验。
此前曾有媒体报道扎克伯格要求Facebook员工使用低端智能手机,感受低收入和偏远地区用户的实际用户的产品体验。
为了获得真实的网络测试环境,Facebook一开始试图在公司园区部署2G网络,但是由于可运行开源软件的2G基站难以采购而作罢。最后,Facebook转而选择通过WiFi网络流量控制来模拟巴西、印度、尼日利亚和菲律宾等地的2G低速蜂窝网络的数据通讯。
正文:
ATC有两个最吸引人的特点:
1、在手机上通过Web界面就可以随时切换不同的网络环境。
2、多个手机可以连接到同一个WIFI下,相互之间模拟的网络环境各不影响。
可以想象一下这个场景:有一个叫ATC WiFi的热点,任何人都可以将手机连接上去,通过Web界面随意切换到各种不同的网络环境下进行调试和测试……
网上的方法:
ATC只能运行在Linux上,所以搭建部署稍显麻烦一些。此前网上有一些部署方式介绍了在虚拟机里如何搭建ATC环境。大致有以下几个步骤:
1、VMWare装Ubuntu系统。
2、除非你的机器有无线网卡,不然找一个USB无线网卡,用来设置WIFI热点。
3、部署ATC
Ubuntu中设置WiFi热点功能,在系统自带的工具里可以直接开启。但是,由于是Ad-hoc模式,Android手机根本搜不到信号。所以必须设置AP模式才能让Android手机搜到。参考:http://my.oschina.net/eechen/blog/227230,照着设置一般就OK了。
我的方法:
但是以上方法我尝试过,在两个电脑上均未能成功,所以我没有采用虚拟机的方法。我采用的是装双系统的方法,大致有以下几个步骤:
1、window7基础上装双系统 deepin-linux。
2、deepin能够很好的识别网卡,需要无线网卡支持AP模式,然后安装kde-nm-connection-editor,设置无线wifi热点。
3、部署ATC。
安装deepin-linux 双系统:
系统下载:http://www.deepin.org/download.html
制作U盘启动盘:Deepin Boot Make 链接:http://pan.baidu.com/s/1pJVTvOR 密码:a93q
其他安装步骤参照:http://jingyan.baidu.com/article/359911f557e77a57fe030613.html
注意:linux安装需要4个盘: / /home /boot swap
查看网卡是否支持AP模式:
1 sudo apt-get install iw
2 sudo iw list
安装kde-nm-connection-editor,设置无线wifi热点:
安装:
1 sudo apt-get install plasma-nm
配置-终端输入:
1 sudo kde5-nm-connection-editor
点击 add, 选择 Wireless (shared)。
ssid 就是无线名字,比如我的是 tiankonguse。
mode 选择 Access Point。
可以去 Wireless Security 设置一个密码, WPA & WPA2 Personal 那一项。(密码必须大于8位)
然后点击 ok 保存,在网络列表处选择新建的网络,然后点击连接,连接成功后就可以用手机搜索到WiFi进行连接。
部署ATC:
先看看官方文档https://github.com/facebook/augmented-traffic-control步骤都写得比较清楚。
1、安装python 、pip
1 sudo apt-get install python-pip python-dev build-essential
2 sudo pip install --upgrade pip
2、通过pip安装ATC需要的django组件
1 pip install atc_thrift atcd django-atc-api django-atc-demo-ui django-atc-profile-storage
3、创建一个django工程以便使用ATC服务端app
1 django-admin startproject atcui
2 cd atcui
4、进入atcui目录,注意这里有两层目录,编辑settings.py,在INSTALLED_APPS里添加以下内容
1 'django_static_jquery',
2 'bootstrap_themes',
3 'atc_api',
4 'atc_demo_ui',
5 'atc_profile_storage',
6 'rest_framework',
5、编辑urls.py,加入以下内容
from django.views.generic import RedirectView
admin.autodiscover()
urlpatterns = patterns(
'',
url(r'^admin/', include(admin.site.urls)),
url(r'^api/v1/', include('atc_api.urls')),
url(r'^api/v1/profiles/', include('atc_profile_storage.urls')),
url(r'^$', RedirectView.as_view(url='/atc_demo_ui/', permanent=False)),
url(r'^atc_demo_ui/', include('atc_demo_ui.urls')),
)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
其中以上4\5两个步骤可以用ATC下载源码包中的/augmented-traffic-control-master/docker/atcui_tpl/ 里面的 settings.py、urls.py,直接覆盖 atcui目录中的文件就行。
6、更新数据库
1 python manage.py migrate
7、启动ATC服务
1 sudo atcd --atcd-lan wlan0 --atcd-wan eth0
8、启动Django工程
1 sudo python manage.py runserver 0.0.0.0:8080
9、手机连上ATC的wifi,访问http://192.168.0.1:8080IP地址以实际WiFi地址为准
就可以在手机上访问到ATC网络模拟页面了,除了Android亲儿子手机访问正常,其他手机浏览器访问UI有点不正常。能用就行了。
网上的说法是:这可能是由于其他rom没有谷歌服务框架导致的,尝试在其他手机装chrome却无法启动。
但是这样的页面是没有配置的,为了增加配置,我们还要继续下面的操作。
10、添加facebook工程中为我们配置的常见网络的配置
1 git clone https://github.com/facebook/augmented-traffic-control.git
下载完代码后,进入工程文件,执行以下指令:
1 utils/restore-profiles.sh localhost:8080
然后在手机上刷新页面,就有对应的一些常用网络模拟选项了。
切换配置的方法: 只需点击配置旁边的“Select”按钮,在点击上方的“Update Shaping”按钮即可
在手机的界面里,你可以分别对网络上行下行进行设置,主要设置的参数有:
网络带宽(bandwidth)
延迟(latency)
丢包率(packet loss)
错包率(corrupted packets)
乱序率(packets ordering)
通过设置上面的参数,可以模拟出各种常用的网络环境,比如:2G,3G,4G,WiFi等等,同时也可以模拟一些异常情况,比如信号很差,延迟很大,丢包率高的情况。
实际网络使用情况可以在手机上使用网络检测工具speedtest查看。