废话引用:

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模式:

sudo apt-get install iw
sudo iw list

  

  

安装kde-nm-connection-editor,设置无线wifi热点:

  安装:

sudo apt-get install plasma-nm

  配置-终端输入:

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

sudo apt-get install python-pip python-dev build-essential
sudo pip install --upgrade pip

  2、通过pip安装ATC需要的django组件

pip install atc_thrift atcd django-atc-api django-atc-demo-ui django-atc-profile-storage

  3、创建一个django工程以便使用ATC服务端app

django-admin startproject atcui
cd atcui

  4、进入atcui目录,注意这里有两层目录,编辑settings.py,在INSTALLED_APPS里添加以下内容

    'django_static_jquery',
'bootstrap_themes',
'atc_api',
'atc_demo_ui',
'atc_profile_storage',
'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、更新数据库

python manage.py migrate

  7、启动ATC服务

sudo atcd --atcd-lan wlan0 --atcd-wan eth0

  8、启动Django工程

sudo python manage.py runserver 0.0.0.0:8080

  

  9、手机连上ATC的wifi,访问http://192.168.0.1:8080    IP地址以实际WiFi地址为准

  就可以在手机上访问到ATC网络模拟页面了,除了Android亲儿子手机访问正常,其他手机浏览器访问UI有点不正常。能用就行了。

  网上的说法是:这可能是由于其他rom没有谷歌服务框架导致的,尝试在其他手机装chrome却无法启动。

  

  但是这样的页面是没有配置的,为了增加配置,我们还要继续下面的操作。

  10、添加facebook工程中为我们配置的常见网络的配置

git clone https://github.com/facebook/augmented-traffic-control.git

  下载完代码后,进入工程文件,执行以下指令:

utils/restore-profiles.sh localhost:8080

  然后在手机上刷新页面,就有对应的一些常用网络模拟选项了。

  切换配置的方法: 只需点击配置旁边的“Select”按钮,在点击上方的“Update Shaping”按钮即可

  

  在手机的界面里,你可以分别对网络上行下行进行设置,主要设置的参数有:
  网络带宽(bandwidth)
  延迟(latency)
  丢包率(packet loss)
  错包率(corrupted packets)
  乱序率(packets ordering)
  通过设置上面的参数,可以模拟出各种常用的网络环境,比如:2G,3G,4G,WiFi等等,同时也可以模拟一些异常情况,比如信号很差,延迟很大,丢包率高的情况。

  

  实际网络使用情况可以在手机上使用网络检测工具speedtest查看。

Facebook 网络模拟工具 ATC部署及使用的更多相关文章

  1. Facebook网络模拟测试工具ATC使用

    Facebook在其工程博客(原文)上宣布开源移动网络测试工具Augmented Traffic Control(ATC),我迅速试用了一番,非常不错,对手游或者其他APP的调试和测试都非常有帮助,介 ...

  2. Docker 管理工具 Portainer部署

    Docker 管理工具 Portainer部署 一.官网 官网:http://www.portainer.io 演示地址:http://demo.portainer.io 用户名:admin 密码:t ...

  3. 使用Ubuntu系统管理包工具(apt)部署Zabbix企业级监控系统

    使用Ubuntu系统管理包工具(apt)部署Zabbix企业级监控系统  作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Ubuntu系统部署笔记:https://www.cnblo ...

  4. 从大厂DevOps工具链部署,看现代产品的生命周期管理

    目录 1. 认识DevOps 1.1. DevOps工具链 1.2. CI 持续集成(Continuous Integration) 1.3. CD(持续交付 & 持续部署) 1.4. Agi ...

  5. 使用autotools系列工具自动部署源代码编译安装

    在Linux系统下开发一个较大的项目,完全手动建立Makefile是一件费力而又容易出错的工作.autotools系列工具只需用户输入简单的目标文件.依赖文件.文件目录等就可以比较轻松地生成Makef ...

  6. Docker集群管理工具 - Kubernetes 部署记录 (运维小结)

    一.  Kubernetes 介绍 Kubernetes是一个全新的基于容器技术的分布式架构领先方案, 它是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernete ...

  7. Docker管理工具 - Swarm部署记录

    之前介绍了Docker集群管理工具-Kubernetes部署记录,下面介绍另一个管理工具Swarm的用法,Swarm是Docker原生的集群管理软件,与Kubernetes比起来比较简单. Swarm ...

  8. Python自动化运维工具-Fabric部署及使用总结

    使用shell命令进行复杂的运维时,代码往往变得复杂难懂,而使用python脚本语言来编写运维程序,就相当于开发普通的应用一样,所以维护和扩展都比较简单,更重要的是python运维工具fabric能自 ...

  9. 超实用!!!使用IDEA插件Alibaba Cloud Toolkit工具一键部署本地应用到ECS服务器

    最近看到阿里云发布了一款名为 Alibaba Cloud Toolkit 的插件,可以帮助开发者高效开发并部署适合在云端运行的应用,瞬间击中了我的小心脏,这个对于个人开发者来说超级棒啊,终于不需要再手 ...

随机推荐

  1. 如何在ashx页面获取Session值

    [转]   在一般事务处理页面,可以轻松的得到 Request,Response对象,从而进行相应的操作,如下: HttpRequest Request = context.Request; Http ...

  2. Maven 导出依赖Jar,生成source.jar,javadoc.jar

    下载最新版的Maven http://maven.apache.org/download.cgi    解压到本地文件夹 新建环境变量    MAVEN_HOME   maven解压目录 在path加 ...

  3. ORACLE删除当前用户下所有的表的方法

    1.如果有删除用户的权限,则可以: drop user user_name cascade; 加了cascade就可以把用户连带的数据全部删掉. 删除后再创建该用户. --创建管理员用户 create ...

  4. Exploratory Undersampling for Class-Imbalance Learning

    Abstract - Undersampling is a popular method in dealing with class-imbalance problems, which uses on ...

  5. Identify Memory Leaks in Visual CPP Applications —— VLD内存泄漏检测工具

    原文地址:http://www.codeproject.com/Articles/1045847/Identify-Memory-Leaks-in-Visual-CPP-Applications 基于 ...

  6. spring实现一对多表单的保存

    现在我已经从ios转行为java了呦吼吼吼~~~ 1.先来一张界面,项目的字段太多了,为了研究知识点我做了个潘长江版的

  7. K均值聚类算法的MATLAB实现

    1.K-均值聚类法的概述    之前在参加数学建模的过程中用到过这种聚类方法,但是当时只是简单知道了在matlab中如何调用工具箱进行聚类,并不是特别清楚它的原理.最近因为在学模式识别,又重新接触了这 ...

  8. C# 3D效果饼状图的绘制

    第一步:放置图表控件 拖动工具栏的Chart控件到界面上 然后选中控件,设置Series属性,将ChartType属性改为pie 第三步:设置3D效果 选择控件,设置ChartArea属性,如下 设置 ...

  9. PHP的几个常用函数的使用总结

    1.date函数:不得不说,PHP的date函数已经基本很完备了,如果你不去读PHP的手册的话,你不会发现对日期做了那么多的支持. time()  获取当前的时间戳 data() 获取自己想要的时间格 ...

  10. Java数组和C++异同

    一.定义和初始化 1.Jave定义和初始化: Java:两种方式 Type[]  A; Type A[]; 定义时不能指定数组的长度 静态初始化:   A = new Type[][Ele1,Ele2 ...