【IT168 技术】随着移动互联网浪潮的到来,越来越多的App应用产品将服务于人们的日常生活。但Android平台与iOS平台的差异以及Android平台的碎化片,使得App应用与终端的适配性存在诸多问题。而对测试人员而言,智能终端的多样性也大大增加了研发和测试成本,测试周期。本篇文章主要提出了一种基本VNC技术的手机云测解决方案,希望以该技术为基础将各类智能终端接入到VMware vSphere环境中,实现移动应用的远程快速测试,大大减少产品的测试成本,缩短测试周期。

  1. 背景介绍

  目前市面上已有许多基于云计算的移动测试平台,例如Deviceanywhere、Testin云测、TA云测试、百度云测试MTC、易测云、终端池等。各个厂商推出的手机云测试平台各有特点,但对于私有云,这些平台上的手机无法接入到服务中,同时也无法对手机进行定制化的配置,因些这些云测平台对于私有云就显得无所适从。VMware vSphere是业界领先且最可靠的虚拟化平台,在企业私有云中的虚拟化管理平台中占据着非常大的比重。本文提出了一套基于VMware vSphere环境的手机云测评平台解决方案,旨在提供一套快速的部署方法,实现移动应用的远程测试,大大减少产品的测试成本,缩短测试周期。

  2. 智能终端的开源VNC应用

  VNC(Virtual Network Computer)是虚拟网络计算机的缩写,是一款优秀的远程控制工具软件,为了解决手机的远程测试,本文采用VNC技术实现对智能手机的远程控制,从而实时地查看手机当前界面。Android平台下的开源VNC实现有很多,例如Android VNC Server、Fast Droid VNC Server、Droid VNC Server、VMLite VNC Server等。iOS平台较为封闭,因此该平台下的开源VNC实现较少,并且都需要越狱,主要有Veency、VMLite VNC Server等。所有VNC Server的实现原理都大同小异,但从稳定性和兼容性考虑,本文采用了VMLite VNC Server。

  3. 基于VNC技术的手机云测集成方案

  VMware vSphere环境提供了丰富的SDK API供系统调用,考虑到性能和易用性,本文采用Perl SDK API来实现虚拟机与手机之间的绑定、解绑定,端口的转发,重启手机等操作。在设计过程中,Android和iOS平台的差异性,因此使用了两套VMware vSphere环境(即两台ESX Server),用于Linux虚拟机和MAC虚拟机的创建。另外,在使用过程中,发现Samsung S4等设备不能被VMware虚拟机识别,因此又提供了一台独立的Linux主机用于这些不能被识别的手机的挂载,整体架构见图1。

  消息的传递采用业界是最流行的AMQP,本文中使用Erlang编写的RabbitMQ作为AMQP服务器,所有的数据以JSON格式进行传输,RESTFul API Server提供了所有系统操作的接口,本文的UI Component也是以REST的方法进行接口调用来实现数据的展现、系统的操作等功能。


▲图1 基于VNC技术的手机云测平台架构图

  4. Android设备的接入

  Android设备的接入主要依靠Google提供的工具包adb(Android Debug Bridge),使用该工具可以实现:

  * 运行设备的Shell命令

  * 管理模拟器或设备的端口映射

  * 计算机和设备之间的上传、下载文件

  * 将本地apk软件安装至模拟器或设备

  主机与手机间的通信、应用程序的安装或卸载、端口的转发等功能都可能通过adb携带相应的命令完成,系统中用到的adb命令如下,其中adb forward是最为重要的一条命令,主要实现主机端口与手机间VNC端口的转发,后续noVNC的实现也是通过该命令实现的。

  //获取设备列表adb devices//安装apkadb -s “device_id” install app.apk//卸载apkadb -s “device_id” install package_name//端口转发adb -s “device_id” forward tcp:{pc_port} tcp:{device_port}//关闭端口转发adb -s “device_id” forward --remove tcp:{pc_port}//重启手机adb -s “device_id” reboot//获取第三方应用列表adb -s "device_id" shell pm list packages -3

  Android手机与虚拟机建立连接都通过消息机制完成,所有的请求都以REST Server为中转,经RABBITMQ Server将消息投递到相应的处理器中完成,并且处理结果返还给请求方,整个过程非常类似于RPC的远程调用过程,见图2。Perl主要是将adb的命令进行了简单的封装,这样便于调用,例如adb forward的封装如下。

  # Function:forward# Description:Execute adb forward commandsub forward(){my $device_request=shift;my $device_id=$device_request->{requestDevice}->{deviceName};my $pc_port=$device_request->{forwardPcPort};my $device_port=$device_request->{forwardDevicePort};my $websockify_port=$device_request->{websockifyPort};my $forward_command="adb -s \"$device_id\" forward tcp:$pc_port tcp:$device_port";......return $coder->encode($result);}


▲图2 Android手机接入过程

5. iOS设备的接入

  iOS设备的接入主要依赖libimobiledevice开源包,来实现与Android设备接入类似的功能。主机与设备间的连接命令主要如下。

  //获取设备列表idevice_id -l//安装apkideviceinstaller -i {package_name}//卸载apkideviceinstaller -a {package_name} remove//端口转发tcprelay-mutiple.py -t {device_port}:{pc_port}:{device_id}//获取第三方应用列表ideviceinstaller -l

  iPhone与虚拟机建立连接同样也是通过消息机制完成,具体的流程与Android手机类似。同样,Perl也对libimobiledevice命令进行了简单的封装,这样便于调用,例如ios forward的封装如下。

  # Function:forward# Description:Execute libimobiledevice forward commandsub ios_forward(){my $device_request=shift;my $device_id=$device_request->{requestDevice}->{deviceName};my $pc_port=$device_request->{forwardPcPort};my $device_port=$device_request->{forwardDevicePort};my $websockify_port=$device_request->{websockifyPort};my $forward_command="nohup tcprelay-mutiple.py -t $device_port:$pc_port:$device_id &";......return $coder->encode($result);}

  6. noVNC技术的应用

  noVNC是HTML5 VNC客户端,采用HTML 5 WebSockets、Canvas和Javascript实现。由于adb和libimobiledevice已经实现了主机与智能设备之间的端口映射,要想使用noVNC只需要将主机映射的端口与websocket需要的端口进行映射。noVNC也为我们提供了这样一个非常实用的工具noVNC/utils/websockify.py。

  $ adb -s {deivce_id} forward tcp:9000 tcp:5901 / tcprelay-mutiple.py -t 9000:5900:{device_id}$ cd /noVNC/utils$ ./websockify.py 9500 127.0.0.1:9000WARNING: no 'numpy' module, HyBi protocol is slower or disabledWebSocket server settings:- Listen on :8000- Flash security policy server- No SSL/TLS support (no cert file)- proxying from :8000 to localhost:5900

  这样就可以通过noVNC提供的vnc.html或者vnc_auto.html实现WEB手机控制台。

  7. 小结

  本篇文章主要提出了一种基本VNC技术的手机云测解决方案,希望以该技术为基础将各类智能终端接入到VMware vSphere环境中,实现移动应用的远程快速测试,大大减少产品的测试成本和测试周期。通过对adb、libimobiledevice、noVNC开源工具包的合理应用,本文搭建出了一个WEB手机控制台,通过页面实时地控制手机的各种操作,使测试效果更加真实、高效。

  8. 作者简介

  俞超 软件开发工程师

  任职于某大型IT外资企业,主要从事J2EE开发、设计工作。

  参考资料

  http://mobile.51cto.com/aengine-402829.htm

  http://developer.android.com/tools/help/adb.html

  http://www.libimobiledevice.org/

  https://github.com/kanaka/noVNC

http://cloud.it168.com/a2014/0903/1663/000001663258_2.shtml

基于VNC技术的手机云测试平台搭建相关推荐

  1. 基于OpenStack的云测试平台

    1.云测试平台技术架构 \\ (一)云测试平台搭建的背景 \\ 笔者目前处于一家国内核心金融机构的测试中心部门,随着公司新业务的开展以及大数据时代的到来,金融软件系统逐步趋向于分布式.高稳定性.高可用 ...

  2. Labview的国产测试工具神器ATECLOUD智能云测试平台技术特点

    ATECLOUD智能云测试平台作为近年来崛起的自动化测试测量工具,已经成为了国人心中属于中国人自己的"Labview".从传统的代码编码到Labview的图形化编程,再到ATECL ...

  3. Testin云测试平台

    测试平台 Testin云测试平台是一个基于真实终端设备环境,基于自动化测试技术的7x24云端服务.Testin在云端部署了千余款测试终端,并开放这些智能终端给全球移动开发者进行测试,开发者只需在Tes ...

  4. ELIFE S7、IUNI i1 加入TestBird手游云测试平台

    国内的手机厂商们非常热衷于搞子品牌,有的厂商甚至觉得光是子品牌还不够痛快,直接弄一个小弟. 如果说ELIFE是金立旗下的一个系列,那么出身自金立的IUNI则是一个完全独立的品牌.今天的新机报到将为大家 ...

  5. 有哪些好用的App云测试平台

    文章目录 有哪些好用的App云测试平台 有哪些好用的App云测试平台 目前对移动App的测试主要指的是下面几部分: 兼容性测试--App对不同手机.操作系统版本的兼容- 性测试,包括安装.启动.卸载等 ...

  6. App云测试平台有哪些?

    目前对移动App的测试主要指的是下面几部分: 兼容性测试--App对不同手机.操作系统版本的兼容性测试,包括安装.启动.卸载等. 功能测试--遍历应用的每一个角落,查看应用的功能.逻辑是否正常,完整. ...

  7. ATECLOUD智能云测试平台-测试测量/仪器程控/工业控制/上位机开发软件

    ATECLOUD智能云测试平台是纳米软件Namisoft推出的文字化语言编程软件平台,可连接.配置并控制市面上常见的硬件仪器.设备,实现仪器设备的自动化测试测量 .工业控制.远程监控.上位机软件开发. ...

  8. LCR表测电容怎么实现连续测试?ATECLOUD云测试平台帮您解决

    河南某企业在生产测试中需要用到LCR表测试电容的容量和损耗,目前在使用是德科技E4980a LCR 测试数据时,发现不能连续测试,不能自动记录数据.通过和纳米软件Namisoft沟通,希望我们可以实现 ...

  9. 云测试平台推荐与简单比较

    相信做APP产品的小伙伴经常会遇到机型兼容问题.特别是Android,各大厂商都在做自己的系统MIUI.EMUI.H2OS等等,更是增加了机型兼容的难度. 小型团队和公司一般没有太多经费购买各种机型, ...

最新文章

  1. php--点赞功能的实现
  2. (chap6 Http首部) 响应首部字段 LocationProxy-AuthenticateRetry-After
  3. 大型架构服务器要几台
  4. 机器学习笔记(八):神经网络:学习
  5. ios 请求失败封装_vue_axios请求封装、异常拦截统一处理
  6. 解读文献里的那些图——流式细胞术
  7. css 网格布局_CSS网格布局
  8. 实现一个行内三个div等分_css 实现等分布局
  9. 精选 | 2017年11月R新包推荐
  10. OpenCV2:幼儿园篇 第七章 界面事件
  11. HDU 2899 :(二分求最小值)
  12. python可以编译hex_如何使用hex()在python中转换进制?
  13. 计算机装调与维护报告,Vmware workstation在计算机装调与维护实训中的应用
  14. Spring createBean()源码笔记
  15. vue 按钮控制鼠标滚轮放大缩小
  16. 关于Windows的 “睡眠“ 和 “休眠“
  17. nginx+rtmp+OBS搭建音视频直播服务
  18. excel不均匀坐标轴_将Excel图表的纵坐标轴设置成不等间距的2种方法
  19. 网易有道校招笔试总结
  20. 德国柏林计算机比赛,震撼!绝地求生世界杯德国柏林开场秀,盛况空前!

热门文章

  1. UWB高精度定位系统如何实现化工危险预警
  2. python总结之学习笔记
  3. nonebot2 原神角色查询插件
  4. 关于摄像头广角畸变,利用OpenCV的方法消除畸变
  5. js 点击更换背景图,简单易懂
  6. java ddd聚合_DDD聚合根/存储库结构
  7. oracle ebs gfm加载页,EBS附件下载 fnd_gfm fnd_lobs
  8. 页面栏的转换(JS)
  9. 巴蜀1359 后缀数组
  10. word 中表格续表