Android GUI传统自动化测试与UGA方法的比较

发表于:2020-9-17 10:01

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:SELF_REDEEM    来源:CSDN

  在加入学校的软件测试实验室后,最开始我选择了Android移动应用测试,除了平时进行一些简单的Android开发了解Android应用的基本原理之外,做测试最重要的还是掌握测试方法以及技巧,包括工具的使用。在之前的暑假期间,导师给了我一篇论文,是一篇南京大学李秀江的硕士毕业论文,关于AndroidGUI自动化测试。 在此记录一下自己阅读的成果,以备以后可以使用到。
  该论文是2015年发布的,针对的对象就是Android自动化测试。不同之处在于,该论文中提出了一种比较新颖的自动化测试方法,基于用户执行踪迹重放的移动应用测试方法,以下简称UGA。在目前的绝大多数AndroidGUI自动化测试中。很多自动化测试工具都是通过编写脚本并定位页面中的控件进行自动化测试。例如比较常见的工具Appium。是通过抓取控件进行点击滑动等操作来进行GUI的自动化测试的。传统的移动应用自动化测试技术的一般思路是利用GUI模型,将当前的GUI界面看成状态,把用户的操作(如点击按钮)看作转换。但一些用户交互无法被抽象成GUI模型,例如一些与传感器相关的用户交互无法在GUI模型中自动实现。需要显式的人工介入,以保证应用达到特定的GUI状态。例如微信的摇一摇功能,不能通过抓取控件来实现状态的转变。
  因此传统的移动测试将希望寄托在人工测试上,人工测试检验出来的BUG都是真实的,但其弊端也是显而易见的。其一是测试成本高,其二是错误率高。
  本篇论文正是针对这样的问题提出的,即结合人工方法与自动化测试的方法,消除工具带来的弊端。最重要的是该论文中提出的方法并不是通过抓取控件来实现自动化测试的。而是一种录制回放的方式。
  1. 传统自动化测试与UGA方法的比较
  传统自动化测试对于应用的空间没有一个全局性的认识,因此自动化的测试可能在探索应用状态的过程中失去方向。除此之外,自动化很难达到一些需要复杂交互才能达到的应用状态,例如,使用微信“摇一摇”功能时的应用状态,使用自动化测试的时候几乎不能触发。而UGA方法则是记录人工执行过程,并选择特定的停止点,再进行自动化测试。这意味着需要人工触发的一些特定的复杂交互状态通过特定的停止点也可以在测试的过程中覆盖到。只需要找到人工触发的复杂交互状态的一个活动点,并以该活动点为起点进行自动化测试。以下是UGA方法的简单图示,具体参见论文。
  其中实现录制重放需要用到一个工具,RERAN,它的工作原理如上图所示,Android操作系统是基于Linux内核的,我们可以使用SDK中的adb工具连接手机并使用getevent命令将系统中带时间戳的内核事件记录下来,并保存在文件中。此时我们还需要一个重放的程序来使Android系统按时间戳顺序读入内核事件,因此来实现重放。关于RERAN的使用,我在github中找到了对应的项目,项目地址https://github.com/lorenzogomez/RERAN。需要注意的是,由于年限比较久远,所以其中的Java程序有一点问题。我翻墙在国外的论坛中找到了修正的版本。百度云链接为https://pan.baidu.com/s/1Fwvz9DzPIgNHpeRb5vnkrw。
  下载后直接直接使用该工具,这是我对使用过程的一个简单记录,更多的可以参照github中的使用教程。
  2.基于用户执行踪迹重放的移动应用测试方法之RERAN的应用与实现
  交叉编译重播文件:/yourpath/to/replay.c arm-none-linux-gnueabi-gcc -static -o replay.exe replay.c
  推送重播程序:adb push D:\RERAN\replay.exe /data/local
  录制内核事件重定向到文件中:adb shell getevent -tt> D:\RERAN\recordedEvents.txt
  kill掉getevent进程:adb shell ps
  找到getevent的进程ID然后kill:adb shell kill PID
  编译.Java文件:javac Translate.java
  翻译:\yourpath\to\Translate java Translate D:\RERAN\recordedEvents.txt D:\RERAN\translatedEvents.txt
  推送翻译后的文件:adb push D:\RERAN\translatedEvents.txt /data/local
  执行:adb shell /data/local/./replay.exe /data/local/translatedEvents.txt
  和我一起研读的同学使用该工具录制了一段愤怒的小鸟的视频,录制这个游戏是因为愤怒的小鸟游戏中是没有控件的。更能表现这个工具的强大之处。其中第一遍是用户手动操作,录入内核事件,第二遍是通过回放内核事件实现的。以下是视频链接https://pan.baidu.com/s/17OtHdQ3WLTClZ8QfK9bGYw。
  当然,录制回放只是UGA方法中的一部分,但也是最核心的一部分,实现了可以根据用户的执行踪迹录制回放后,就可以选择回放到哪个停止点,在该停止点进行自动化测试。从而消除因不能达到特定状态而给自动化测试带来的障碍。
  最后总结UGA方法的核心步骤。
  3.UGA方法工作的步骤实现
  (1) 记录用户的执行踪迹。
  记录的信息要能够尽可能地还原用户当时操作的情况,记录的动作类型也要全面,除了屏幕上的操作信息以外,还要记录使用到的相关的信息,例如,GPS信息,震动传感器信息等涉及到的信息。
  (2) 选择合适的停止点。
  我觉得这是UGA方法的核心之一,只有选择了合适的停止点,才能真正发挥UGA方法的作用。选择的停止点除了自动化测试能探索到的状态以外,尽量选择自动化测试遍历不到的点,也就是一些自动化测试不能通过复杂交互触发但能通过人工执行触发的点。这样才能把测试的覆盖率提高到最大。
  (3) 执行自动化测试。
  普通自动化测试能够覆盖的状态或者说活动自然不用多说,直接执行自动化测试就可以了。使用UGA方法的亮点在于,在选择了一些需要复杂交互才能触发的状态为停止点后,以该停止点为起点,执行自动化测试覆盖该停止点相关联的一些功能或者说是状态。如此一来,普通自动化测试能覆盖到的状态都覆盖到了,普通自动化测试无法覆盖的方法通过人工执行后记录的停止点也覆盖到了,那么测试的覆盖率必然就会大幅提高。
  本篇论文讨论的主要是这种新的自动化测试思想,具体的自动化测试方法就不在此详细讨论了。我觉得使用Appium工具也可以,主要是使用UGA方法提高测试的覆盖率。不过在github上,RERAN受到的关注很少,另外,使用RERAN工具需要向Android手机中推送重放程序,由于Android系统版本不断更新后安全的限制,使用adb push命令可能会推送失败。毕竟是2015年论文,那时候的Android版本已经很老了。在国外的一个技术论坛上也看到有人评价说RERAN工具已经过时了,现在依然绝大部分的自动化测试工具是通过获取控件来进行自动化测试的。不过工具始终是工具,这篇论文提出的新颖测试方法我觉得是很有价值和创新的。思路应该优于工具,如果可以使用新的录制重放的工具或者说是方法的话,那么这篇论文提出的UGA方法必然是要优于传统的自动化测试方法的。但是目前,这一块儿的开拓者并不多,这种新颖的测试方法仍然具有很大的开拓空间。

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号