Monkeyrunner操作测试.docx
《Monkeyrunner操作测试.docx》由会员分享,可在线阅读,更多相关《Monkeyrunner操作测试.docx(13页珍藏版)》请在冰点文库上搜索。
Monkeyrunner操作测试
Monkeyrunner操作手册
一、自动化测试的原理
a)手机自动化测试的原理
i.手机自动化测试的原理为PC上一个控制端(测试工具)与手机上的一个agent端,通过串口、USB或者无线方式将PC与手机终端相连,然后应用测试工具向手机发送请求或者命令,手机收到命令或者请求后,交给agent端解析,然后agent将这些解析的命令下发给手机的各个功能模块所能识别的命令,调用那些功能模块模拟操作。
完成这些操作后,手机会返回一些信息,agent可以抓取这些信息,然后传回给PC端,这样就完成了一个完整的手机自动化测试。
ii.关键点在于agent,有的公司是向自己的手机终端的软件功能模块中植入测试程序响应代码,有的公司可以利用MMI_Command的方式来控制手机终端;原理就是给手机提供一个响应的接口。
iii.而对于PC控制端,这个测试脚本用各种编程语言都可以,看如何定义。
iv.而有的自动化测试设计成录制的机制,说通俗点,就是记录手工操作的键盘信息或者LCD的操作信息(LCD需要用到智能识别机制)
v.自动化测试框架的搭建方法是通用的,你需要有一套自己的测试框架才能保证自动化测试的顺利开展。
b)MonkeyRunner自动化测试的原理
MonkeyRunner工具提供了一个API,运用该API编写的程序可以不用通过Android代码来直接控制Android设置和模拟器,我们可以写一个Python程序对Android应用程序或测试包进行安装,运行,发送模拟击键,对用户界面进行截图并将截图存储在指定目录上等操作。
二、环境搭建
a)连接手机:
1Android需要Root;2(不必须)安装RE
,控制data/data挂载权限工具安装
i.JDK安装:
详细:
JDK安装配置
ii.SDK安装:
建议拷贝SDK包,解压后配置SDK环境变量或安装详细:
SDK安装配置
iii.安装apktool,下载apktool包,解压后,拷贝到SDK:
..sdk\tools\下
iv.Python编译器安装:
1.下载python安装包
2.双击打开python
3.选择安装路径,点击NEXT,到安装完成
4.配置python环境变量,在添加python安装地址
v.安装完成后在cmd窗口下面分别输入java–version、python和monkeyrunner检查是否正确安装,如下图所示:
至此环境安装就结束了
三、Monkeyrunner:
连接真机
因为模拟器和真机的巨大差距,建议使用真机做Monkeyrunner自动化测试,如果没有真机,自行安装虚拟模拟器。
a)在cmd窗口下面输入adbdecixes
显示出真机连接型号。
如果未出现
连接不成功。
连接不成功,可以尝试使用豌豆荚安装手机连接,按照提示对PC和手机操作。
b)连接成功后,在cmd窗口下面输入adbshell
进入到手机,连接成功
四、使用Monkeyrunner基本要素
#导入模块(必须-第一步);
fromcom.android.monkeyrunnerimportMonkeyRunner,MonkeyDevice,MonkeyImage
#连接当前设备,并返回一个MonkeyDevice对象(必须-第二步);
device=MonkeyRunner.waitForConnection()
#安装Android包:
device.installPackage('D:
\FreeBook.apk')
#卸载程序
device.removePackage('com.xiaomishu.restaurant.reservation')
#使用 aapt(apktool安装)获取Activity下package和入口activity名称
使用cmd窗口下面,跳转到apktool下,输入aaptdumpbadgingD:
\freebook.apk
#启动一个Activity;
device.startActivity(component='com.xiaomishu.restaurant.reservation/com.xiaomishu.rp.app.activity.main.SplashActivity')
#截图;
result=device.takeSnapshot()
result.writeToFile('F:
/shot/1.png','png')
`#从PC加载图片
pic=MonkeyRunner.loadImageFromFile(‘./shot.png’)
#获取坐标点指定区域的图像
newpic=newpic.getSubImage((0,57,715,1123))
#和电脑上保存的图片进行对比,并输出结果
pic=MonkeyRunner.loadImageFromFile(‘F:
/shot.png’)
newpic.writeToFile(‘./shot1.png’,’png’)
print(pic.sameAs(newpic,1.0))
#时延(秒);
MonkeyRunner.sleep
(2)
#滑动屏幕;
device.drag((180,180),(600,600),0.1,10)
//开始,结束,持续时间,步骤
#连续滑动屏幕;
foriinrange(1,4):
device.drag((180,180),(600,600),0.1,10)
#触击屏幕;
device.touch(408,66,"DOWN_AND_UP")
#打印
print"insertlogin"
#输入(登录输入)
device.type('longshan')
#按键(系统键)
device.press('KEYCODE_HOME','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
#回车键
device.press('KEYCODE_ENTER')
#屏幕唤醒
device.wake()
`#for循环
foriinrange(5,10):
print(i)
#循环截图命名
result=device.takeSnapshot()
result.writeToFile('F:
/shot/'+str(i)+'.png','png')
#时间命名
t=time.strftime("%Y-%m-%d-%X",time.localtime())
t=t.replace(":
","-")
result=device.takeSnapshot()
result.writeToFile('F:
/shot/'+t+'.png','png')
#if判断
if(device):
print"deviceisOK"
else:
print"deviceis...Please...退出"
sys.exit
(1)
#定义函数
importsys,time,datetime,os
defwrite_result(casename):
t=time.strftime("%Y-%m-%d-%X",time.localtime())
t=t.replace(":
","-")
testfinish=casename+''+'testfinished!
'
new_path_filename=r'F:
\shot\TestResult.txt'
file_object=open(new_path_filename,'a')
file_object.write(t)
file_object.write('\n')
file_object.write(testfinish)
file_object.write('\n')
file_object.close()
printtestfinish
#调用函数
write_result(casename)
综上,常用:
1.print"insertlogin"
2.device.type('longshan')
3.device.press('KEYCODE_ENTER')
4.device.touch(430,220,"DOWN_AND_UP")
5.device.drag((300,670),(300,220),1,10)
6.result=device.takeSnapshot()
7.result.writeToFile('F:
/shot/1.png','png')
8.MonkeyRunner.sleep(10)
9.device.wake()
五、启动Monkeyrunner
a)在cmd窗口下面输入monkeyrunner,进入monkeyrunner版本信息
b)导入模板fromcom.android.monkeyrunnerimportMonkeyRunner,MonkeyDevice,MonkeyImage回车
c)连接当前设备,并返回一个MonkeyDevice对象
d)按下Home键device.press('KEYCODE_HOME','DOWN_AND_UP')
e)后续操作(按照基本要素操作)
六、使用Monkeyrunner编辑脚本
除了cmd直接操作手机,也可以编辑好脚本后,运行脚本,一次操作多个脚本命令
a)新建py格式脚本,如record_test.py
b)编辑脚本
c)运行脚本,在cmd窗口下,输入monkeyrunnerD:
\record_test.py,基本即可运行,脚本运转速度比较快,中间穿插时延比较好
附:
1、instalandremove.py安装和卸载模板,修改****部分即可
2、MonR-P.py脚本模板,操作手机安装卸载,输入截图等等基本全部包含在内
3、for-循环模板,4次循环点击HOME和MENU
七、使用Monkeyrunner录制脚本
Monkeyrunner除了编写脚本,也可以录制脚本,再运行,录制的脚本主要基于坐标点,无法测试安装和卸载。
常用功能:
点击,滑动,时延,点击按键:
HomeMENUSearch,输入主界面:
具体操作步骤如下:
a)新建py格式脚本:
recorder.py
b)在脚本中编写内容如下:
fromcom.android.monkeyrunnerimportMonkeyRunnerasmr
fromcom.android.monkeyrunner.recorderimportMonkeyRecorderasrecorder
device=mr.waitForConnection()
recorder.start(device)
c)保存recorder.py后,在cmd窗口下,运行monkeyrunnerD:
\recorder.py,也可以在cmd下,先monkeyrunner再输入上面脚本,启动录制
d)录制脚本:
walt时延(s),pressaButton按下指定系统3个按键中一个,TypeSomething输入文本,Fling滑动RefreshDisplay刷新屏幕(用于断开连接后)
e)录制完成脚本后,点击:
exportAction导出录制的脚本
保存,选择保存位置,和脚本名:
如:
record_test.py
f)新建py格式脚本:
recorder_playback.py
g)编辑recorder_playback.py脚本,内容如下:
importsys
fromcom.android.monkeyrunnerimportMonkeyRunner
CMD_MAP={
'TOUCH':
lambdadev,arg:
dev.touch(**arg),
'DRAG':
lambdadev,arg:
dev.drag(**arg),
'PRESS':
lambdadev,arg:
dev.press(**arg),
'TYPE':
lambdadev,arg:
dev.type(**arg),
'WAIT':
lambdadev,arg:
MonkeyRunner.sleep(**arg)
}
#Processasinglefileforthespecifieddevice.
defprocess_file(fp,device):
forlineinfp:
(cmd,rest)=line.split('|')
try:
#Parsethepydict
rest=eval(rest)
except:
print'unabletoparseoptions'
continue
ifcmdnotinCMD_MAP:
print'unknowncommand:
'+cmd
continue
CMD_MAP[cmd](device,rest)
defmain():
file=sys.argv[1]
fp=open(file,'r')
device=MonkeyRunner.waitForConnection()
process_file(fp,device)
fp.close();
if__name__=='__main__':
ain()
h)在cmd窗口下,运行:
MonkeyrunnerD:
\recorder_playback.pyD:
\recorder_test.py脚本即可运行,真机安装脚本步骤运行
注:
Monkeyrunner,在运行了录制窗口后,如果device连接不上,需要重启手机和电脑
附:
recorder_playback.pyrecorder_test.pyrecorder.py文件
MonR-P-1.py基于坐标,MonR-P-2.py基于坐标:
添加判断、函数、循环、截图。
。
。
。
。
备注:
Monkeyrunner运用方便,但是移植性太弱,需要坐标支持,所以Monkeyrunner可以用基于ID控件的方式编写脚本,但是ID得获得和对手机服务要求高
附:
MonR-P-3.py基于ID