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

现在已经是APP时代了,由于手机网络的特殊性,移动APP需要面临更加复杂的网络环境。在设计之初就要考虑如何应对各种网络环境,比如很高的延迟,经常丢包,频繁的断线。特别是手游,断线重连机制设计的好坏直接影响到游戏的体验。

所以,在开发过程中模拟各种网络环境进行测试变得越来越重要。在ATC出来之前,微软曾经有一个网络模拟工具NEWT(Network Emulator for Windows Toolkit),使用起来也是方便。(NEWT的诞生也蛮有意思,见:NEWT的前世今生

那么,对比NEWT,ATC有些什么特点呢?

ATC有两个最吸引人的特点:

  1. 在手机上通过Web界面就可以随时切换不同的网络环境。
  2. 多个手机可以连接到同一个WIFI下,相互之间模拟的网络环境各不影响。

可以想象一下这个场景:一群程序猿和测试猴子热火朝天的在办公室忙活着,这时有一个叫ATC WiFi的热点,任何人都可以将手机连接上去,通过Web界面随意切换到各种不同的网络环境下进行调试和测试……

想想都有点小激动呢,接下来就来试用一把,感受一下ATC的威力。

ATC只能运行在Linux上,所以搭建部署稍显麻烦一些。本文将介绍在虚拟机里如何搭建ATC环境。大致有以下几个步骤:

  1. VMWare装个Ubuntu系统吧(以前我常用VirtualBox,各种兼容性问题被坑惨了不敢用了)。
  2. 除非你的机器有无线网卡,不然找一个USB无线网卡,用来设置WIFI热点。
  3. 部署ATC

Ubuntu中设置WiFi热点功能,在系统自带的工具里可以直接开启。但是,由于是Ad-hoc模式,Android手机根本搜不到信号。所以必须设置AP模式才能让Android手机搜到。我折腾了好一阵,最后发现这篇文章最靠谱:http://my.oschina.net/eechen/blog/227230,照着设置一般就OK了。

接下来是部署ATC,其实也很简单,官方文档上写的也很清楚:https://github.com/facebook/augmented-traffic-control

首先,必须安装Python2.7以上版本,然后安装pip:

  1. sudo apt-get install python-pip python-dev build-essential
  2. sudo pip install --upgrade pip

然后,使用pip直接安装好ATC所有组件:

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

接下来部署Django的web工程,提供手机访问并用来配置和切换网络用的。

1.使用django-admin生成一个新的django工程:

  1. django-admin startproject atcui
  2. cd atcui

2.修改atcui/settings.py,加入ATC相关的内容:

  1. INSTALLED_APPS = (
  2. ...
  3. # Django ATC API
  4. 'rest_framework',
  5. 'atc_api',
  6. # Django ATC Demo UI
  7. 'bootstrap_themes',
  8. 'django_static_jquery',
  9. 'atc_demo_ui',
  10. # Django ATC Profile Storage
  11. 'atc_profile_storage',
  12. )

3.修改atcui/urls.py,urlpatterns 中加入atc的url页面:

  1. ...
  2. ...
  3. from django.views.generic.base import RedirectView
  4. urlpatterns = patterns('',
  5. ...
  6. # Django ATC API
  7. url(r'^api/v1/', include('atc_api.urls')),
  8. # Django ATC Demo UI
  9. url(r'^atc_demo_ui/', include('atc_demo_ui.urls')),
  10. # Django ATC profile storage
  11. url(r'^api/v1/profiles/', include('atc_profile_storage.urls')),
  12. url(r'^$', RedirectView.as_view(url='/atc_demo_ui/', permanent=False)),
  13. )

4.更新一下数据库:

  1. python manage.py migrate

万事俱备,就差启动了……

前面设置WiFI热点时,你还记得设置的无线网卡的名字吗?嗯,就是wlan0,这个很重要。接下来要启动网络控制的核心组件atcd,需要通过参数指定提供Wifi热点的内网用的网卡名字,外网访问的网卡名默认是eth0(如果不是也需要通过--atcd-wan指定)

  1. sudo atcd --atcd-lan wlan0

然后,启动Django的工程:

  1. sudo python manage.py runserver 0.0.0.0:8000

用手机连接上去试试吧。看看虚拟机的IP,比如我设置的是192.168.6.1,手机浏览器里访问:http://192.168.6.1:8000

在手机的界面里,你可以分别对网络上行下行进行设置,主要设置的参数有:

  1. 网络带宽(bandwidth)
  2. 延迟(latency)
  3. 丢包率(packet loss)
  4. 错包率(corrupted packets)
  5. 乱序率(packets ordering)

通过设置上面的参数,可以模拟出各种常用的网络环境,比如:2G,3G,4G,WiFi等等,同时也可以模拟一些异常情况,比如信号很差,延迟很大,丢包率高的情况。具体有哪些场景和参数设置,欢迎大家一起交流交流,下面是Comcast提供的一份参数配置(国外的网络和国内的很不一样吧,仅供参考,欢迎大家修正和补充)

Name Latency Bandwidth Packet-loss
GPRS (good) 500 50 2
EDGE (good) 300 250 1.5
3G/HSDPA (good) 250 750 1.5
DIAL-UP (good) 185 40 2
DSL (poor) 70 2000 2
DSL (good) 40 8000 0.5
WIFI (good) 40 30000 0.2
Satellite 1500 - 0.2

Facebook网络模拟测试工具ATC使用的更多相关文章

  1. 弱网络模拟测试工具---易测app

    易测功能介绍   易测是一款基于无线客户端研发场景的通用测试工具, 它通过在研发人员的自持机上提供各种辅助能力&标准化的专项测试服务来提升研发质量&效率.   易测app是阿里巴巴做的 ...

  2. [转]FaceBook ATC 弱网测试工具环境搭建

    工具简介 ATC是FaceBook开源的移动网络测试工具Augmented Traffic Control(ATC),能够方便的让我们模拟各种网络环境进行测试. ATC有两个最吸引人的特点: 在手机上 ...

  3. Facebook 网络模拟工具 ATC部署及使用

    废话引用: Facebook此前开源了增强网络流量控制工具 ATC,能利用WiFi网络模拟各种移动网络,测试智能手机和APP在不同国家地区和应用环境下的性能表现.ATC能够模拟2G.2.5G(Edge ...

  4. APP测试工具与技术

    AndroidDevTools Android Dev Tools官网地址:www.androiddevtools.cn 收集整理Android开发所需的Android SDK.开发中用到的工具.An ...

  5. APP弱网测试工具(QNET)

    QNET介绍官网链接:https://wetest.qq.com/product/qnet 目前在测试移动设备上进行弱网络专项测试的方案主要有两种: 通过Android设备连接到PC上进行弱网络测试, ...

  6. Android高手速成--第四部分 开发工具及测试工具

    第四部分 开发工具及测试工具 主要介绍和Android开发工具和测试工具相关的开源项目. 一.开发效率工具 Json2Java根据JSon数据自动生成对应的Java实体类,还支持Parcel.Gson ...

  7. 微软modern.IE网站,多版本IE免费测试工具集

    微软今天发布了modern.IE,这是一系列免费的.针对Web 开发者的测试工具和资源集合网站,微软希望以此来帮助开发者更轻松地实现跨 IE 和其他现代浏览器.跨设备的兼容性,其他还有代码检测工具.标 ...

  8. 前端技术之:JavaScript测试工具

    Mocha 一个用于Node.js与浏览器端的简单.自由.有趣的JavaScript测试框架. https://mochajs.org/ https://github.com/mochajs/moch ...

  9. github渗透测试工具库

    本文作者:Yunying 原文链接:https://www.cnblogs.com/BOHB-yunying/p/11856178.html 导航: 2.漏洞练习平台 WebGoat漏洞练习平台: h ...

随机推荐

  1. Linux shell之sed

    sed编辑器逐行处理输入,然后把结果发送到屏幕. -i选项:直接作用源文件,源文件将被修改. sed命令和选项: a\ 在当前行后添加一行或多行 c\ 用新文本替换当前行中的文本 d 删除行 i\ 在 ...

  2. ES 聚合函数

    https://segmentfault.com/a/1190000004466154#articleHeader0 http://www.cnblogs.com/didda/p/5485681.ht ...

  3. 关于ES6的数组字符串方法

    注:ES6的一些新属性会显示语法错误,不过不会影响效果,在Languages里面也可以调: let:用来定义变量 特点:只能在代码块里面使用,let拥有块级作用域;并且let不允许重复声明;比如: v ...

  4. C++ 用libcurl库进行http通讯网络编程(转)

    转载:http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html 目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三. ...

  5. ASP.NET ZERO 学习 事件总线

    用于注册和触发客户端的全局事件. 介绍 Pub/sub事件模型广泛用于客户端,ABP包含了一个简单的全局事件总线来 注册并 触发事件. 注册事件 可以使用abp.event.on来注册一个全局事件.一 ...

  6. php中Closure::bind用法(手册记录)

    手册中 Closure::bind — 复制一个闭包,绑定指定的$this对象和类作用域. 具体参数可以看手册,这里记录下这个方法的实际用处. <?php trait MetaTrait { p ...

  7. 管道导致的while循环体变量失效

    #!/bin/sh num= cat /etc/passwd | while read line do num=$(($num+)) done echo $num linux:~ # sh a.sh ...

  8. Python学习笔记第七天(列表解析)

    列表解析: 根据已有列表,高效生成列表的方式,它的执行效率要快很多,比for循环的速度要快很多 示例如下: 生成器表达式 生成器表达式并不真正创建数字列表,而是返回一个生成器对象,此对象在每次计算出一 ...

  9. java里的分支语句--程序运行流程的分类(顺序结构,分支结构,循环结构)

    JAVA里面的程序运行流程分三大类: 1,顺序结构:顺序结构就是依次执行每一行代码 2,分支结构:分支结构就是按不同的条件进行分支 3,循环结构:一段代码依条件进行循环执行. 其中,分支结构有两大类: ...

  10. Controller将Model数据传给View层,View层应该如何处理?

    首先,我们在Model层中添加一个Person类. namespace MVCTest.Models{    public class Person    {        public string ...