Android测试及其相关工具的使用.docx
《Android测试及其相关工具的使用.docx》由会员分享,可在线阅读,更多相关《Android测试及其相关工具的使用.docx(41页珍藏版)》请在冰豆网上搜索。
Android测试及其相关工具的使用
Android测试及其相关工具的使用
1.Android自动测试之Monkey
1.1.什么是Monkey
Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。
它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。
Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。
1.2.Monkey的特征
1、测试的对象仅为应用程序包,有一定的局限性。
2、Monky测试使用的事件流数据流是随机的,不能进行自定义。
3、可对MonkeyTest的对象,事件数量,类型,频率等进行设置。
1.3.Monkey的基本用法
基本语法如下:
$adbshell
monkey[options]
如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。
下面是一个更为典型的命令行示例,它启动指定的应用程序,并向其发送500个伪随机事件:
$adbshell
monkey-pyour.package.name-v500
下面的是更加具体的命令行示例:
$adbshell
monkey-s12--throttle450-p包名--kill-process-after-error--ignore-timeouts--ignore-security-exceptions-v10000
1.4.关于Monkey测试的停止条件
MonkeyTest执行过程中在下列三种情况下会自动停止:
1、如果限定了Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止。
2、如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错。
3、如果应用程序产生了应用程序不响应(applicationnotresponding)的错误,Monkey将会停止并报错。
通过多次并且不同设定下的Monkey测试才算它是一个稳定性足够的程序。
1.5.Monkey命令参数介绍
1)参数:
-p
参数-p用于约束限制,用此参数指定一个或多个包(Package,即App)。
指定
包之后,Monkey将只允许系统启动指定的APP。
如果不指定包,Monkey将允许系统启动设备中的所有APP。
*指定一个包:
adbshellmonkey-pcom.htc.Weather100
说明:
com.htc.Weather为包名,100是事件计数(即让Monkey程序模拟100次随机用户事件)。
*指定多个包:
adbshellmonkey-pcom.htc.Weather–pcom.htc.pdfreader-pcom.htc.photo.widgets100
*不指定包:
adbshellmonkey100
说明:
Monkey随机启动APP并发送100个随机事件。
*要查看设备中所有的包,在CMD窗口中执行以下命令:
>adbshell
#cddata/data
#ls
2)参数:
-v
用于指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下表所示:
日志级别Level0
示例adbshellmonkey-pcom.htc.Weather–v100
说明缺省值,仅提供启动提示、测试完成和最终结果等少量信息
日志级别Level1
示例adbshellmonkey-pcom.htc.Weather–v-v100
说明提供较为详细的日志,包括每个发送到Activity的事件信息
日志级别Level2
示例adbshellmonkey-pcom.htc.Weather–v-v–v100
说明最详细的日志,包括了测试中选中/未选中的Activity信息
3)参数:
-s
用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。
*示例:
Monkey测试1:
adbshellmonkey-pcom.htc.Weather–s10100
Monkey测试2:
adbshellmonkey-pcom.htc.Weather–s10100
两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的。
操作序列虽然是随机生成的,但是只要我们指定了相同的Seed值,就可以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列伪随机的;
4)参数:
--throttle<毫秒>
用于指定用户操作(即事件)间的时延,单位是毫秒;
*示例:
adbshellmonkey-pcom.htc.Weather–throttle3000100
5)参数:
--ignore-crashes
用于指定当应用程序崩溃时(Force&Close错误),Monkey是否停止运行。
如果使用此参数,即使应用程序崩溃,Monkey依然会发送事件,直到事件计数完成。
*示例1:
adbshellmonkey-pcom.htc.Weather--ignore-crashes1000
测试过程中即使Weather程序崩溃,Monkey依然会继续发送事件直到事件数目达到1000为止;
*示例2:
adbshellmonkey-pcom.htc.Weather1000
测试过程中,如果Weather程序崩溃,Monkey将会停止运行。
6)参数:
--ignore-timeouts
用于指定当应用程序发生ANR(ApplicationNoResponding)错误时,Monkey是否停止运行。
如果使用此参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计数完成。
7)参数:
--ignore-security-exceptions
用于指定当应用程序发生许可错误时(如证书许可,网络许可等),Monkey是否停止运行。
如果使用此参数,即使应用程序发生许可错误,Monkey依然会发送事件,直到事件计数完成。
8)参数:
--kill-process-after-error
用于指定当应用程序发生错误时,是否停止其运行。
如果指定此参数,当应用程序发生错误时,应用程序停止运行并保持在当前状态(注意:
应用程序仅是静止在发生错误时的状态,系统并不会结束该应用程序的进程)。
9)参数:
--monitor-native-crashes
用于指定是否监视并报告应用程序发生崩溃的本地代码。
10)参数:
--pct-{+事件类别}{+事件类别百分比}
用于指定每种类别事件的数目百分比(在Monkey事件序列中,该类事件数目占总事件数目的百分比)
参数:
使用说明:
示例:
--pct-touch{+百分比}
调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)
adbshellmonkey-pcom.htc.Weather--pct-touch101000
--pct-motion{+百分比}
调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成)adbshellmonkey-pcom.htc.Weather--pct-motion201000
--pct-trackball{+百分比}
调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)
adbshellmonkey-pcom.htc.Weather--pct-trackball301000
--pct-nav{+百分比}
调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)
adbshellmonkey-pcom.htc.Weather--pct-nav401000
--pct-majornav{+百分比}
调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:
5-way键盘的中间按键、回退按键、菜单按键)
adbshellmonkey-pcom.htc.Weather--pct-majornav501000
--pct-syskeys{+百分比}
调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、StartCall、EndCall及音量控制键)
adbshellmonkey-pcom.htc.Weather--pct-syskeys601000
--pct-appswitch{+百分比}
调整启动Activity的百分比。
在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法
adbshellmonkey-pcom.htc.Weather--pct-appswitch701000
--pct-anyevent{+百分比}
调整其它类型事件的百分比。
它包罗了所有其它类型的事件,如:
按键、其它不常用的设备按钮、等等
adbshellmonkey-pcom.htc.Weather--pct-anyevent1001000
指定多个类型事件的百分比:
adbshellmonkey-pcom.htc.Weather--pct-anyevent50--pct-appswitch501000
注意:
各事件类型的百分比总数不能超过100%
2.Android自动测试之monkeyrunner
2.1.什么是monkeyrunner
monkeyrunner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。
通过monkeyrunner,您可以写出一个Python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上。
monkeyrunner工具的主要设计目的是用于测试功能/框架水平上的应用程序和设备,或用于运行单元测试套件,但您当然也可以将其用于其它目的。
monkeyrunner与Monkey的差别
Monkey:
Monkey工具直接运行在设备或模拟器的adbshell中,生成用户或系统的伪随机事件流。
monkeyrunner:
monkeyrunner工具则是在工作站上通过API定义的特定命令和事件控制设备或模拟器。
2.2.monkeyrunner的测试类型
网络释义:
1、多设备控制(Multipledevicecontrol):
monkeyrunnerAPI可以跨多个设备或模拟器实施测试套件。
您可以在同一时间接上所有的设备或一次启动全部模拟器(或统统一起),依据程序依次连接到每一个,然后运行一个或多个测试。
您也可以用程序启动一个配置好的模拟器,运行一个或多个测试,然后关闭模拟器。
2、功能测试(Functionaltesting):
monkeyrunner可以为一个应用自动贯彻一次功能测试。
您提供按键或触摸事件的输入数值,然后观察输出结果的截屏。
3、回归测试(Regressiontesting):
monkeyrunner可以运行某个应用,并将其结果截屏与既定已知正确的结果截屏相比较,以此测试应用的稳定性。
4、可扩展的自动化(Extensibleautomation):
由于monkeyrunner是一个API工具包,您可以基于Python模块和程序开发一整套系统,以此来控制Android设备。
除了使用monkeyrunnerAPI之外,您还可以使用标准的Pythonos和subprocess模块来调用AndroidDebugBridge这样的Android工具。
2.3.Monkeyrunner运行环境
您可以直接使用一个代码文件运行monkeyrunner,抑或在交互式对话中输入monkeyrunner语句。
不论使用哪种方式,您都需要调用SDK目录的tools子目录下的monkeyrunner命令。
如果您提供一个文件名作为运行参数,则monkeyrunner将视文件内容为Python程序,并加以运行;否则,它将提供一个交互对话环境。
monkeyrunner的命令语法为:
monkeyrunner-plugin
2.4.MonkeyRunner实例及使用说明
#Importsthemonkeyrunnermodulesusedbythisprogram
fromcom.android.monkeyrunnerimportMonkeyRunner,MonkeyDevice,MonkeyImage
#Connectstothecurrentdevice,returningaMonkeyDeviceobject
device=MonkeyRunner.waitForConnection()
#Takesascreenshot
result=device.takeSnapshot()
#Writesthescreenshottoafile
result.writeToFile('./shotbegin.png','png')
#Dragscreen
foriinrange(1,3):
device.drag((200,300),(100,300),0.1,1)
MonkeyRunner.sleep
(1)
#Takesascreenshot
result=device.takeSnapshot()
#Writesthescreenshottoafile
result.writeToFile('./shotend.png','png')
使用方法:
将代码拷贝到记事本并保存为.py格式的文件(最好和MonkeyRunner放在同一目录),如Demo.py,然后运行CMD并进入MonkeyRunner目录,使用MonkeyRunnerDemo.py运行
实例详解:
1.导入模块
fromcom.android.monkeyrunnerimportMonkeyRunner,MonkeyDevice,MonkeyImage
2.连接当前设备,并返回一个MonkeyDevice对象
device=MonkeyRunner.waitForConnection()
3.截图并保存
result=device.takeSnapshot()
result.writeToFile('./shotbegin.png','png')
4.滑动屏幕2次:
foriinrange(1,3):
device.drag((200,300),(100,300),0.1,1)
MonkeyRunner.sleep
(1)
说明:
这是Python中的一个for循环,意思是遍历1~3(不含3)所有整数,遍历做什么呢?
第二行就是我们要做的事情,“drag”就是拖动事件指令,后面的括号里就是参考,表示从第一个坐标开始到一个坐标结束,0.1表示所用时间,最后的1可以理解为采样点,默认为10,这里设置的是1,在本实例中1和10区别不大。
第三行就是等待的意思,滑动一次后等待1秒再继续。
截图并保存
result=device.takeSnapshot()
result.writeToFile('./shotend.png','png')
和第三步是一样的,只是保存的名字不一样,这样就实现了测试前和测试后的结果对比。
除了实例中的导入,截图,保存截图,滑动屏幕,还有很多方法,只要搞清楚怎么用了,剩下的就是自己排列组合来做成一个个的Case了。
其它方法介绍:
1.安装Android包,注意,此方法返回的返回值为boolean,由此可以判断安装过程是否正常;
device.installPackage('myproject/bin/MyApplication.apk')
device.removePackage('com.example.android.notepad')
print('卸载成功')
device.installPackage('ApiDemos.apk')
print('安装成功')
2.启动一个Activity;
device.startActivity(component='com.android.htccontacts/com.android.htccontacts.ContactsTabActivity')
3.时延(秒);
MonkeyRunner.sleep(3)
4.触击屏幕;
device.touch(507,72,"DOWN_AND_UP")
5.执行adbshell命令;
device.shell("inputtextgoup01")
6.发送按键指令
按下HOME键device.press('KEYCODE_HOME','DOWN_AND_UP')
按下BACK键device.press('KEYCODE_BACK','DOWN_AND_UP')
按下下导航键device.press('KEYCODE_DPAD_DOWN','DOWN_AND_UP')
按下上导航键device.press('KEYCODE_DPAD_UP','DOWN_AND_UP')
按下OK键device.press('KEYCODE_DPAD_CENTER','DOWN_AND_UP')
相应的按键对应的名称如下:
home键:
KEYCODE_HOME
back键:
KEYCODE_BACK
send键:
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
menu键:
KEYCODE_MENU
3.Android自动测试之CTS
3.1.什么是CTS
CTS是CompatibilityTestSuite的简称,是android的兼容性测试套件,定制了andoird后,必须通过最新的CTS检测,以保证标准的APK能在平台上安装运行,通过了CTS后,将测试报告给Google,以取得androidmarket认证,CTS的测试框架如下图:
CTS有两种方式,一种是自己编译CTS,另一种是直接使用从官网上下载的编译好的。
自己编译则:
$.build/envsetup.sh
$makects
编译好后的的文件是out/host/linux-x86/cts/android-cts.zip,如果你的代码是最新的,则这个文件和官方网站的放的编译好的文件是一样的。
如果要自己修改CTS的测试代码,在android代码根目录下的cts目录下
CTS的makefile:
build/core/tasks/cts.mk
CTS的程序文件:
out/host/linux-x86/bin/cts
CTS的测试计划:
out/host/linux-x86/cts/android-cts/repository/plans
CTS的测试用例:
out/host/linux-x86/cts/android-cts/repository/testcases
CTS的测试结果:
out/host/linux-x86/cts/android-cts/repository/results
CTS的配置:
out/host/linux-x86/cts/tools/utils/host_config.xml
3.2.搭建CTS测试环境
首先在LINUX机器上安装android的SDK环境,既然已经开始关注CTS了,LINUXSDK环境这部分应该很熟悉了,这里省略。
可以参考
修改~/.bashrc加入SDK的工具目录
exportPATH=$PATH:
~/android-sdk-linux/platform-tools:
~/android-sdk-linux/tools
保存退出后运行下面语句使修改的环境变量在当前终端生效
$source~.bashrc
打开终端输入命令:
adbdevices,连接上这会显示设备ID,
如果未连接上则会以?
?
?
?
?
?
?
代替,此时可以通过输入以下命令进行连接
$adbkill-server
$sudoadbstart-server
$adbdevices
还有问题的话参考另外一篇文章AndroidSDKUSB配置
3.3.设备端的设置
1.在Android4.0及以上版本,手机必须是用户(user)模式,不是工程(eng)模式,通过adbshell进去看一下,如果提示符号是#则为eng模式,如果是$则为用户模式。
把手机设置为英文语言。
2.安装TTS,Android4.0进Settings>Speechsynthesis>Installvoicedata,Android2.3.5
Settings>Voiceinput&output>Text-to-speechsettings>Installvoicedata
这一步是为了保证安装了AndroidMarket,如果没有安装需要用adb手动安装.
3.插入一张空白的SD卡,测试过程中会擦除修改SD卡上的数据
4.恢复出厂设置。
Settings>Privacy>Factorydatareset
5.“USB调试”被选中.Settings>Applications>Development>USBdebugging
6.允许模拟地点.Settings>Applications>Development>Allowmocklocations
7.保持唤醒状态Settings>Applications>Development>StayAwake
8.去掉锁屏Settings>Security&location&security>Setupscreenlo