从“是否原生”的角度来说,App分为原生App(Native App)、Web App和混合App(Hybrid App),针对不同类型的App,自动化测试的手段不同。本节我们先来了解这3类App分别是什么,以及它们的优缺点。
(1)Native App
Native App依托于操作系统,有很强的交互性,可拓展性强,需要用户下载并安装方可使用,是一个“完整”的App。
Native App是某个操作系统(比如Android或iOS)所特有的(你不能将iOS App安装到Android手机上),使用相应平台支持的开发工具和语言(比如Android的Android Studio和Kotlin,iOS的Xcode和Swift)开发而成。Native App看起来(外观)和运行起来的速度(性能)是最佳的。
Native App的优点如下:
● 速度快,性能高,用户体验好;
● 可以调用手机终端硬件设备(摄像头、麦克风等);
● 可访问本地资源;
● 由于App下载到本地(安装到手机端),App运行时可节省带宽成本(本地资源不需要再从网络端请求)。
Native App的缺点如下:
● 开发成本高,需针对不同平台开发不同的版本;
● 需要维护多个版本;
● 开发方盈利需要与应用商店分成;
● 获取新版本需重新下载App(不断提示用户下载App并更新,体验差);
● 发布新版本需通过应用商店审核确认,而且时间长(应用商店审核周期长),且Android平台Native App通常会选择在不同的应用商店(华为应用商店、小米应用商店、OPPO应用商店、应用宝等)上线,而不同应用商店审核的周期不同。虽然iOS App只需要在Apple的应用商店上线,但审核时间一般也需要1~3个工作日。
(2)Web App
Web App是基于Web的系统和应用程序,运行于网络和浏览器之上,目前多采用HTML5标准开发,无须下载和安装。
Web App使用标准的Web技术开发,通常是使用HTML5、JavaScript和CSS开发。其运行依赖于Web环境,因此具有只编写一次即可到处运行的优点(采用移动开发方法构建的跨平台移动应用程序可以在多种操作系统和设备上运行)。
Web App的优点如下:
● 跨平台开发,基于浏览器;
● 开发成本低,整体量级轻;
● 无须安装,节约内存空间;
● 可随时上线,不需要等待审核;
● 更新无须通知用户,可自动更新;
● 维护比较简单。
Web App的缺点如下:
● 需要依赖网络,用户体验相对较差;
● 功能受限,无法获取系统级别的通知、提醒、动效等;
● 入口强依赖于第三方浏览器,导致用户留存率低;
● 页面跳转费力,不稳定感强;
● 安全性相对较低,数据容易泄露或被劫持。
(3)Hybird App
Hybrid App指的是Native App中包含部分Web页面的混合类App。Hybird App需要下载并安装,看上去是Native App,但App中部分页面展示的是通过UI Web View访问并得到的HTML5内容。Hybird App使开发人员可以把HTML5应用程序嵌入原生容器里,集Native App和HTML5应用程序的优点(缺点)于一体。
Hybrid App的优点如下:
● Hybird App比例“自由”,比如Web App占90%,Native App占10%,或者各占50%;
● 便于调试,开发时可以通过浏览器调试,调试工具丰富;
● 可顺利调用手机的各种功能;
● 应用商店中可下载(Web App套用Native App的外壳);
● Hybrid App需要在应用商店发布,但用户能自主更新,而Native App的更新必须通过应用商店;
● 对搜索引擎友好,可与在线营销无缝整合;
● 兼容多平台,可离线使用;
● 页面可存放于本地和服务器;
● 省去了跳转浏览器的麻烦;
● 只有Hybrid App和Native App支持消息推送,能提高用户忠诚度;
● App安装包体积较小。
Hybrid App的缺点如下:
● 不确定上线时间;
● 性能稍低(需要连接网络);
● 用户体验上不如Native App;
● Hybrid App可以通过JavaScript API调用移动设备的照相机、定位功能等,而Native App可以通过原生编程语言访问设备的所有功能。
Native App、Web App、Hybrid App技术特性总结如表2-1所示。
表2-1 Native App、Web App、Hybrid App技术特性总结
知识扩展: 普通Android App和手游App。
普通Android App一般使用Android软件开发工具包(Software Development Kit,SDK)开发,使用Java或Kotlin语言编写。通过Android提供的服务,我们可以获取App当前窗口的视图信息,进而查找和操作UI层控件,以完成功能自动化测试。这个过程是标准化的,从技术上来说没有任何难度,因此各个公司App自动化测试的方法大同小异,这也是本书后续将要讲解的内容。
手游App一般使用引擎开发,比较著名的开发引擎有Cocos2d和Unity 3D。虽然在开发过程中也用到了按钮等控件的概念,但当运行手游App时App内的所有控件就会由引擎渲染成简单的图片。针对此类App的自动化测试不在本书的讲解范围内。