基于VNC技术的手机云测试平台搭建

日期: 2014-09-08 来源:TechTarget中国 英文

随着移动互联网浪潮的到来,越来越多的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的方法进行接口调用来实现数据的展现、系统的操作等功能。

基于VNC技术的手机云测试平台搭建

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

4. Android设备的接入

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

  •  运行设备的Shell命令
  • 管理模拟器或设备的端口映射
  • 计算机和设备之间的上传、下载文件
  •  将本地apk软件安装至模拟器或设备

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

//获取设备列表

adb devices

//安装apk

adb -s “device_id” install app.apk

//卸载apk

adb -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 command

sub 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);

  }

基于VNC技术的手机云测试平台搭建

▲图2 Android手机接入过程

5. iOS设备的接入

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

//获取设备列表

idevice_id -l

//安装apk

ideviceinstaller -i {package_name}

//卸载apk

ideviceinstaller -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 command

sub 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:9000

WARNING: no ‘numpy’ module, HyBi protocol is slower or disabled

WebSocket 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手机控制台,通过页面实时地控制手机的各种操作,使测试效果更加真实、高效。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐

  • 移动测试策略的现实情况如何?

    从手机市场的分裂,到应用程序可访问环境的不可预测性,又加之要开发、部署和管理手机软件应用程序生命周期,整个过程中充满了挑战,这就意味着,企业必须重视移动测试策略。

  • 2015年是否将成为云移动IDE之年?

    在云环境中进行移动测试或许是非常受开发人员欢迎的一种选择。然而,云环境中没有必要存在这种流动性的开发平台。

  • 移动测试自动化对性能至关重要

    在QUEST大会2014上,其中三位演讲者在这一点上面的意见是一致的:移动领域的测试需要一定水平的复杂性、紧迫性以及持续卓越性,这是现有的传统软件测试所不具备的。

  • 移动ALM流程核心:测试策略及移动监测

    要想从移动应用中获得巨大商机,企业需要制定移动测试策略,来应对极其分散的、动态性质的移动市场。