几种Android截屏方法

  最近参与了两项工作,一个是android自动化测试POC,一个是配置化无埋点信息采集方案调研。自动化测试和配置化无埋点有两个共同的场景,也可以说是前提,就是手机屏幕截图。自动化测试需要通过截图来设置测试的控件,有的厂商就是通过截取的屏幕截图比对,以认定自动化测试是否通过。而配置化无埋点是通过服务端下发的配置文件来确定对哪些行为进行采集,而配置文件的生成正式通过远程绘制手机屏幕,进而由业务人员点选哪些控件进行统计。
  下面把近期了解的几个android截屏方法分享一下。
方法一:MonkeyRunner的MonkeyDevice
  提到MonkeyRunner,很多人会想到Monkey。 Monkey是一个Android提供的一个命令行工具,可以运行在模拟器里或实际设备中。通过adbshell向系统发送伪随机的用户事件流,自动化的实现应用程序的兼容性和压力测试。与Monkey相比,MonkeyRunner的功能更加强大,使用也更加灵活。
- 基于MonkeyRunner提供的API接口,开发者可以开发自动化测试程序来控制设备和应用程序。
- 可以同时向多个设备发送命令
- MonkeyRunner提供了一个MonkeyDevice类,可以方便的对屏幕进行截图。不仅如此,MonkeyRunner还可以将截图与特定的图进行比对,以确定前后两次测试结果是否一致
- MonkeyRunner的API还支持自定义扩展。
  
基于以上几点,我猜测市面上一些自动化测试工具正是基于对MonkeyRunner API的扩展,尤其是以截图比对作为主要的自动化测试方法的自动化测试工具。

方法二:Robotium的Solo类
Robotium是基于Android测试框架InstrumentationTestCase2进行的2次封装。截图非常简单,只需要两行代码
  Solo solo = new Solo( instrumentation, activity );
  solo.startScreenshotSequence( “screen” );
即可将当前屏幕截图保存到手机上。其基本原理是获取顶部的的所有视图,然后筛选出用户可见的最近的视图,保存为bitmap,最后以文件形式存到固定目录下。具体可以看Robotium源码。https://github.com/RobotiumTech/robotium。

方法三:开源项目minicap
Minicap的技术原理见https://github.com/openstf/minicap。使用方法见http://blog.csdn.net/itfootball/article/details/47658171。亲测,非常好用,不仅可以通过usb接口截屏,通过局域网也可以截屏。目前还没有找到防止这种截屏方法进行截屏的方案。欢迎各位大侠提供方案。亲测,通过这种方法可以对所有国内大银行的手机银行类APP进行截屏,即使这些APP上已经有了防截屏的代码。
  

你可能感兴趣的:(移动开发,自动化测试)