测试金字塔新解之移动无线应用测试

简介:
 在看过吴穹对2014年测试的展望之后真的对于移动无线测试的未来大有信心。在文章中再次看到了熟悉的“测试金字塔”,该金字塔是分层测试思想的重要钥匙。我自己是移动互联网出身的测试,所以突发奇想从移动无线应用的测试角度重新来审视了下该金字塔并做了扩展,希望对于大家有一定的帮助。
  首先我们先来看下经典金字塔,如下图所示:
  这对于传统互联网的测试而言非常清晰的一个层次结构,但我相信对于很多移动互联网的同学们而言也许就多少有些迷茫,这不单单是因为技术上的实现不同于以前,也有些是名词定义问题。经过我思考之后,发现发现移动互联网的应用测试角度出发可以从该图上拆分出很多的东西,并且图还有些小小的变化,如下图所示:
  单从这个图上来看的话的确是比较迷惑的,那么我们接下来就一层一层来剥,以下内容很黄很暴力,大家做好准备了吗?
  我们先来说第一层:UI层。UI层顾名思义就是用户看到产品时候所长的样子,从技术实现角度而言,那就是产品的一层皮。那么UI层在移动无线应用的测试中分成哪些主要的部分呢?
  1.用户体验
  2.控件显示
  3.功能交互
  4.代码接口
  5.用户体验
  移动互联网应用是一款产品,相对其他类型的产品而言,其用户体验已经到达了举足轻重的地步,在我的新书《大话测试——移动互联网应用测试指南》中有单独阐述用户体验的一个章节,有兴趣的朋友可以等出版之后仔细阅读。
  现在各个公司也出现了大量的和用户体验相关的岗位,比如“产品体验师”、“产品设计师”、“交互设计师”等,也越来越说明着用户体验对于移动无线应用的重要性。
  很多人觉得用户体验好就是一定要画面优美,交互酷炫,界面上没有出现明显的瑕疵就可以了,虽然没有错,但这些仅仅是用户体验的表面一层。我们来看下以下的几个例子。还是那句老话,也许你觉得他们的成功或失败与用户体验关系不大,但其实从移动无线应用能够成功的情况来看,用户量、用户黏性才是最主要的,这些归根结底还是用户体验。在我的书中着实已经吐槽了非常多的应用了,在这里就再吐两个大家都认识的、知名度很高的应用。我们使用无线应用的时候难免碰见网络不好的情况,这也是现在大量测试工程师正头疼的事情(幸好fiddler和Charles能够为我们解决这个问题),但我相信如果我们在网络不太好,却看到以下界面显示的时候,肯定恨不得想摔手机
  也许我不说,大家也能够猜得出来是哪家的应用了吧。我几乎每次在餐馆想要使用一些优惠券的时候就会看到这个界面,恨之入骨。难道网络慢弹出个提示就那么难吗?难道为用户考虑一下就那么难吗?你能够告诉我“createorderxxx”这串外星文用户真的认识是什么吗?所谓用户体验好,就是要让用户觉得应用在说“人话”,而不是“火星语”。你采取如下方法都比现在的做法好:
  可以选择在用户点击的时候就向服务器做请求,此时并不跳转界面,短时间超时之后给出一个“网络差”的提示
  可以选择进入这个界面,但不要给用户看到“火星文”,短期超时之后再给出一个“网络差”的提示,并自动返回上一页
  说着说着我的火气就上来了,不过还有更可气的了。我们来看下面这个应用的行为。
  硕大的logo,这个是什么场景呢?现在支付宝和“喜士多”、“7-11”等多家便利店合作了,不但方便了大家的购物,同时也减少了零钱和假币的流通,的确是个大好事。便利店网络不好的情况也尤其多,当我选择好了很多商品,最后拿出支付宝,看到这个鸟样,我心里真的千万只草泥马奔过。但此时想想没有关系阿,我作为iOS高大上的用户可以杀进程,于是我熟练的杀掉支付宝的进程再次打开,事实证明我无法改变这个鸟样。我真的很焦虑,我知道支付宝要联网,但它不是一个网游吧,为什么没有网你就不能让我打开呢?我真的觉得让我看到一个进入的界面或者设置一个短时间就超时都比我看着一坨黑色上面有个“菊花”强数百倍吧,于是,我的手机真的被我摔坏了。
  控件显示 现在往往很多测试说测UI了就是拿过来看看界面显示对不对,所谓UI Automation也就是模拟用户的操作,但是真的仅仅只是如此吗?Android的应用界面一切都是以View来构成:
  请问有多少工程师关心过这些所谓的界面上的控件显示的到底对不对呢?像素值和比例与需求一致吗?我们一般可以通过三步来解决这个的问题。
  A. 先验证每个界面显示之后控件是否存在
  B. 再验证这些控件具体的位置、大是否正确
  C. 最后验证整体显示是否正确
  其中B可以使用如下所示的这个类来验证:
  而C的话我更偏向于自己去写,而不是用MonkeyRunner自带的图片对比方法,其精准度不高,很难判断图片是否真的有细小的差异性,我自己更偏爱用PIL库。iOS的话Xcode也自带了Inspector可做相关验证。
  功能交互
  手动测试,自动化的话可用框架太多。Robotium,Instrumentation,Appium,这里不多做解释。
  代码接口
  某些应用往往逻辑很复杂,但界面却很简单明了。其复杂程度体现在它的逻辑和数据场景。这类情况对于测试工程师而言尤其的痛苦,那么自然我们就可以跳过界面层来做功能代码的接口测试。
  接着我们来说下Service层。与传统金字塔描述的Service不同的是,移动互联网的应用同时存在“Service”和“Inner Service”(感谢晋恒温提供这样一个我觉得很不错的新词)这里的Inner Service主要指的是Android基础组建里面也有一个叫Service
  这里提到Inner Service这个概念就是为了和服务器端的Service区别开来。在这个金字塔中Service被虚线所区分开,原因有两个:
  Service不再单纯的指后台服务器的Service
  不是所有应用都有Inner Service或者Service
  其中后台的服务Service测试方法已经相对成熟,参考的资料也相对多,而Inner Service的测试相比困难很多,除了监听Service是否正确启动以及反馈之外,还有很多测试细节可挖掘。
  最后就是共同的Unit了。其实我们拨开金字塔的上面几层,到Unit test的时候就已经和应用所在的平台的特性关系不大了。Android使用Junit Test,iOS使用Xcode自带的OCunit,WP使用Windows Phone Toolkit Test Framework等。除了编写测试用例的语言不同以外,其用例的设计方法等已经不再去考虑Android、iOS、WP等系统架构或其他特性上的区别了。
  我个人是认为移动无线应用的金字塔理念不仅仅适用于功能测试,更多的也适用于压力、性能、自动化甚至安全等测试中。当我们需要加大测试颗粒度的时候,那么借助分层的理念往往能够让我们豁然开朗,找到新的突破口。


最新内容请见作者的GitHub页:http://qaseven.github.io/

相关文章
|
23天前
|
敏捷开发 测试技术 持续交付
探索自动化测试在敏捷开发中的应用与挑战
本文深入探讨了自动化测试在现代软件开发流程,特别是敏捷开发环境中的重要作用和面临的挑战。通过分析自动化测试的基本原理、实施策略以及在实际项目中的应用案例,揭示了其在提高软件质量和加速产品交付方面的巨大潜力。同时,文章也指出了自动化测试实施过程中可能遇到的技术难题、成本考量及团队协作问题,并提出了相应的解决策略,为软件开发团队提供了有价值的参考和指导。
|
28天前
|
编解码 测试技术 开发工具
测试 iPhone 应用在不同屏幕尺寸和分辨率下的响应式效果
【10月更文挑战第23天】测试 iPhone 应用在不同屏幕尺寸和分辨率下的响应式效果是确保应用质量和用户体验的重要环节。通过手动测试、自动化测试、视觉效果评估、性能测试、用户体验测试等多种方法的综合运用,能够全面地发现应用在响应式效果方面存在的问题,并及时进行解决和优化。同时,持续的测试和优化也是不断提升应用质量和用户满意度的关键。
|
3月前
|
数据采集 人工智能 安全
软件测试中的人工智能应用与挑战
在这篇文章中,我们将深入探讨人工智能(AI)在软件测试中的应用及其所面临的挑战。通过分析当前的技术趋势和具体案例,揭示AI如何提高测试效率和准确性,并指出在实施过程中遇到的主要问题及可能的解决途径。
61 1
|
12天前
|
自然语言处理 安全 测试技术
基于大模型的应用的测试的一些注意事项
大模型应用测试需注意三大冲突:时间敏感性冲突,即模型数据可能随时间变得过时;数据真实性冲突,指训练数据中可能存在虚假信息,影响模型准确性;数据一致性冲突,表现为模型对语义相同但句法不同的输入反应不一。测试时应针对这些问题设计用例,确保模型性能。
41 4
|
3月前
|
测试技术
探索软件测试的奥秘:从基础理论到实践应用
【9月更文挑战第28天】在数字化时代,软件已成为我们生活中不可或缺的一部分。然而,随着软件复杂性的增加,确保其质量和可靠性变得日益重要。本文将带你深入了解软件测试的核心概念、方法论以及如何在实际工作中运用这些知识来提升软件质量。无论你是软件测试新手还是希望深化理解,这篇文章都将为你提供宝贵的洞见和实用技巧。
|
25天前
|
前端开发 数据管理 测试技术
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第27天】本文介绍了前端自动化测试中Jest和Cypress的实战应用与最佳实践。Jest适合React应用的单元测试和快照测试,Cypress则擅长端到端测试,模拟用户交互。通过结合使用这两种工具,可以有效提升代码质量和开发效率。最佳实践包括单元测试与集成测试结合、快照测试、并行执行、代码覆盖率分析、测试环境管理和测试数据管理。
43 2
|
25天前
|
Web App开发 定位技术 iOS开发
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
25 1
|
26天前
|
前端开发 JavaScript 数据可视化
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第26天】前端自动化测试在现代软件开发中至关重要,Jest和Cypress分别是单元测试和端到端测试的流行工具。本文通过解答一系列问题,介绍Jest与Cypress的实战应用与最佳实践,帮助开发者提高测试效率和代码质量。
32 2
|
2月前
|
监控 测试技术 持续交付
掌握跨平台测试策略:确保应用的无缝体验
【10月更文挑战第14天】在多元化设备和操作系统的今天,跨平台测试策略成为确保应用质量和性能的关键。本文探讨了跨平台测试的重要性、核心优势及实施步骤,涵盖Web、移动和桌面应用的测试方法,帮助开发者提高应用的无缝体验。
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
探索AI在软件测试中的创新应用与实践###
本文旨在探讨人工智能(AI)技术如何革新软件测试领域,提升测试效率、质量与覆盖范围。通过深入分析AI驱动的自动化测试工具、智能化缺陷预测模型及持续集成/持续部署(CI/CD)流程优化等关键方面,本研究揭示了AI技术在解决传统软件测试痛点中的潜力与价值。文章首先概述了软件测试的重要性和当前面临的挑战,随后详细介绍了AI技术在测试用例生成、执行、结果分析及维护中的应用实例,并展望了未来AI与软件测试深度融合的趋势,强调了技术伦理与质量控制的重要性。本文为软件开发与测试团队提供了关于如何有效利用AI技术提升测试效能的实践指南。 ###
下一篇
无影云桌面