App前后台切换是我们平时常用的一个操作,比如:按手机的home键将应用置于后台、直接按手机电源键关闭屏幕或者通过最近打开的应用列表切换应用等,由此,我们可以得出结论:当app置于前台时,它的页面对我们是可见的;当app置于后台时,它的页面对我们是不可见的。

无论对于Android还是IOS,app前后台切换的流程都很长,因为牵扯到应用生命周期的管理,因此在测试过程中,可以帮我们发现一些意外的惊喜。不知道在你的App测试用例中是否包含前后台切换?如果没有,那从现在开始,你一定要将它补充到测试用例中。

这篇文章,会带着大家了解Android和IOS在前后台切换过程中,都经历了什么。这样当你在测试过程中,碰到相关问题时,也能有章可循。

Android前后台切换原理

早期的Android只有Activity用来展示页面元素,直到2011年Android3.0推出了Fragment的概念,不过Fragment并没有立即被用起来,大部分的开发者还是用Activity写Android页面,个人感觉是到Android4.x之后,Fragment才更多的运用到工作中。不过Fragment并不能单独的存在,其必须依赖在某一个Activity上,所以到后来GitHub上出现了好多Activity+Fragment的基础框架,其核心思想是:一个BaseActivity+多个Fragment。BaseActivity主要用于管理Fragment的生命周期,而Fragment用于实现不同的页面。

要理解Android前后台切换的原理,其实就需要理解Activity+Fragment的生命周期及其对应的方法,我这里根据Android官方文档Activity和Fragment的生命周期流程图,将前后台切换相关方法整合到一张图中,方便大家理解:

整理完之后发现方法流程还是很多的,但是大家肯定会有个直观感受,按一次home键,App执行了很多回调方法,并且方法有被重复调用的可能(后面我们再统一整理测试思路)。

IOS前后台切换原理

ios前后台切换,方法相对会少一些,但是思路和Android是类似的。我个人对IOS不是特别熟悉,所以只能从网上查了几篇写ios状态切换的文章,下面的图是我将它们整合之后,整理出来的:

前后台切换思路整理

对于没有任何移动端开发经验的人来说,看了上面Android和IOS的流程图,我猜测应该也不大理解其中的原理。所以我根据自己的经验,帮大家整理一些前后台切换的测试的思路及出发点,供大家参考:

  • 因为有重复调用同一个方法的可能,所以开发可能会用到标志位(用于标识是否是第一次调用)等,因此可以验证如下点:

    • 界面上的逻辑是否正确,比如:数据不一致。
    • 界面展示是否正确,比如:某些按钮不应该展示,却展示了。
    • 因为有可能新创建对象,所以需要关注是否有内存泄漏存在。
    • 是否会造成异常的网络请求,比如重复请求同一接口。
  • 在app将要置于后台时,会保存当前界面上的数据,等到app再次回到前台时,重新渲染:
    • 验证前后台切换后,界面数据是否被清空。
    • 另外界面数据展示是否正常。
  • 其他
    • 是否会出现crash。
    • 是否会造成app的专项数据异常,比如:cpu、耗电量等。

总结

软件测试,其实一定程度上就是用探索性的思路,挖掘更不容易出现的"惊喜",因此,我觉得"App前后台"切换绝对是一个不错的探索思路。大家有什么更好的想法或问题,欢迎在评论区留言交流。

关注【公众号:软件测试布道师】,回复【python】,即可获取【python自动化及编程实践资料】

【移动测试】你的测试用例中,是否包含App前后台切换的更多相关文章

  1. Web测试的常用测试用例与知识

    1. Web测试中关于登录的测试 2. 搜索功能测试用例设计 3. 翻页功能测试用例 4. 输入框的测试 5. Web测试的常用的检查点 6. 用户及权限管理功能常规测试方法 7. Web测试之兼容性 ...

  2. TPA测试项目管理系统-测试用例管理

            Test Project Administrator(简称TPA)是经纬恒润自主研发的一款专业的测试项目管理工具,目前已广泛的应用于国内二十余个整车厂和零部件供应商.它可以管理测试过程 ...

  3. ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案

    好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...

  4. js中A包含B的写法与分割字符串的方法

    在java中A包含B的写法 if(A.contains(B)){ ... } 在js中没有contains方法,应该使用下面这种方法: var an = "传染性.潜伏性.破坏性" ...

  5. 怎样高效地去判断Array中是否包含某个值?

    问题 怎样去判断Array(无序)中是否包含某个值呢? 这是一个在Java中经常被问到的问题.它也是Stack Overflow上投票前几的一个问题.下面将展示投票前几的几个回答,这些回答使用不同的方 ...

  6. 161101、在Java中如何高效判断数组中是否包含某个元素

    如何检查一个数组(无序)是否包含一个特定的值?这是一个在Java中经常用到的并且非常有用的操作.同时,这个问题在Stack Overflow中也是一个非常热门的问题.在投票比较高的几个答案中给出了几种 ...

  7. [C#]判断字符串中是否包含中文

    关键代码: /// <summary> /// 判断字符串中是否包含中文 /// </summary> /// <param name="str"&g ...

  8. iOS 判断数组array中是否包含元素a,取出a在array中的下标+数组方法详解

    目前找到来4个解决办法,第三个尤为简单方便 NSArray * arr = @["]; //是否包含 "]) { NSInteger index = [arr indexOfObj ...

  9. 实战经验丨CTF中文件包含的技巧总结

    站在巨人的肩头才会看见更远的世界,这是一篇技术牛人对CTF比赛中文件包含的内容总结,主要是对一些包含点的原理和特征进行归纳分析,并结合实际的例子来讲解如何绕过,全面细致,通俗易懂,掌握这个新技能定会让 ...

随机推荐

  1. Fragment学习(一) :生命周期

    一. 何为Fragment Fragment是activity的界面中的一部分或一种行为.你可以把多个Fragment们组合到一个Activity中来创建一个多面界面,并且你可以在多个Activity ...

  2. Python--day24--复习

  3. Codeforces Round #177 (Div. 1 + Div. 2)

    A. Polo the Penguin and Segments 模拟. B. Polo the Penguin and Matrix 每个数字模d余数必须一样. 枚举结果,可计算操作次数,取最小. ...

  4. H3C 静态路由配置示例

  5. C# 使用汇编

    本文告诉大家如何在 C# 里面使用汇编代码 请看 C#嵌入x86汇编--一个GPIO接口的实现 - 云+社区 - 腾讯云 C# inline-asm / 嵌入x86汇编 - 苏璃 - CSDN博客 通 ...

  6. dotnet 通过 WMI 获取系统启动的服务

    本文告诉大家如何通过 WMI 获取系统启动的服务 通过 Win32_Service 可以获取系统启动的服务 获取的时候只需要拿Caption和State就可以 var mc = "Win32 ...

  7. ios设备iframe无法滚动

    在使用IFRAME,你需要使用一个元素(如DIV)来包装他们 <div class="scroll-wrapper"> <iframe src="&qu ...

  8. destoon信息或者公司归属多个类别的解决方式

    有时候,一条信息属对应于多个类别,在destoon原生系统里是没有这个解决方案 在公司行业类别选择的地方实现了这个功能,但是选择体验不太好,不符合我当前的需求,目前我写了如下解决方案 系统代码如下: ...

  9. Keras lstm 文本分类示例

    #基于IMDB数据集的简单文本分类任务 #一层embedding层+一层lstm层+一层全连接层 #基于Keras 2.1.1 Tensorflow 1.4.0 代码: '''Trains an LS ...

  10. VRchat模型之unity

    VRChat模型制作及上传总篇(包含总流程和所需插件):https://www.cnblogs.com/raitorei/p/12015876.html 0.新建工程, 导入VRCSDK及动态骨骼插件 ...