浅谈我与Android相处的点滴 一、个人自动化经验分享 二、Android基本架构了解 三、MonkeyTest指令学习

Slides:



Advertisements
Similar presentations
第一章 讲师:张晓飞 微信 : zxf_zxy_rxf Android 快速入门. 1. 介绍 Android 2. 完成第一个 Android 应用 3. 三个开发调试工具 4. 应用练习 1.1 Android 相关基础知识 1.2 Android 系统架构 2.1 搭建开发环境 2.2 开发第一个应用.
Advertisements

哈工大计算机科学与技术学院软件基础教研室 第二部分 Android 与工程和科研 授课教师:李治军 综合楼 411 室 第 6 讲 进入 Android 内核 Lecture 6: Get Into the Android Kernels.
嵌入式系統 資工系 魏 凱 城. 什麼是嵌入系統 提到 CPU 我們很直覺的會聯想到 PC ,但事實上 CPU 的應用領域、範圍及採用的數量都遠遠超過 PC 的範疇。 提到 CPU 我們很直覺的會聯想到 PC ,但事實上 CPU 的應用領域、範圍及採用的數量都遠遠超過 PC 的範疇。 以數量來看 x86.
「課程領導」分享 香港潮陽小學 曾美儀老師 鄺婉媛老師 2013 年 11 月 28 日. 一)本校背景: 天水圍 30 班津貼學校 學生多來自公共屋邨 現有 6 位音樂老師.
第三章专利权属纠纷 本章学习要点 1.专利申请权纠纷、专利权属纠纷及其他相关纠纷的概念和特点 2.职务发明创造与非职务发明创造的判断
Android App簡介及 App Inventor 2體驗 靜宜大學資管系 楊子青
第二章:行動裝置與擴增實境.
中关村知识产权文化园区行 政策体系宣讲 二〇〇九年四月
用 Andriod手機 12年國教~有效教學策略設計 國立北門高中 林明璋 玩
課程地圖 (104年入學-日間部) 校通識核心 專業課程 必修與選修 與管理模組 網路技術 App設計與應用模組 學院通識核心 學院專業核心
第一章 Android简介与环境搭建 QQ号: QQ群: (Android编程入门) 网络资源:
教育雲端科技的現況與未來發展 臺北市政府教育局聘任督學 韓長澤.
教学管理与学业评价改革 杭州市学军小学 杨一青 2017/3/12.
红旗Linux认证培训 课程介绍.
Android移动应用安全 加固方案介绍 北京大学 软件与微电子学院 2017年3月.
Android环境搭建 倚动软件工厂实验室 网络课程地址:
情歌分享小組作業.
字字有詞 詩詩入耳 之 唐詩專題設計.
資訊安全與系統管理 2013/3/13 Chien wei lin.
论app性能专项测试和监控 演讲者 金阳光(王劲松) 蔡植楷 职位 QA负责人 科长 来自 百度 努比亚.
转正述职报告 乐恩公司 史航
UNIX系統與資料庫安裝 Why UNIX 常用的工具程式介紹 資料庫的安裝.
兒 童 營 養 高雄長庚醫院營養治療科 營養師 洪凱殷.
機車第六篇 事故預防 單元二 行駛中注意事項.
Android App 系統開發教學 Luna 陳雯琳 2014/12/18
使用Android Studio 開發Android App 靜宜大學資管系 楊子青
建立Android新專案 建國科技大學 資管系 饒瑞佶 2010/10.
厦门大学数据库实验室 报告人:谢荣东 导师:林子雨 2014年8月30日
APP課程:Android程式設計開發環境與工具介紹
Review: Android简介.
第2章 建立Android應用程式 2-1 Java語言、XML文件與Android 2-2 建立第一個Android應用程式
CH3 Eclipse.
ANDROID與OSGI平台整合.
Goolge的云计算 分布式数据表BigTable.
Android程式開發準備 Android智慧型手機程式設計 建國科技大學 資管系 饒瑞佶 2012/4 V1 2012/8 V2
Introduction on Smartphone Platform
Android開發環境建置與設定 Android智慧型手機程式設計 程式設計與應用班 建國科技大學 資管系 饒瑞佶 2012/4 V1
安裝與設置 Android 發展環境 靜宜大學資工系 蔡奇偉副教授 ©.
Android SDK工具 Android智慧型手機程式設計 建國科技大學 資管系 饒瑞佶 2012/4 V1 2012/8 V2
和諧社區資訊服務推廣計畫 -軟體雲端社區 資訊研習營
第8章 移动界面设计 山东大学计算机学院.
Operating System Concepts 作業系統原理 CHAPTER 2 系統結構 (System Structures)
App Inventor 2體驗 靜宜大學資管系 楊子青
第4章 Android生命周期.
Android 课程讲义 智能手机开发
主编:钟元生 赵圣鲁.
Android開發環境建置與設定 建國科技大學 資管系 饒瑞佶 2010/10.
第一章 認識Java Java 程式設計入門(I).
Native Development Kit
Python ——谁说简洁就不能强大? Gingko Studio.
第2讲 移动应用开发基础知识(二) 宋婕
建立Android新專案 Android智慧型手機程式設計 程式設計與應用班 建國科技大學 資管系 饒瑞佶 2012/4 V1
Android手动测试实践 ——绮珠.
和諧社區資訊服務推廣計畫 -軟體雲端社區 資訊研習營
1 功能.
Android 视频教程简介.
建國科技大學 資管系 饒瑞佶 2012/4 V1 2012/8 V2 2013/2 V3 2014/9 V4
Android SDK工具 建國科技大學 資管系 饒瑞佶 2011/1.
第11章 系统结构与包模型模型.
Android智慧型手機程式設計實務應用班
人工智能人才培养示范基地建设分享 上海电子信息职业技术学院 邵瑛.
Broadcast System For Mobile Device
Location Based Services - LBS
张乃根 复旦大学 特聘教授 知识产权研究中心 主任
107年7月新修訂轉診支付標準 及電子轉診平台簡介
架构师成长感悟 吴隆烽
大数据应用人才培养系列教材 Python语言 刘 鹏 张 燕 总主编 李肖俊 主编 刘 河 钟 涛 副主编.
Android进程间通讯.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
Usage Eclipse 敏捷方法工具介紹 實驗室網站:
Presentation transcript:

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

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中测试相关部分。

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应用程序包,运行它的一个活动,并向其发送按键事件来达到我们的测试目的。

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

Android构架划分 Android构架划分 Android本身是一套软件堆迭(Software Stack),或称为「软件迭层架构」,迭层主要分成三层:操作系统、中间件、应用程序。 Ⅰ. 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, 主要负责管理应用程序的生命周期和程序调用栈。

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的轻量级数据库

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

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,否则会出错

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

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')

Python-测试脚本案例

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

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

批处理与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....】

有了这些代码,我们是否可以写个批处理来实现批量执行? 在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官方网查询

批处理-小工具制作 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

批处理-小工具制作 资源包审核工具:这个工具就不详述,在这里给大家展示下测试后的最终报告 录制关键代码: 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 以上4组命令必须配合使用,缺一不可 adb shell cat /proc/bus/input/devices 来获得对应设备的Evnet值

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

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

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

Question?

谢谢观赏