zoukankan      html  css  js  c++  java
  • 20 | 与时俱进:浅谈移动应用测试方法与思路

    无论是移动端测试还是 PC 端测试,都属于 GUI 测试的范畴,所以基本的测试思路,比如基于页面对象封装和基于业务流程封装的思想是相通的,之前介绍的那些脚本分层的实现方法也都同样适用于移动端的 GUI 测试。

    移动端应用的测试也会因为其自身特点,有一些独特的测试方法与思路。

    三类移动应用的特点

    移动端应用又可以进一步细分为三大类:Web App、Native App 和 Hybrid App。

    Web App指的是移动端的 Web 浏览器, 其实和 PC 端的 Web 浏览器没有任何区别。

    Native App指的是移动端的原生应用, 对于 Android 是 apk,对于 iOS 就是 ipa。Native App 是一种基于手机操作系统(iOS 和 Android),并使用原生程序编写运行的第三方应用程序。

    Hybrid App(俗称:混血应用),是介于 Web App 和 Native App 两者之间的一种 App 形式。Hybrid App 利用了 Web App 和 Native App 的优点,通过一个原生实现的 Native Container 展示 HTML5 的页面。更通俗的讲法可以归结为,在原生移动应用中嵌入了 Webview,然后通过该 Webview 来访问网页。

    Hybrid App 具有维护更新简单,用户体验优异以及较好的跨平台特性,是目前主流的移动应用开发模式。

    三类移动应用的架构原理

    三类不同移动应用的测试方法

    Web App

    本质就是 Web 浏览器的测试,我在前面文章中介绍的所有 GUI 自动化测试的方法和技术,比如数据驱动、页面对象模型、业务流程封装等,都适用于 Web App 的测试。

    如果你的 Web 页面是基于自适应网页设计(即符合 Responsive Web 设计的规范),而且你的测试框架如果支持 Responsive Page,那么原则上你之前开发的运行在 PC Web 端的 GUI 自动化测试用例,不做任何修改就可以直接在移动端的浏览器上直接执行,当然运行的前提是你的移动端浏览器必须支持 Web Driver。

    自适应网页设计(Responsive Web Design)是指,同一个网页能够自动识别屏幕分辨率、并做出相应调整的网页设计技术。

    Native App

    采用的自动化测试方案不同,iOS 一般采用 XCUITest Driver,而 Android 一般采用 UiAutomator2 或者 Espresso 等。

    数据驱动、页面对象以及业务流程封装的思想依旧适用,你完全可以把这些方法应用到测试用例设计中。

    Hybrid App

    对 Native Container 的测试,可能需要用到 XCUITest 或者 UiAutomator2 这样的原生测试框架,而对 Container 中 HTML5 的测试,基本和传统的网页测试没什么区别,所以原本基于 GUI 的测试思想和方法都能继续适用。

    唯一需要注意的是,Native Container 和 Webview 分别属于两个不同的上下文(Context),Native Container 默认的 Context 为“NATIVE APP",而 Webview 默认的 Context 为“WEBVIEW_+ 被测进程名称”。

    当需要操作 Webview 中的网页元素时,需要先切换到 Webview 的 Context 下。(切换上下文

    移动应用专项测试的思路和方法

    对于移动应用,顺利完成全部业务功能测试往往是不够的,还会进行很多移动应用所特有的专项测试。

    交叉事件测试

    交叉事件测试也叫中断测试,是指 App 执行过程中,有其他事件或者应用中断当前应用执行的测试。

    交叉测试采用手工测试的方式,并且都是在真机上进行。

    交叉事件测试,需要覆盖的场景主要包括:

    • 多个 App 同时在后台运行,并交替切换至前台是否影响正常功能;

    • 要求相同系统资源的多个 App 前后台交替切换是否影响正常功能,比如两个 App 都需要播放音乐,那么两者在交替切换的过程中,播放音乐功能是否正常;

    • App 运行时接听电话;

    • App 运行时接收信息;

    • App 运行时提示系统升级;

    • App 运行时发生系统闹钟事件;

    • App 运行时进入低电量模式;

    • App 运行时第三方安全软件弹出告警;

    • App 运行时发生网络切换,比如,由 Wifi 切换到移动 4G 网络,或者从 4G 网络切换到 3G 网络等;

    兼容性测试

    确保 App 在各种终端设备、各种操作系统版本、各种屏幕分辨率、各种网络环境下,功能的正确性。常见的 App 兼容性测试往往需要覆盖以下的测试场景:

    • 不同操作系统的兼容性,包括主流的 Andoird 和 iOS 版本;

    • 主流的设备分辨率下的兼容性;主流移动终端机型的兼容性;

    • 同一操作系统中,不同语言设置时的兼容性;

    • 不同网络连接下的兼容性,比如 Wifi、GPRS、EDGE、CDMA200 等;

    • 在单一设备上,与主流热门 App 的兼容性,比如微信、抖音、淘宝等;

    兼容性测试往往采用自动化测试的手段,大公司会基于 Appium + Selenium Grid + OpenSTF 去搭建自己的移动设备私有云平台外,其他公司一般都会使用第三方的移动设备云测平台完成兼容性测试,国内主流的是 Testin。

    流量测试

    • App 执行业务操作引起的流量;

    • App 在后台运行时的消耗流量;

    • App 安装完成后首次启动耗费的流量;

    • App 安装包本身的大小;

    • App 内购买或者升级需要的流量。

    流量测试,往往借助于 Android 和 iOS 自带的工具进行流量统计,也可以利用 tcpdump、Wireshark 和 Fiddler 等网络分析工具。

    • 对于 Android 系统,网络流量信息通常存储在 /proc/net/dev 目录下,也可以直接利用 ADB 工具获取实时的流量信息。

    一款 Android 的轻量级性能监控小工具 Emmagee,类似于 Windows 系统性能监视器,能够实时显示 App 运行过程中 CPU、内存和流量等信息。

    • 对于 iOS 系统,可以使用 Xcode 自带的性能分析工具集中的 Network Activity,分析具体的流量使用情况。

    流量测试的目的最终是减少 App 产生的流量,一些常用减少流量使用的方法:

    • 启用数据压缩,尤其是图片;

    • 使用优化的数据格式,比如同样信息量的 JSON 文件就要比 XML 文件小;

    • 遇到既需要加密又需要压缩的场景,一定是先压缩再加密;

    • 减少单次 GUI 操作触发的后台调用数量;

    • 每次回传数据尽可能只包括必要的数据;

    • 启用客户端的缓存机制;

    耗电量测试

    耗电量测试通常从三个方面来考量:

    • App 运行但没有执行业务操作时的耗电量;

    • App 运行且密集执行业务操作时的耗电量;

    • App 后台运行的耗电量。

    耗电量检测既有基于硬件的方法,也有基于软件的方法。

    • Android 通过 adb 命令“adb shell dumpsys battery”来获取应用的耗电量信息;

    • iOS 通过 Apple 的官方工具 Sysdiagnose 来收集耗电量信息,然后,可以进一步通过 Instrument 工具链中的 Energy Diagnostics 进行耗电量分析。

    弱网络测试

    移动应用的测试需要保证在复杂网络环境下的质量。

    具体的做法就是:在测试阶段,模拟时高时低的延迟、经常丢包、频繁断线,在乘坐地铁、穿越隧道,和地下车库的场景的网络环境,在 App 发布前尽可能多地发现并修复问题。

    开源移动网络测试工具:Facebook 的 Augmented Traffic Control(ATC)。

    边界测试

    边界测试是指,移动 App 在一些临界状态下的行为功能的验证测试,基本思路是需要找出各种潜在的临界场景,并对每一类临界场景做验证和测试。

    主要的场景有:

    • 系统内存占用大于 90% 的场景;

    • 系统存储占用大于 95% 的场景;

    • 飞行模式来回切换的场景;

    • App 不具有某些系统访问权限的场景,比如 App 由于隐私设置不能访问相册或者通讯录等;

    • 长时间使用 App,系统资源是否有异常,比如内存泄漏、过多的链接数等;

    • 出现 ANR 的场景;

    • 操作系统时间早于或者晚于标准时间的场景;

    • 时区切换的场景;


    来源于 极客时间 茹炳晟 软件测试52讲

  • 相关阅读:
    获取系统环境变量
    改变系统提示信息
    获取任务栏大小
    获取系统启动后经过的时间
    获取系统版本号
    z-tree的使用
    vue学习-day05 -- 案例:名字合并(监听data数据的改变)
    vue学习-day04(路由)
    eclipse在线安装ermaster插件
    vue学习-day03(动画,组件)
  • 原文地址:https://www.cnblogs.com/Uni-Hoang/p/13301574.html
Copyright © 2011-2022 走看看