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