前面有一篇文章介绍了编写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获取方法在后续的文章中继续介绍。希望得到大家的意见,让工作变得更加有趣高效!