1 / 22

浅谈我与Android相处的点滴

浅谈我与Android相处的点滴. 浅谈我与Android相处的点滴. 一、个人自动化经验分享. 二、 Android 基本架构了解. 三、 MonkeyTest 指令学习. 四、 MonkeyRunner 测试知识. 五、写简单 Python 测试脚本. 六、 ADB 与批处理的联系. 七、小工具制作(讲 1 实例). Android 自动化工作计划与目标. Android自动化探索 目的: 1. 实现性能测试及压力测试 2. 实现功能的自动化测试 3. 提高生产力,解放人力 4. 为大规模自动化测试做技术探索和储备 策略: 1. 熟悉android

draco
Download Presentation

浅谈我与Android相处的点滴

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 浅谈我与Android相处的点滴 浅谈我与Android相处的点滴 一、个人自动化经验分享 二、Android基本架构了解 三、MonkeyTest指令学习 四、MonkeyRunner测试知识 五、写简单Python测试脚本 六、ADB与批处理的联系 七、小工具制作(讲1实例)

  2. Android自动化工作计划与目标 Android自动化探索 目的: 1. 实现性能测试及压力测试 2. 实现功能的自动化测试 3. 提高生产力,解放人力 4. 为大规模自动化测试做技术探索和储备 策略: 1. 熟悉android 2. 选择脚本语言 3. 切入某个点实现自动化 4. 丰富更多功能的自动化 5. 实现压力测试 培养人员时间规划: 1. 熟悉android 2012.7.10-2012.07.15 2. 深入了解android testing 相关知识 2012.07.16 – 2012.07.31 3. 编写一个功能点的自动化 2012.08.01 – 2012.08.10 4. 熟悉性能压力测试环境和方法 2012.08.11 – 2012.08.20 5. 编写一个性能压力test case 2012.08.30 – 2012.08.31 6. 丰富功能点和性能等test case 2012.09.01 –后续 措施: 1. 学习:\\192.168.1.100\05 系统测试\Android测试 2. 浏览:http://www.apkbus.com/forum.php?mod=collection&action=view&ctid=1中测试相关部分。

  3. Android自动化工作计划与目标 一、了解android的大体框架 1.应用程序 2.应用程序框架 3.程序库 4.android运行库 5.Linux内核 二、安装Android开发环境,根据例子运行了一个Hello World 三、熟悉Android Testing 相关知识 1.工具相关:DDMS、Itestin、adroidrobot、monkey、monkeyrunner、以及其他对比工具等等 2.test package 主要是编写test代码进行测试 例子:hello test 对HelloAndroid进行了测试并体现运行后的结果 3.Monkeyrunner: monkeyrunner工具则是提供一个API来编写程序,控制一个Android从外部设备或模拟器的Android代码。通过monkeyrunner,可以编写一个Python程序,安装一个Android应用程序或测试包,运行它,发送按键到它,需要它的用户界面图片,并将截图存储在工作站。monkeyrunner工具则是主要被设计用来测试应用程序和设备的功能/框架水平,运行单元测试套件。一个API测试设备与Python programs一个用Python编写的进行api测试的程序这是一个简单的monkeyrunner程序,连接到一个设备,创建一个MonkeyDevice对象。使用MonkeyDevice对象,程序来安装一个Android应用程序包,运行它的一个活动,并向其发送按键事件来达到我们的测试目的。

  4. Android系统结构 ① 应用程序层 ② 应用程序框架层 ③ 系统运行库层 ④ linux核心层

  5. Android本身是一套软件堆迭(Software Stack),或称为「软件迭层架构」,迭层主要分成三层:操作系统、中间件、应用程序。 Android本身是一套软件堆迭(Software Stack),或称为「软件迭层架构」,迭层主要分成三层:操作系统、中间件、应用程序。 Android系统结构 Android构架划分 Android构架划分 • Ⅰ. Applications【应用程序层】: 用户直接使用的功能,谷歌提供了基本应用,比如电话、联系人、短信、邮件、浏览器等,还有无数第三方应用...JAVA开发 • Ⅰ. Applications【应用程序层】: 用户直接使用的功能,谷歌提供了基本应用,比如电话、联系人、短信、邮件、浏览器等,还有无数第三方应用...JAVA开发 • Ⅱ.Application Framework【应用架构层】: 开发应用程序使用的基础组件,相当于供应用程序调用的API,JAVA开发,包括: 1. 丰富的界面控件,如列表、按钮、文本框、内嵌浏览器等等。 2. Content Providers,数据存储组件,应用程序可以通过Content Providers分享数据 给其他应用,也可以访问其他程序的数据,包括系统基本应用提供的数据,如联系人, 记事本等数据。 3. A Resouce Manager, 资源管理器,帮助应用程序访问图片,布局文件等资源。 4. A Notification Manager, 应用程序可以通过Notification Manager在主界面的状 态栏上显示一个自定义的提示信息,用户点击提示信息就能进入程序。 5. An Activity Manager, 主要负责管理应用程序的生命周期和程序调用栈。 • Ⅱ.Application Framework【应用架构层】: 开发应用程序使用的基础组件,相当于供应用程序调用的API,JAVA开发,包括: 1. 丰富的界面控件,如列表、按钮、文本框、内嵌浏览器等等。 2. Content Providers,数据存储组件,应用程序可以通过Content Providers分享数据 给其他应用,也可以访问其他程序的数据,包括系统基本应用提供的数据,如联系人, 记事本等数据。 3. A Resouce Manager, 资源管理器,帮助应用程序访问图片,布局文件等资源。 4. A Notification Manager, 应用程序可以通过Notification Manager在主界面的状 态栏上显示一个自定义的提示信息,用户点击提示信息就能进入程序。 5. An Activity Manager, 主要负责管理应用程序的生命周期和程序调用栈。

  6. Android系统结构 Android构架划分 Android构架划分 • Ⅲ. Android Runtime【系统运行库层】: 1、Android Runtime【运行环境】 应用程序的运行空间,包括一个实现JAVA语言大多数功能的核心库;以及一个类似JAVA虚拟机的Dalvik虚拟机,所以应用程序都是运行在虚拟机中运行。Dalvik虚拟机针对移动设备做过优化,每个程序单独运行在一个虚拟机中,提高系统的安全性和稳定性,但是相对牺牲了一部分性能。Dalvik VM底层基于Linux核心的线层管理和内存管理等功能。 • Ⅲ. Android Runtime【系统运行库层】: 1、Android Runtime【运行环境】 应用程序的运行空间,包括一个实现JAVA语言大多数功能的核心库;以及一个类似JAVA虚拟机的Dalvik虚拟机,所以应用程序都是运行在虚拟机中运行。Dalvik虚拟机针对移动设备做过优化,每个程序单独运行在一个虚拟机中,提高系统的安全性和稳定性,但是相对牺牲了一部分性能。Dalvik VM底层基于Linux核心的线层管理和内存管理等功能。 2、Libraries【库文件界面】: 一系列的C/C++库,相当于Android系统在Linux核心系统上的功能扩展,为Application Framework层的许多功能提供支持,通过JNI供JAVA调用。包括: ● System C library - libc, 标准C系统库,针对linux嵌入式设备优化。 ● Media Libraries - 基于OpenCore的多媒体库,提供视频、音频、图片的播放记录等功能, 支持MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG等 ● Surface Manager - 管理显示子系统模块,包括多层程序2D,3D图层混合显示。。。 ● LibWebCore - 大名鼎鼎的webkit浏览器内核 ● SGL - 底层2D图片引擎。 ● 3D libraries - 基于OpenGL ES 1.0 APIs; 包括硬件3D加速(硬件支持的话), 或者优化的3D软解析 ● FreeType - 字体引擎 ● SQLite - 基于SQL的轻量级数据库 2、Libraries【库文件界面】: 一系列的C/C++库,相当于Android系统在Linux核心系统上的功能扩展,为Application Framework层的许多功能提供支持,通过JNI供JAVA调用。包括: ● System C library - libc, 标准C系统库,针对linux嵌入式设备优化。 ● Media Libraries - 基于OpenCore的多媒体库,提供视频、音频、图片的播放记录等功能, 支持MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG等 ● Surface Manager - 管理显示子系统模块,包括多层程序2D,3D图层混合显示。。。 ● LibWebCore - 大名鼎鼎的webkit浏览器内核 ● SGL - 底层2D图片引擎。 ● 3D libraries - 基于OpenGL ES 1.0 APIs; 包括硬件3D加速(硬件支持的话), 或者优化的3D软解析 ● FreeType - 字体引擎 ● SQLite - 基于SQL的轻量级数据库

  7. Android系统结构 Android构架划分 Android构架划分 • Ⅳ. Linux Kernel【linux核心层】: Linux核心,Android的基础,基于2.6版本,基本的操作系统组件,包括内存管理,进程管理,存储管理,网络栈,驱动模型等等 • Ⅳ. Linux Kernel【linux核心层】: Linux核心,Android的基础,基于2.6版本,基本的操作系统组件,包括内存管理,进程管理,存储管理,网络栈,驱动模型等等

  8. monkey的基本用法 • 随机测试的使用方法比较简单,可参考下述参数表,这里举一个例子进行说明。 • 假设现在要KingsoftClips,我们可输入如下命令: • adb shell monkey -p cn.wps.clip --pct-touch 50 --pct-motion 50 -v 1000 • 命令解释:↓ • -p后面接的是要测试的包名,金山复制助手的包名为cn.wps.clip • --pct-touch 50指的是touch事件所占的百分比为50 • 同理--pct-motion 50指的是motion事件所占的百分比为50 • -v使反馈信息级别增加1,其默认值是0 • 而最后的1000,则表示发送1000个随机事件。 • 详情可参照下面提供的参数表格。 • 注意:自己指定的百分比之和不能超过100,否则会出错

  9. monkey对应参数表 adb shell monkey -s 1001 -p cn.wps.clip -process-after-error --pct-trackball 30 -v --throttle 500 --pct-motion 50 --pct-syskeys 20 --throttle 500 20000

  10. monkeyRunner的基本用法 在python中首先要导入Android的相关组件: from com.android.monkeyrunner import MonkeyRunner from com.android.monkeyrunner import MonkeyDevice from com.android.monkeyrunner import MonkeyImage 连接设备:device = MonkeyRunner.waitForConnection() 安装:device.installPackage('D:/AppInstall/KingsoftClip.apk') 卸载:device.removePackage ('cn.wps.clip') 启动Activity:device.startActivity(component='cn.wps.clip/.CloudClipActivity') Touch动作:device.touch(200,200,'DOWN_AND_UP') Drag动作:device.drag((250, 650),(250,150),0,20) 系统按键:device.press('KEYCODE_MENU') 输入字符:device.type('Bobby') 截图:result = device.takeSnapshot() result.writeToFile('D:/AppInstall/shot'+ time +'.png','png')

  11. Python-测试脚本案例

  12. monkeyRunner-Python录制与回放 运行环境:ADB+SDK包下的Tools工具

  13. 批处理-脚本案例 将下面代码保存为.bat或.cmd格式的文件,双击即可快速导出手机LOG信息,具体需要什么LOG可自己修改。

  14. 批处理与ADB之间的联系 .adb devices:查看当前已与PC端连接的设备序列号 .adb -s XX:加-s可对单一设备执行命令(XX指设备序列号) .adb install -r *.apk:安装应用程序(带-r参数可以覆盖安装) .adb uninstall cn.wps.clip:卸载应用程序(注意要用内部包名) .adb remount:(重新挂载系统分区,使系统分区重新可写) .adb shell rm system/app/ *.apk:删除系统应用(需要root) .adb shell am start -n 包名/包名+类名:启动一个Activity .adb pull /data/data/cn.wps.clip/databases/download.db 【导出应用的下载数据文件】 .常用抓取LOG命令 (1)adb shell top -m 10 -n 20 > c:\log\top.txt(top:打印CPU占用率最高的几个进程) (2)adb shell dumpsys > dumpsys.txt (dumpstate:打印手机现在的状态,包含了很多内容,比如CPU占用率,当前运行到哪一行代码,系统的属性等,“系统忙,....无响应”很多是由于死锁引起的,dumpstate对解决这类问题很有用;) (3)adb shell logcat /proc/kmsg | tee c:\log\kmsg.txt (kmsg 、kernel:打印的是内核信息) (4)adb pull /data/dontpanic c:\log (dontpanic:打印的是手机的数据中的堆栈信息) (5)adb pull /data/anr c:\log (anr:弹出 “应用程无响应 等待 强制关闭”这个对话框时留下来的信息。) (6)adb shell logcat > E:\log\logcat.txt (缓存区的LOG信息) (7)adb logcat -b radio (录无线通讯日志) (8)...... ★【Log中搜索异常关键字:FATAL EXCEPTION、NullPointerException、Indexoutof、ANR....】

  15. 在CMD中直敲下面代码操作手机 有了这些代码,我们是否可以写个批处理来实现批量执行? 例1:adb shell input keyevent 3 --HOME键 例2:adb shell input keyevent 4 --Back键 例4:adb shell input keyevent 5 --电话呼叫 例5:adb shell input keyevent 6/26 --锁屏 例6:adb shell input keyevent 82--Menu键 例7:adb shell input keyevent 85--播放音乐 例8:adb shell input keyevent 7--输入字符7~ ....更多键值对可以到Google官方网查询

  16. 批处理-小工具制作 Monkey_Test关键代码: adb shell monkey -s 102 -p cn.wps.clip --kill-process-after-error -vv --throttle 1000 50000 一键安装关键代码: adb install -l -r XX.apk 一键截图关键代码: result = device.takeSnapshot() result.writeToFile('D:/KingTest/data/takeSnapshot%times%.png','png') 手机信息查看器关键代码: adb shell getevent -p adb shell getprop 手机流量实时监控关键代码: adb shell cat /proc/self/net/dev /proc/net/dev

  17. 批处理-小工具制作 资源包审核工具:这个工具就不详述,在这里给大家展示下测试后的最终报告 录制关键代码: adb shell getevent(需要转换十六进制来获得坐标位置) 回放关键代码: adb shell sendevent /dev/input/event0 1 330 1 adb shell sendevent /dev/input/event0 3 58 53 adb shell sendevent /dev/input/event0 3 53 200(x) adb shell sendevent /dev/input/event0 3 54 380(y) adb shell sendevent /dev/input/event0 0 2 0 adb shell sendevent /dev/input/event0 0 0 0 adb shell sendevent /dev/input/event0 0 2 0 adb shell sendevent /dev/input/event0 0 0 0 以上4组命令必须配合使用,缺一不可 adb shell cat /proc/bus/input/devices 来获得对应设备的Evnet值

  18. 实现原理--流程图表示 自动化入口检测(单项) 读到APK 反编译 解密失败 解密成功 获得内部程序名称 环境与 设备检测 无ADB 自动设置环境 等待 安 装 失败 运行 保存LOG 卸载 退出

  19. 实现原理--流程图表示 批量应用入口检测 获取Apk 解密apk 解密失败 解密成功 获取失败 未完成 获取内部文件 环境与 设备检测 无ADB OK 流氓软件 查杀 等待 检测合格 安 装 失败 运行 保存LOG+截图 是否完 成全部 OK 卸载 退出 记录报表

  20. 实现原理--流程图表示 一键卸载 判断root 设备无ROOT 检测环境 检测设备 读取data 读取失败 读取成功 数据处理 卸载失败 打印结果 逐个卸载 卸载 计数=0 全部卸载 退出

  21. Question?

  22. 谢谢观赏

More Related