A-A+
Monkeyrunner进行自动化测试的方法
前面有一篇文章介绍了编写python来进行Monkeyrunner的耗电测试,其实Monkeyrunner在自动化测试里面的功能远不止于此,其中,可以连接多个模拟器(或者真机)进行自动化测试就是Monkeyrunner的一大亮点。由于Monkeyrunner编写基于python,所以对python有一定了解的小伙伴会应用得游刃有余。好了,下面简单作个介绍:
环境说明:本次测试是针对一个app可以自动化模拟进入不同分辨率模拟器的界面(Activity)进行各种操作(点击Button和模拟滑动界面),然后进行各模拟器界面的截图。当然,这次测试应用是一个通讯app(类似SMS),会有一个模拟发送接收短信的简单自动化功能代码;
测试工具:Eclipse+python(2.7.0)+两个不同自定义分辨率模拟器(320P、1080P);
步骤:
运行Eclipse和插件的安装在博主的另外一篇文章已经有介绍,这里就不累赘,直接进行代码部分:
具体代码如下:
- #导入相关MonkeyRunner的包
- from com.android.monkeyrunner import MonkeyRunner
- from com.android.monkeyrunner.easy import EasyMonkeyDevice
- from com.android.monkeyrunner.easy import By
- from com.android.monkeyrunner import MonkeyDevice
- #定义两个连接设备的devices,这里是用了两个模拟器
- device1=MonkeyRunner.waitForConnection(1.0,'emulator-5554')
- device2=MonkeyRunner.waitForConnection(1.0,'emulator-5556')
- devicelist=(device1,device2) #定义了一个连接设备数组devicelist
- k=0 #标识变量,用于把不同分辨率的手机截图存放在不同的自定义文件夹里面
- for i in range(0,len(devicelist)): #遍历数组两个连接设备
- #判断设备是否连接上
- if not devicelist[i]:
- print "Please connect a device to start!"
- else:
- print "Start "
- #定义一个touchId,用于响应touch事件
- touchId=EasyMonkeyDevice(devicelist[i])
- #安装一个apk包
- devicelist[i].installPackage("********.apk")
- MonkeyRunner.sleep(30) #由于在模拟器上运行,有时候上一次的操作没完成就跳转到下一步操 作的语句,避免影响下一次操作而产生报错,需要给模拟器一段休眠 时间,建议每一次操作后都进行休眠(下同)
- if(k==0): #进行第一个模拟器的a变量命名,图片格式为png
- a='*******.png'
- else: #进行第二个模拟器的a变量命名
- a='*******.png'
- #启动App中需要测试的Activity
- devicelist[i].startActivity(component="************Activity")
- MonkeyRunner.sleep(15)
- #drag事件是可以理解为在模拟器屏幕上滑动操作,前两个参数是模拟器的点击坐标
- devicelist[i].drag((700,240),(100,240),1,10)
- MonkeyRunner.sleep(10)
- #touchId事件是点击Button的操作,每个Button都有一个id号,第二个参数相当于点击该按钮
- touchId.touch(MonkeyDevice.DOWN_AND_UP,By.id('id/*****'),MonkeyDevice.DOWN_AND_UP)
- MonkeyRunner.sleep(10)
- touchId.touch(By.id('id/*****'),MonkeyDevice.DOWN_AND_UP)
- MonkeyRunner.sleep(10)
- #press事件是直接操作模拟器的虚拟键盘,这里是点击“back”键
- devicelist[i].press('KEYCODE_BACK', 'DOWN_AND_UP')
- MonkeyRunner.sleep(5)
- devicelist[i].press('KEYCODE_BACK', 'DOWN_AND_UP')
- MonkeyRunner.sleep(5)
- touchId.touch(By.id('id/*********'),MonkeyDevice.DOWN_AND_UP)
- MonkeyRunner.sleep(5)
- Compose=devicelist[i].takeSnapshot() //定义一个Compose变量,进行对当前界面的截图
- #给当前界面的光标指处模拟输入文字“1111”
- device.type('1111')
- #调用python的os库,这里是模拟12345678发送“test”给模拟器“5554”
- #模拟器的命名是从5554开始,之后为5556、5558,依次类推,每次都是按照模拟器的启动先后来命名
- os.system('echo "sms send 12345678 test" | telnet localhost 5554')
- #把该截图进行保存
- Compose.writeToFile(a,'png')
- #进行完第一个模拟器操作后,k++进行下一个模拟器的循环操作
- k=k+1
PS:以上要注意python编写代码的缩进结构
结语:以上的代码足以覆盖所有的自动化功能测试,其中对于app的Activity或者点击Button获取方法在后续的文章中继续介绍。希望得到大家的意见,让工作变得更加有趣高效!