浅谈兼容性测试

  兼容性测试的概念

  兼容性测试是一种软件测试,用于确保构建的系统/应用程序/网站与其他各种对象(如其他网络浏览器、硬件平台、用户、操作系统等)的兼容性。这种类型的测试有助于了解产品在特定环境中的表现。

  为了方便理解,可以把硬件,软件,平台等对象抽象成测试设备这个概念。结合项目上兼容性测试的实践经验可以提取出以下特征:

  1. 在交付项目中,被测对象往往对测试设备有较大的依赖。以测试一个 WEB 产品为例子,一般需要考虑:浏览器,浏览器版本,操作系统,屏幕尺寸,分辨率大小等。有时候也需要考虑硬件设备参数和型号。任何差别都可能出现测试结果不符合预期的情况。
  2. 兼容性是其他测试类型的前提。在敏捷测试象限里,不同的测试类型根据四个维度进行了划分,兼容性测试虽然没有出现在其中,但是在进行不同类型的测试之前,测试主体和测试设备需要保持一种“稳定”状态才可以开展。我把这种“稳定”的状态视作兼容性是其他测试的必要不充分条件。
  3. 越多的测试设备意味着越多的资源消耗。在测试人员测试熟练程度固定的情况下,每增加一个测试设备都会增加其工作量,更不用说开发成本和采购、搭建测试环境的成本。
  4. 没有任何一个产品会追求兼容所有可用设备,基本上所有项目都会根据产品定位、业务类型、用户群体等维度对测试设备进行限制,从而达成交付目标。这个过程常常在售前或者启动阶段完成。

  准备测试设备清单

  显然,在当今设备、平台碎片化的现实中,如何确定测试设备对于项目进行兼容性测试有着关键作用。从以下几个方面可以筛选和确认出兼容性测试设备清单:

  1. 基于市场定位和产品定位

  市场定位,是指企业对目标消费者或目标消费者市场的选择;而产品定位,是指企业对用什么样的产品来满足目标消费者或目标消费市场的需求。从理论上讲,应该先进行市场定位,然后才进行产品定位。产品定位是对目标市场的选择与企业产品结合的过程,即将市场定位企业化、产品化的工作。

  在测试人员设计兼容性测试设备初期,需要考虑产品定位的背景输入,从而限制测试设备类别。

  一般来说,企业期望产品适配多端,从项目成本和风险平坦的角度,会对项目进行拆分,以较小单元分阶段完成产品开发。拆分会进一步限制测试设备种类。例如,一个资讯类的科技公司希望开发出基于用户关系,专注兴趣社区的即时分享传播信息,并与他人互动的社交媒体平台。在 iOS 生态完善,目标用户使用量大、用户体验更好的前提下,业务侧可能针对性给予开发团队这样的输入:需要开发在主流 iOS 设备安装和使用的 APP。

  2. 基于交付目标

  交付目标需要考虑交付本身各种条件和制约因素,可能存在如业务价值、技术复杂度、产品类型、用户类别、市场定位等维度。从这些关键维度可以提取两种搜集测试设备的方法:

  2. 1 主动搜集

  调研:根据地域、竞品分析、操作系统市场占有率、浏览器市场占有率等条件对测试设备做调研。主要通过咨询公司获取相关的行业报告,或者通过大数据平台获取相关数据。


图一 2022 年 1 月到 2023 年 1 月期间中国区手机和平板供应商的市场占有率

  (数据来源:https://gs.statcounter.com/

  埋点:对于已经发布的产品采用埋点技术,获取用户使用设备等信息作为兼容性测试的数据支撑


图二通过埋点技术统计的终端用户访问某特定网站设备使用情况示例图

  2. 2 被动搜集

  主流发布:获取移动设备厂商设备发布动态,预测新设备对于产品是否影响,从而影响测试设备是否兼容的决策。

  产品反馈:对于已经发布的产品,从线上用户反馈的兼容性问题。

  3. 基于技术

  在明确产品定位和交付目标的前提下,开发团队会确定开发过程的技术选型,不同的技术选型对于运行设备也有要求。下图是基于聊天的智能团队协作工具 Teams 对设备的最低要求。对于低于该要求的硬件、软件的测试设备不再具有测试价值。

图三 Teams 用户手册关于安装和使用对设备的最低要求

  (图片来源:https://learn.microsoft.com/en-us/microsoftteams/hardware-requirements-for-the-teams-app

  4. 测试目标

  在测试策略层面,不同的测试类型对于测试设备选型也有影响。对于 WEB 项目,更加侧重于界面布局,组件交互逻辑、屏幕自适应、元素字体、浏览器渲染时间(性能)等 UI 测试,所以需要考虑设备屏幕大小、分辨率、浏览器类型、浏览器版本、操作系统等因素;对于 APP 项目,更加侧重于下载、安装、卸载、功能、交互等功能测试,所以更多需要考虑操作系统、硬件参数等因素。

  需要注意的是,测试目标和测试设备选型是强耦合的关系,测试目标旨在保障项目高质量交付,可以进行灵活变化。如果识别到某测试机型已经不具备测试价值,或者不同型号机型表现类似,应该和业务团队和开发团队进行沟通和调整。

图四常见设备屏幕尺寸表

  如上图所示,如果从屏幕尺寸大小、分辨率相同的角度,同一厂商屏幕参数类似,选择一种机型就可满足测试条件。

  5. 测试资源

  在测试设备基本明确的前提下,需要考虑当前交付团队的测试资源。越多的测试设备也意味着会消耗更多的测试资源(有些时候测试策略也会很大程度的影响测试资源的消耗,比如测试策略设计了迭代内回归,也在增加着测试人员的工作量)。可以考虑区分测试设备的优先级,对一到两个设备进行主测,其余设备进行 happypath 测试。或者尝试协调更多的测试资源到当前项目。抑或者对类型重复、出错率较小的设备进行删减并与客户和团队进行沟通。

  组建测试设备资源池

  在确定测试设备资源之后,接下来测试人员会思考如何得到可用的设备,一般有以下方法:

  1. 虚拟

  模拟器主要透过硬件或软件使得一台计算机系统(称作主 host)在行为上类似于另外一台设备或程序(称作客户 guest)。模拟器一般允许在主系统上运行给客户系统设计的软件或者外部设备。虚拟机(VM)是计算机系统的仿真器,通过软件模拟具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,能提供物理计算机的功能。

  • 常用的 Android 模拟器有 android studio emulator,bluestack,genymotion,Nox App Player,MEmu App Player,koplayer
  • 常用的 iOS 模拟器有 xcode simulator
  • 常用的虚拟机有 Parallels,VMware Fusion,VirtualBox,QEMU

  一般来说不用刻意对虚拟技术进行定义和区别,测试人员更侧重于这种技术带来的结果,即可以通过软件/工具创造一个符合测试设备软件/硬件的环境。市场上手机、平板的配置五花八门,这个时候虚拟设备往往不能取代真机,而常常用于开发、测试环节的 debug。但是对于 PC、Mac 来说系统因素一般是产品运行的关键,开发和测试一般会倾向使用虚拟机完成工作任务。


图五 VMware Fusion 使用虚拟技术实现在 macOS 上使用 Windows 11

  (图片来源:https://blogs.vmware.com/teamfusion/2021/10/fusion-12-2-now-available.html

  2. 真机

  真实的搭载操作系统的硬件设备,可以是电脑、平板、手机。测试人员从终端用户的角度,对真机进行测试往往能发现真实场景下的兼容性问题。通过从市场完成采购,或者从设备平台进行租赁是常见的获取方法。真机常见于手机、平板等可移动设备的测试。

  3. 云测试平台

  云测试是基于云平台提供测试服务的新模式。面向企业及开发者,通过云端调配和使用测试工具、测试设备、测试工程师,以解决企业软件和系统的功能、兼容、性能、安全等全周期的测试需求。通过网络协议等手段便可以在本地连接托管到机房的目标真机进行测试活动。具有设备多、便捷、弱维护成本、即用型等特点。一般情况云测平台提供的是托管在机房的可移动手机、平板的真机。


图六一些常见的云测试平台对比

  执行兼容性测试方法

  基于应用场景进行测试方法选型

  人工测试即全手工测试,可能会依赖第三方的工具完成测试目标。手工测试工作量大,资源消耗严重,但是能发现明显的兼容问题,比较适合测试设备少、测试功能点复杂的场景。

  自动化测试,通过 selenium、appium、cypress 等自动化测试框架,实现测试用例的自动化,完成特定场景下兼容的验证。自动化测试较手动测试完成速度快,能节省人工成本,但是由于自动化测试用例的颗粒度较大,当前仍然无法完全取代手动测试。

  手动测试和自动测试可以同时存在于同一个项目的交付周期里,灵活调整执行方法,在某些程度上可以释放测试资源,提高测试效率和节约成本。


图七某项目背景下手动测试和自动测试结合的可持续测试流程

  最后

  兼容性测试并不是简单的以执行为主的测试类型,确定兼容性测试策略需要系统地对整个测试周期进行层级划分,基于数据或者事实基础在层级之间设置筛选条件,并且建立层级之间持续反馈的渠道和方法。


图八兼容性测试的分层思路

  测试人员从测试策略的角度,不仅需要了解兼容性测试的对象从产品层到业务层的筛选方式,也需要从测试目标、测试资源、技术实现的角度筛选可测对象列表,在执行层面通过虚拟、云测平台、真机等方式组建起测试设备资源,利用手动、自动或者相结合的测试方式,灵活地进行兼容性测试的交付。兼容性测试涉及到大量的设备、技术、执行方式的选型,完善兼容性测试是一个不断摸索和实践的过程。以上是我对兼容性测试的一些思考,欢迎大家讨论。