今天继续第二天的分享。
(六)ADB安卓调试桥使用
ADB的全称为Android Debug Bridge,安卓调试桥。如安装软件、卸载软件、系统升级、运行shell命令等。adb就是连接Android手机与PC端的桥梁。
可以单独从官网(developer.android.com)下载安装,也可以通过SDK manager安装。安装后,在platform-tools目录中。
使用真机或仿真机练习ADB命令;
虚拟机中连接真机时虚拟机设置:
Win7虚拟机-配置-USB控制器,选中“显示所有USB输入设备”,注意,只能在关闭虚拟机时设置。
对于仿真机安装后,具有了Root权限,而对于真机,要运行ADB命令,需要把手机设置为开发者模式。安卓手机中设置方法如下:
关于手机->版本号,连续点击几次版本号,手机激活开发者模式。在配置中打开开发者选项,打开【USB调试】模式
adb devices:查看当前连接的手机设备,包括了仿真机和真机
adb install: 将指定的apk安装到手机中
语法:adb install <file>
例如:adb –s emulator-5554 install E:\CalculatorOfTwoNum.apk
-s 指定设备序列号
–r覆盖安装
当前电脑如果只有连接一部手机,则可以不指定设备,可以直接安装
adb install d:\com.sina.weibo.apk
adb uninstall:
adb uninstall –k <软件名>
例如:adb -s emulator-5554 –k uninstall com.sina.weibo
也可以直接:
adb shell pm uninstall -k com.sina.weibo
-k 保留缓存内容
adb pull: 从手机设备上拷贝文件到本地电脑上
例如:adb pull /system/framework/framework-res.apk d:\sj
adb pull /sdcard/tmp/error_fs.dat d:\sj
adb push:
adb push d:/sj/
adb -s 4df7b6be03f2302b push f:/pass /sdcard/pass/
shell:
adb使用命令top -m 10 -s cpu(-t 显示进程名称,-s 按指定行排序,-n 在退出前刷新几次,-d 刷新间隔,-m 显示最大数量)
User 处于用户态的运行时间,不包含优先值为负进程
Nice 优先值为负的进程所占用的CPU时间
Sys 处于核心态的运行时间
Idle 除IO等待时间以外的其它等待时间
IOW IO等待时间
IRQ 硬中断时间
SIRQ 软中断时间
- PID 进程id
- PR 优先级
- CPU% 当前瞬时CPU占用率
- S 进程状态:D=不可中断的睡眠状态, R=运行, S=睡眠, T=跟踪/停止, Z=僵尸进程
- #THR 程序当前所用的线程数
- VSS Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
- RSS Resident Set Size 实际使用物理内存(包含共享库占用的内存)
- PCY 调度策略优先级,SP_BACKGROUND/SP_FOREGROUND
- UID 进程所有者的用户id
- Name 进程的名称
查看某个app占用手机内存情况
使用下面命令dumpsys meminfo <package_name>或dumpsys meminfo <package_id>
android程序内存被分为2部分:native和dalvik,dalvik就是我们平常说的java堆,我们创建的对象是在这里面分配的,而bitmap是直接在native上分配的,对于内存的限制是 native+dalvik 不能超过最大限制。android程序内存一般限制在16M,当然也有24M的。
adb shell dmesg,打印出内核的调试信息
adb shell chmod 644 /system/framework/framework-res.apk
adb forward tcp:5555 tcp:8000,可以设置任意的端口号
adb bugreport:查看bug报告
adb shell :设置查看无线通讯日志
logcat –b redio
adb get-product :获取设备的ID和序列号
adb get-serialno
adb reboot
app上截屏
C:\Users\IBM>adb shell screencap -p sdcard/screen.png
把截图发送电脑某目录中
C:\WINDOWS\system32>adb pull sdcard/screen.png D:/screen.png
截图后,通过手机文件管理器可以找到截图文件
(七)Monkey可靠性使用
Monkey是一款通过命令行对app进行测试的工具,主要进行可靠性测试。
Adb shell monkey,给指定的设备发送伪随机的用户事件流,执行命令的效果就相当于有个手指在手机上点击。
什么是monkey呢?
顾名思义,Monkey英文单词是猴子,Monkey test就像一只猴子在电通过脑前面胡乱敲击键盘。通过Monkey程序模拟用户触摸屏幕、滑动Trackball、按键等操作对设备上的程序进行压力测试,检测多长时间会发生异常。主要是测试App多久会crash(闪退或崩溃)。
Monkey介绍:
(1) Monkey程序由Android系统自带,使用Java语言编写,在Android文件系统中的存放路径是: /system/framework/monkey.jar;
(2) Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中 的存放路径是:/system/bin/monkey;
(3)Monkey 命令启动方式:
a)可以通过PC机CMD窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试。
b)在PC上adb shell 进入Android系统,通过执行 monkey {+命令参数} 来进行Monkey 测试
Monkey执行原理图:
c) 在Android机或者模拟器上直接执行monkey 命令,可以在Android机上安装Android终端模拟器
Monkey弱点:
Monkey虽然可以根据一个指定的命令脚本发送按键消息,但其不支持条件判断,也不支持读取待测界 面的信息来执行验证操作。
Monkey的特征
- 测试对象仅仅为应用程序包,有一定的局限性
- Monkey测试使用的事件流数据流是随机的,不能进行自定义
- 可对Monkeytest对象,事件数量,类型,频率等进行设置
Monkey的基本用法:
$ adb shell monkey [options]
如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。下面是一个更为典型的命令行示例,它启动指定的应用程序,并向其发送500个伪随机事件:
$ adb shell monkey -p your.package.name -v 500
例如:
adb shell monkey –p com.tencent.mobileqq –v 500
adb shell monkey –p com.tencent.mobileqq –v 500
Monkey参数大全:
-p <允许的包名列表>
用此参数指定一个或多个包。指定包之后,monkey将只允许系统启动指定的app。如果丌指定包, monkey将允许系统启动设备中的所有app。
指定一个包:adb shell monkey -p com.shjt.map 100
指定多个包:adb shell monkey -p fishjoy.control.menu –p com.shjt.map 100
-v
用亍指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下 表所示:
Level 0 : adb shell monkey -p com.shjt.map -v 100 // 缺省值,仅提供启动提示、测试完成和最终结果等少量信息
Level 1 : adb shell monkey -p com.shjt.map -v -v 100 // 提供较为详细的日志,包括每个发送到Activity的事件信息
Level 2 : adb shell monkey -p com.shjt.map -v -v -v 100 // 最详细的日志,包括了测试中选中/未选中的Activity信息
-s(随机数种子)
用亍指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。 示例:
monkey测试1:adb shell monkey -p com.shjt.map –s 10 100
monkey测试2:adb shell monkey -p com.shjt.map –s 10 100
--throttle <毫秒>
用亍指定用户操作(即事件)间的时延,单位是毫秒;如果丌指定这个参数,monkey会尽可能快的 生成和发送消息。 示
例:adb shell monkey -p com.shjt.map --throttle 3000 100
Monkey日志分析
正常情况,如果Monkey测试顺利执行完成,在log的最后会打印出当前执行事件的次数和所花费的时间; // Monkey finished 代表执行完成\
异常情况
Monkey 测试出现错误后,一般的分析步骤
看Monkey的日志 (注意第一个swith以及异常信息等)
1. 程序无响应的问题: 在日志中搜索 “ANR”
2. 崩溃问题:在日志中搜索 “Exception” (如果出现空指针, NullPointerException) 肯定是有bug
Monkey 执行中断, 在log最后也能看到当前执行次数
重视Crash
虽然Monkey测试有部分缺陷,我们无法准确地得知重现步骤, Monkey测试所出现的NullPointException, 都是可以在用户使用时出现的, 何时出现只是时间问题
理论上来说, Monkey所有的Crash 都需要在发布前修复掉
2.-p 指定被测应用的包名 例:adb shell monkey -p com.UCMobile.x86 100 如果想要指定多个包名,每一个包名要跟一个-p 例:adb shell monkey -p packageName1 -p packageName2 100
Monkey测试的停止条件
Monkey Test执行过程中在下列三种情况下会自动停止:
1、如果限定了Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止。
2、如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错。
3、如果应用程序产生了应用程序不响应(application not responding)的错误,Monkey将会停止并报错。
通过多次并且不同设定下的Monkey测试才算它是一个稳定性足够的程序。
Adb shell monkey –p packagename,对指定名称的包进行测试。
全部命令举例:
1.-help 查看monkey的帮助信息
例:adb shell monkey –help
2.-p 指定被测应用的包名 例:adb shell monkey -p com.UCMobile.x86 100 如果想要指定多个包名,每一个包名要跟一个-p 例:adb shell monkey -p packageName1 -p packageName2 100
3. COUNT 设置执行的次数 例:adb shell monkey 100
4.-s 设置种子数(相当于设置一个路径,因为monkey是随机事件,所以为了使回归路径一致就需要设置相同的seed值) 例:adb shell monkey 100 -s 5 如果想重现上面例子的路径下次执行的-s也必须为5
5.--throttle 设置每次随机事件的时间间隔(单位:毫秒) 例:adb shell monkey 100 --throttle 500
6.--throttle time --randomize-throttle 设置随机时间的时间间隔区间 例:adb shell monkey 100 --throttle 500 --randomize-throttle 说明:执行一百次monkey随机事件,每次事件的间隔在0到500毫秒之间不固定。
7.-v 设置日志级别最多(默认一个-v) 例:adb shell monkey -v 100 如需更详细的日志可以加多个-v,最多3个 例:adb shell monkey -v -v -v 100
8.--ignore-crashes 运行中忽略crash,遇到crash依然把后面的事件跑完 例:adb shell monkey --ignore-crashes -v 100
9.--ignore-timeouts 运行中忽略ANR,遇到ANR依然把后面的事件跑完 例:adb shell monkey --ignore-timeouts -v 100
10.设置事件百分比,所有的百分比加起来不能超过100% 0:触摸事件百分比,即参数--pct-touch 1:滑动事件百分比,即参数--pct-motion 2:缩放事件百分比,即参数--pct-pinchzoom 3:轨迹球事件百分比,即参数--pct-trackball 4:屏幕旋转事件百分比,即参数--pct-rotation 5:基本导航事件百分比,即参数--pct-nav 6:主要导航事件百分比,即参数--pct-majornav 7:系统事件百分比,即参数--pct-syskeys 8:Activity启动事件百分比,即参数--pct-appswitch 9:键盘翻转事件百分比,即参数--pct-flip 10:其他事件百分比,即参数--pct-anyevent 例:adb shell monkey --pct-touch 20 -v 100
11.--ignore-native-crashes 忽略monkey本身的异常,直到事件执行完毕 例:adb shell monkey --ignore-native-crashes -v 100
日志分析:
Events injected: 100
## Network stats: elapsed time=10402ms (0ms mobile, 0ms wifi, 10402ms not connec
ted)
C:\Users\IBM>adb shell monkey -v-v-v -p com.android.calculator2 100
:Monkey: seed=1507321806111 count=100
:AllowPackage: com.android.calculator2
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
各种事件所占的比例,用数字表示
// Event percentages:
// 0: 15.0%
// 1: 10.0%
// 2: 2.0%
// 3: 15.0%
// 4: -0.0%
// 5: 25.0%
// 6: 15.0%
// 7: 2.0%
// 8: 2.0%
// 9: 1.0%
// 10: 13.0%
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.categ
ory.LAUNCHER;launchFlags=0x10200000;component=com.android.calculator2/.Calculato
r;end
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.in
tent.category.LAUNCHER] cmp=com.android.calculator2/.Calculator } in package com
.android.calculator2
:Sending Touch (ACTION_DOWN): 0:(459.0,202.0)
:Sending Touch (ACTION_UP): 0:(452.0924,201.62823)
:Sending Trackball (ACTION_MOVE): 0:(-2.0,-4.0)
:Sending Trackball (ACTION_MOVE): 0:(-5.0,-3.0)
:Sending Touch (ACTION_DOWN): 0:(439.0,173.0)
:Sending Touch (ACTION_UP): 0:(445.65695,160.60785)
:Sending Flip keyboardOpen=false
:Sending Touch (ACTION_DOWN): 0:(47.0,244.0)
:Sending Touch (ACTION_UP): 0:(27.603859,249.00941)
:Sending Touch (ACTION_DOWN): 0:(95.0,328.0)
:Sending Touch (ACTION_UP): 0:(104.73534,324.80264)
:Sending Trackball (ACTION_MOVE): 0:(-2.0,-4.0)
:Sending Trackball (ACTION_MOVE): 0:(-2.0,-1.0)
:Sending Touch (ACTION_DOWN): 0:(676.0,1025.0)
:Sending Touch (ACTION_UP): 0:(689.5133,1032.2502)
:Sending Touch (ACTION_DOWN): 0:(190.0,600.0)
:Sending Touch (ACTION_UP): 0:(186.25455,600.4463)
Events injected: 100
:Sending rotation degree=0, persist=false
:Dropped: keys=0 pointers=1 trackballs=0 flips=0 rotations=0
## Network stats: elapsed time=7139ms (0ms mobile, 0ms wifi, 7139ms not connecte
d)
// Monkey finished
说明:
1.Monkey: seed=1470511671524 count=100 monkey执行的seed值和随机事件次数
2.AllowPackage: com.UCMobile.x86 可以运行的包名
3.// Event percentages: // 0: 15.0% // 1: 10.0% // 2: 2.0% // 3: 15.0% // 4: -0.0% // 5: -0.0% // 6: 25.0% // 7: 15.0% // 8: 2.0% // 9: 2.0% // 10: 1.0% // 11: 13.0% 分配事件的百分比,事件号可以参考第二部分
4.事件0:触摸事件 Sending Touch (ACTION_DOWN): 0:(572.0,1105.0) Sending Touch (ACTION_UP): 0:(576.20734,1105.024)
5. 事件1:滑动事件 Sending Touch (ACTION_DOWN): 0:(233.0,761.0) Sending Touch (ACTION_MOVE): 0:(208.49568,736.34766) Sending Touch (ACTION_MOVE): 0:(202.7063,729.8338) Sending Touch (ACTION_MOVE): 0:(183.89723,722.677) Sending Touch (ACTION_UP): 0:(174.83568,721.8229)
6.事件2:缩放事件 Sending Touch (ACTION_DOWN): 0:(107.0,242.0) Sending Touch (ACTION_POINTER_DOWN 1): 0:(108.14705,248.53061) 1:(270.0,262.0) Sending Touch (ACTION_MOVE): 0:(110.117355,252.96329) 1:(267.9937,262.25485) Sending Touch (ACTION_MOVE): 0:(111.30056,261.88846) 1:(261.90106,262.58475) Sending Touch (ACTION_MOVE): 0:(113.11743,265.60138) 1:(253.92662,263.13382) Sending Touch (ACTION_POINTER_UP 1): 0:(113.29031,267.4419) 1:(248.60628,263.23257)
7.事件3:轨迹球事件 Sending Trackball (ACTION_MOVE): 0:(3.0,-2.0) Sending Trackball (ACTION_MOVE): 0:(1.0,-1.0)
8.事件4:屏幕旋转事件(隐藏事件) Sending rotation degree=0,persist=true
9.事件5:导航事件(上下左右) Sending Key (ACTION_DOWN): 21 // KEYCODE_DPAD_LEF
10.事件6:主要导航事件(menu等) Sending Key (ACTION_DOWN): 23 // KEYCODE_DPAD_CENTER
11.事件7:系统按键事件(音量,home,返回按键等) Sending Key (ACTION_UP): 25 // KEYCODE_VOLUME_DOWN
12.事件8:启动应用事件 Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.UCMobile.x86/com.UCMobile.main.UCMobile;end
13.事件9:键盘事件(隐藏显示键盘) Sending Flip keyboardOpen=true
14.事件10:其他按键 Sending Key (ACTION_DOWN): 66 // KEYCODE_ENTER Sending Key (ACTION_UP): 66 // KEYCODE_ENTER
15.延时11: Sleeping for 300 milliseconds
(八)UIAutomatorviewer的使用
在SDK安装目录的tools目录下有uiautomatorviewer.bat,运行查看手机对象属性。
uiautomatorviewer:扫描和分析Android应用程序的UI控件的工具。
熟悉控件获取的同学都知道,使用uiautomatorviewer可以抓取到的用来定位控件的元素大概有
text
resource-id
content-desc
index
除此之外,appium还支持按Xpath来定位控件
需要安装增强插件:(jar包文件,不好上传,单独沟通)
把该jar文件拷贝到android安装目录的/tools/lib目录下,替换原来的UIAutomatorViewer.jar,替换后,在tools中执行uiautomatorviewer.bat即可启动。
Xpath和元素定位相关的语法,参见博文:
http://blog.csdn.net/kaka1121/article/details/51811296
从上文中可以看出,uiautomatorviewer抓取出来的属性,可统一用Xpath方式来获取,可以较大地简化代码,我们只需要定义一个优先级策略即可。
首先,前端开发同学也需要定位元素,通常使用resource-id或text,因此大部分关键元素都会有唯一的resource-id或text,列表除外。
其次,少量元素会有 content-desc,且唯一;
再次,index是每个元素都有的,也是最不靠谱的一个;
除此之外,Xpath本身作为DOM,本身会根据元素类型(在此工具中叫class)维护一个顺序,本文中称之为“元素索引”;
综上,可以定义如下优先级:
1.resource-id
2.text
3.content-desc
4.元素索引
5.index(因其不可预知,弃用)
这里要说明一下xpath的元素索引和index的区别
xpath的元素索引上面已经说了,序列从1开始(IE除外,统一方法,见下面图片)
index作为手机端的节点属性,一般是从0开始的,但是有很多也是从非零开始的,非常不可预知,完全受编程人员支配,也和class无关。
(九)Monkeyrunner 使用
Monkeyrunner介绍:
monkeyrunner即android SDK中自带的工具之一,此工具提供API可访问android设备或模拟器。
monkeyrunner提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。通过monkeyrunner,您可以写出一个Python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上。
monkeyrunner工具的主要目的是用于测试功能/框架水平上的应用程序和设备,或用于运行单元测试套件,但您当然也可以将其用于其它目的。
工具原理:
Monkeyrunner工具是在工作站上通过API定义的特定命令和事件控制设备或模拟器。
多设备控制:monkeyrunner API可以跨多个设备或模拟器实施测试套件。您可以在同一时间接上所有的设备或一次启动全部模拟器(或统统一起),依据程序依次连接到每一个,然后运行一个或多个测试。您也可以用程序启动一个配置好的模拟器,运行一个或多个测试,然后关闭模拟器。
功能测试:monkeyrunner可以为一个应用自动化功能测试。为您提供按键或触摸事件的输入数值,然后观察输出结果的截屏。
回归测试:monkeyrunner可以运行某个应用,并将其结果截屏与既定已知正确的结果截屏相比较,以此测试应用的稳定性。
可扩展的自动化:由于monkeyrunner是一个API工具包,您可以基于Python模块和程序开发一整套系统,以此来控制Android设备。除了使用monkeyrunner API之外,您还可以使用标准的Python os和subprocess模块来调用如adb这样的Android工具。
主要包括三个模块
1、MonkeyRunner:这个类提供了用于连接monkeyrunner和设备或模拟器的方法,它还提供了用于创建用户界面显示提供了方法。
2、MonkeyDevice:代表一个设备或模拟器。这个类为安装和卸载包、开启Activity、发送按键和触摸事件、运行测试包等提供了方法。
3、MonkeyImage:这个类提供了捕捉屏幕的方法。这个类为截图、将位图转换成各种格式、对比两个MonkeyImage对象、将image保存到文件等提供了方法。
#引用导入API
from com.android.monkeyrunner import
运行monkeyrunner
命令语法为:
monkeyrunner -plugin
方式一:在CMD命令窗口直接运行monkeyrunner
方式二:使用Python编写测试代码文件,在CMD中执行monkeyrunner Findyou.py运行
不论使用哪种方式,您都需要调用SDK目录的tools子目录下的monkeyrunner命令。
注意:在运行monkeyrunner之前必须先运行相应的模拟器或连接真机,否则monkeyrunner无法连接到设备
运行模拟器有两种方法:1、通过eclipse中执行模拟器 2、在CMD中通过命令调用模拟器
这里介绍通过命令,在CMD中执行模拟器的方法
启动仿真机
在cmd窗口,输入命令:emulator -avd GalaxyNexus,其中GalaxyNexus是模拟器的名称,填写自己创建的模拟器名称。
命令行输入:monkeyrunner,启动
注意是按ctrl+d退出
进入shell命令交互模式后,首要导入monkeyrunner所要使用的模块。直接在shell命令下输入命令:
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice
再回车,这步完成我们就可以利用monkeyrunner进行测试工作了。(如果不能工作,可以把MonkeyRunner,MonkeyDevice分别导入)
模拟器连接
device=MonkeyRunner.waitForConnection(6,’emulator-5554′)
参数1:超时时间,单位秒,浮点数,默认是无限期地等待。
参数2:指定的设备名称device_id,默认为当前设备(手机优先,其次为模拟器)
安装apk
输入命令:device.installPackage('d:\\FishBone_dakai_v1.5.3.5015.apk'),其中,参数是APK路径。安装成功返回true,此时查看模拟器上安装的APK图标。
app启动
app安装成功后,现在启动该app,命令为:
device.startActivity(component="package名/activity")
启动鱼骨app,则如下:
device.startActivity(component="com.yugusoft.fishbonelocal/com.yugusoft.fishbone.ui.LogoActivity")
上面所有执行脚本可以整理到一个python文件中,例如命名为mtest.py。
在命令行下运行脚本:monkeyrunner d:\yugutest.py 同样能够执行上面一步一步的脚本。
monkeyrunner d:\sdk\tools\xlwb.py
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice device=MonkeyRunner.waitForConnection(6,'Y9K7N15303005862') device.installPackage('F:\\FishBone_dakai_v1.5.3.5015.apk') MonkeyRunner.sleep(5.0) device.startActivity(component="com.yugusoft.fishbonelocal/com.yugusoft.fishbone.ui.LogoActivity") |
运用举例:
卸载旧的APP、安装新的APP
方式一:
1.打开CMD,运行monkeyrunner
2.进入monkeyrunner的shell命令交互模式后,逐条输入以下命令
1 from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
2 device = MonkeyRunner.waitForConnection()
3 device.removePackage('cn.richinfo.thinkdrive')
4 device.installPackage('E:\\JAVA\\monkeyrunner\\Test1\\ThinkDrive_new.apk')
方式二:
a. 编写Python测试代码
# File: Test1.py
# Vision: V1.0
# Author: Findyou
# 引入本程序所用到的模块
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
# 连接手机设备
device = MonkeyRunner.waitForConnection()
# 截图
result = device.takeSnapshot()
# 将截图保存到文件
result.writeToFile('E:\\JAVA\\monkeyrunner\\Test1\\Test1_001.png','png')
# 卸载APP
device.removePackage('cn.richinfo.thinkdrive')
print ('Uninstall Success!')
# 暂停5秒
MonkeyRunner.sleep(5)
# 截图
result = device.takeSnapshot()
result.writeToFile('E:\\JAVA\\monkeyrunner\\Test1\\Test1_002.png','png')
# 安装新的APP
device.installPackage('E:\\JAVA\\monkeyrunner\\Test1\\ThinkDrive_new.apk')
print ('Install Success!')
# 截图
result = device.takeSnapshot()
result.writeToFile('E:\\JAVA\\monkeyrunner\\Test1\\Test1_003.png','png')
注:拷贝运行时请去掉中文注释;或者在开头加入 #coding=utf-8
b.执行Test1.py脚本
Monkeyrunner E:\JAVA\monkeyrunner\Test1\Test1.py
MonkeyRunner Command Summary
1. #导入模块;
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
还可起别名:
from com.android.monkeyrunner import MonkeyRunner as mr
from com.android.monkeyrunner import MonkeyDevice as md
from com.android.monkeyrunner import MonkeyImage as mi
2. #连接当前设备,并返回一个MonkeyDevice对象;
device = MonkeyRunner.waitForConnection(float timeout, string deviceID) // 第一个参数为等待连接设备时间,第二个参数为具体连接的设备
3. #安装Android包,注意,此方法返回的返回值为boolean,由此可以判断安装过程是否正常 ;
device.installPackage('myproject/bin/MyApplication.apk')
print ('True')
device.removePackage ('com.example.android.notepad')
print ('False')
4. #启动一个Activity;
device.startActivity(component='com.android.htccontacts/com.android.htccontacts.ContactsTabActivity')
device.startActivity(component = "com.metek.weather/.activity.SettingActivity")
5. #截图;
result = device.takeSnapshot()
result.writeToFile('C:\\Users\\Martin\\Desktop\\test.png','png')
6. #延时(秒);
MonkeyRunner.sleep(3)
7. #滑动屏幕;
for i in range(1,70):
device.drag((250,850),(250,110),0.1,10) //开始,结束,持续时间,步骤
for i in range(1,70):
device.drag((250,110),(250,850),0.1,10)
MonkeyRunner.sleep(1)
8. #触击屏幕;
device.touch(507,72,"DOWN_AND_UP")
9. #执行adb shell命令;
device.shell("input text goup01")
10. #按键
按下HOME键 device.press('KEYCODE_HOME','DOWN_AND_UP')
相应的按键对应的名称如下:
menu键:KEYCODE_MENU
home键:KEYCODE_HOME
back键:KEYCODE_BACK
search键:KEYCODE_SEARCH
call键:KEYCODE_CALL
end键:KEYCODE_ENDCALL
上导航键:KEYCODE_DPAD_UP
下导航键:KEYCODE_DPAD_DOWN
左导航键:KEYCODE_DPAD_LEFT
右导航键:KEYCODE_DPAD_RIGHT
ok键:KEYCODE_DPAD_CENTER
上音量键:KEYCODE_VOLUME_UP
下音量键:KEYCODE_VOLUME_DOWN
power键:KEYCODE_POWER
camera键:KEYCODE_CAMERA
11. #输入文字
device.type('你好exit')
12. #输入回车
device.press('KEYCODE_ENTER')
13. #记录和回放
*记录:
直接在命令行中输入:monkeyrunner monkey_recorder.py
在界面上操作然后将脚本保存为 monkey_test.mr
*回放:
运行保存的脚本,然后你就看到模拟器进行你刚才一样的操作:
monkeyrunner monkey_playback.py monkey_test.mr
注:monkey_recorder.py,monkey_test.mr,monkey_playback.py都应放在..\android-sdk-windows\tools目录下。
14. #产生help文件并保存
monkeyrunner help.py //format可以是text或html,outfile是包含路径的输出文件名。
(十)安装Node.js
要安装Appium,首先安装node.js 。node.js官方网站:https://nodejs.org/。根据自己的电脑操作系统和位长下载相应的版本。
下载后,例如为node-v6.11.4-x64.msi, 安装
安装后,重新打开dos窗口,在命令行输入npm,如果出现下面信息,表示安装成功。
npm是一个node包管理和分发工具,已经成为了非官方的发布node模块(包)的标准。有了npm,可以很快的找到特定服务要使用的包,进行下载、安装以及管理已经安装的包。
在Path中设定node的路径。
在DOS命令行下面,输入npm,出现下面的界面表示安装成功。
(十一)Appium安装
在线安装和离线安装两种方式
- 下面通过npm在线安装Appium
D:\SDK>npm install -g appium
2、离线安装
可以在Appium官方网站上下载操作系统相应的Appium版本。
https://bitbucket.org/appium/appium.app/downloads/
下载版本AppiumForWindows_1_4_16_1.zip,接压缩后,安装
安装过程中,出现下面界面
安装过程中,缺少微软的Framework,可能报错。这是因为Appium是由.NET 开发的,所以,它会依赖.NET framework相关组件
安装后,在path中配置appium路径。输入appium,出现如下窗口表示安装成功
检查环境配置是否正确:
打开Windows命令提示符,通过“appium-doctor”命令检查appium环境。
(十二)安装Python的安装包管理工具pip
通过pip安装比较方便。pip是一个安装和管理Python包的工具,通过pip去安装Python包将变得十分简单,我们将省去了搜索--查找版本--下载--安装等繁琐的过程。
推荐通过pip进行安装“Appium-Python-Client”。
pip是用来方便地管理Python的第三方包的工具。
两种安装方式:1、在线安装;2、下载后安装,https://pypi.python.org/pypi/pip#downloads
在线安装:
Python安装目录下,有一个scripts目录,里面有个easy_install.exe
在DOS命令行执行easy_install.exe pip 即可安装pip,以秒速安装成功,如下图:
安装结束后,出现上面的信息,表示安装成功,Scripts目录下多了pip.exe文件。
(十三)安装appium client端
在DOS命令行下,输入pip install appium-python-client 进行安装
安装过程截图如下:
安装完成。
点击桌面生成的appium,启动,如果报错,缺少Framework 4.5,则需要根据提示安装即可。
启动后,单击最左边图标进行参数设定。
华为手机:
单击最右侧的箭头按钮,启动appium
在命令行输入python d:\calc-huawei.py 执行脚本
#coding=utf-8 from appium import webdriver
desired_caps = {} desired_caps['platformName'] = 'Android' desired_caps['platformVersion'] = '4.4.2' desired_caps['deviceName'] = 'huawei6:5554' desired_caps['appPackage'] = 'com.android.calculator' desired_caps['appActivity'] = '.Calculator'
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
driver.find_element_by_name("1").click()
driver.find_element_by_name("5").click()
driver.find_element_by_name("9").click()
#driver.find_element_by_id("plus").click()
#driver.find_element_by_name("6").click()
#driver.find_element_by_id("equal").click()
driver.quit() |
在命令行输入python d:\calc-huawei.py 执行脚本
今天就练习到这里,如果你能跟上进度,剩下一天就好说了。
(完)
13、安装Python的基础包工具setuptools