Android自动化测试MonkeyRunner(二)------第一个示例

博客论文系列篇导航 ----- 你还可以看看这里@_@

-------------------------------------------------------------------------------------------------------------------



一、ADB基本命令

ADB Android Debug Bridge:Android调试桥

adb kill-server:关闭adb服务器    adb start-server:开启adb服务器

adb devices :展示链接设备,使用这个命令也有adb start-server的功能


应用以上命令,可以将真机与Android运行环境连接起来。


使用天天模拟器,夜神模拟器则使用adb connect 127.0.0.1:6555,adb connect 127.0.0.1:62001,实现模拟器链接。

ADB使用命令详情

二、命令调试

执行基本的代码形式,在命令窗口中实现:

                      Android自动化测试MonkeyRunner(二)------第一个示例_第1张图片

//简单的示例

from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage  #引入需要的组件
device = MonkeyRunner.waitForConnection()  #获取设备对象
device.press('KEYCODE_MENU','DOWN_AND_UP')  #按下菜单按钮
result = device.takeSnapshot()              #获取截图文件
result.writeToFile('./shot1.png','png')     #将截图文件保存

三、文件运行

将以上内容写成python.py,在Android SDK工具包环境下,执行该文件:monkeyrunner python.py

                        Android自动化测试MonkeyRunner(二)------第一个示例_第2张图片

实现文件的调用后,可先在Python编辑器中编辑文件,然后再应用命令直接执行文件。实现了大量命令的级数级增长,并便于代码的重复应用。

四、代码框架及编码规范

在三的基础上,可实现文件的保存。则可以在文件中实现自动化测试流程以及检核对应的功能。

Python语言拥有类JAVA的很多高级特性。采用程序框架编码法,会提高程序的重复利用率。

应用面向对象的思想,类的类型主要分为:工具类与功能实体类。

工具类中主要包含:打印信息,上拉刷新,下拉加载,点击,手机按键Home、Menu、确认、上下左右键,截图保存,退出,返回等;

功能实体类,则依据app的特点,对具体的功能封装对象。在实现中,常采用以一个页面为一个实体类。购物类的app底部导航为五个,详情及列表各一个。实现中,先依据每一个对象本身的逻辑,校核本身功能;在根据业务流程,通过不同页面对象调用本身的方法链接形成业务流程。

以首页为例:本身有上拉加载更多,下拉刷新,后台运行【Home键】,以及实现每个位置跳转下一页面等功能。那分类页会有其对应功能。

第一种测试对象本身逻辑就是:分别检核首页每个页面功能;第二种测试就是一句逻辑,分别用对象调用对应方法组成一个系列,形成业务逻辑。

文件说明:
#################################################################################
# 文件说明:
#       订货宝测试流程探索过程代码实现
#       类:工具、订货宝、首页
# 执行人:幻视
# 时间:  2016.04.20
# 修改:
#
#################################################################################
类说明:
#===============================================================================
# 类说明:
#       定义基本的工具方法
#       方法:
#           下拉刷新、通过点点击、通过ViewID点击、退出程序、返回、开启Activity、
#           Home、向下导航、向上导航、Ok键、Menu键
#           打印信息页
#===============================================================================
方法说明:
    #--------------------------------------------------------------------------------
    # 方法说明: 下拉刷新  传入:开始Y,结束Y
    #--------------------------------------------------------------------------------
代码执行说明:
1级:
#####################################################################################
#####################################################################################  
#首页测试方法调用  
2级:
#####################################################################################
#============================================================================
#首页测试方法调用
3级:
#####################################################################################
#------------------------------------------------------------------------------------------------------------------------------

一个实例:

#-*- coding:utf-8 –*-
#################################################################################
# 文件说明:
#       购物类app测试流程探索过程代码实现
#       类:工具、购物类、首页
# 执行人:幻视
# 时间:  2016.04.20
# 修改:
#
#################################################################################

from com.android.monkeyrunner import MonkeyRunner
from com.android.monkeyrunner import MonkeyDevice
from com.android.monkeyrunner.easy import EasyMonkeyDevice
from com.android.monkeyrunner.easy import By
from com.android.chimpchat.hierarchyviewer import HierarchyViewer

import sys
type = sys.getfilesystemencoding()
reload(sys)
sys.setdefaultencoding( "utf-8" ) #更改编码方式

device = MonkeyRunner.waitForConnection()  #获取设备对象
easy_device = EasyMonkeyDevice(device)

#================================================================================
# 类说明:
#       定义基本的工具方法
#       方法:
#           下拉刷新、通过点点击、通过ViewID点击、退出程序、返回、开启Activity、
#           Home、向下导航、向上导航、Ok键、Menu键
#           打印信息页
#================================================================================
class Tool:  
    
    #--------------------------------------------------------------------------------
    # 方法说明: 下拉刷新  传入:开始Y,结束Y
    #--------------------------------------------------------------------------------
    def pullToFlush(self,start,end):
        device.drag((300,start),(300,end),0.1,10) #下拉刷新
        device.drag((250,end),(250,start),0.1,10) #上滑
    #--------------------------------------------------------------------------------
    # 方法说明: 根据坐标点击
    #--------------------------------------------------------------------------------
    def touchPoint(self,point_x,point_y): 
        device.touch(point_x,point_y,MonkeyDevice.DOWN_AND_UP)  #点击
        MonkeyRunner.sleep(3)
    #--------------------------------------------------------------------------------
    # 方法说明: 根据View ID点击
    #--------------------------------------------------------------------------------       
    def touchView(self,view_id): 
        easy_device.touch(By.id(view_id),MonkeyDevice.DOWN_AND_UP)  #点击
        MonkeyRunner.sleep(3)
    #--------------------------------------------------------------------------------
    # 方法说明: 退出程序     EXIT
    #--------------------------------------------------------------------------------     
    def exit(self):    
        for i in range(1,3):
            device.press('KEYCODE_BACK',MonkeyDevice.DOWN_AND_UP)  #点击返回
    #--------------------------------------------------------------------------------
    # 方法说明: 点击返回  BACK
    #--------------------------------------------------------------------------------   
    def back(self):            
        for i in range(0,1):
          device.press('KEYCODE_BACK',MonkeyDevice.DOWN_AND_UP)#点击返回
    #--------------------------------------------------------------------------------
    # 方法说明: 开启新的Activity  传入:包名,Activity全路径名
    #-------------------------------------------------------------------------------- 	  
    def startActivity(self,package,activity):  
        runComponent = package + '/' + activity
        device.startActivity(component=runComponent)
        MonkeyRunner.sleep(3.0)
    #--------------------------------------------------------------------------------
    # 方法说明: 按下HOME键
    #-------------------------------------------------------------------------------- 	 	
    def home(self):  
	device.press('KEYCODE_HOME',MonkeyDevice.DOWN_AND_UP) 
    #--------------------------------------------------------------------------------
    # 方法说明: 按下下导航键
    #-------------------------------------------------------------------------------- 		
    def downGuide(self):  
	device.press('KEYCODE_DPAD_DOWN',MonkeyDevice.DOWN_AND_UP) 
    #--------------------------------------------------------------------------------
    # 方法说明: 按下上导航键
    #-------------------------------------------------------------------------------- 	
    def upGuide(self):  
	device.press('KEYCODE_DPAD_UP',MonkeyDevice.DOWN_AND_UP)
    #--------------------------------------------------------------------------------
    # 方法说明: 按下OK键
    #-------------------------------------------------------------------------------- 		
    def ensureOK(self):  
	device.press('KEYCODE_DPAD_CENTER',MonkeyDevice.DOWN_AND_UP) 	
    #--------------------------------------------------------------------------------
    # 方法说明: 按下MENU键
    #-------------------------------------------------------------------------------- 	
    def menuGuide(self):  
	device.press('KEYCODE_MENU',MonkeyDevice.DOWN_AND_UP) 	
    #--------------------------------------------------------------------------------
    # 方法说明: 打印信息
    #-------------------------------------------------------------------------------- 	
    def printInfo(self):
        print("打开页面失败")
        print('\n')



        
#================================================================================
# 类说明:
#       购物类主页面框架跳转
#       方法:
#           欢迎页进入主页、跳转主页、跳转分类页、跳转活动页、跳转购物车页、跳转个人中心页
#================================================================================		
		
class  DS365Order: #购物类
	global tool
	tool = Tool()
    #--------------------------------------------------------------------------------
    # 方法说明: 通过欢迎页进入主页
    #-------------------------------------------------------------------------------- 	
        def initActivity(self):     
            print("开启欢迎页面  start SplashActivity")
            tool.startActivity('包名','Activity全路径名') #开启欢迎页
            MonkeyRunner.sleep(2)
            print("进入主页面  mainActivity start")
            print('\n')
    #--------------------------------------------------------------------------------
    # 方法说明: 切换到主页
    #-------------------------------------------------------------------------------- 	
	def mainActivityOpen(self):      
            print("打开分类页面  mainActivity start")
            tool.touchView('id/radio_a')  #点击view通过id
            MonkeyRunner.sleep(2)
            print("打开分类页面  mainActivity End")
            print('\n')
    #--------------------------------------------------------------------------------
    # 方法说明: 切换到分类页面
    #-------------------------------------------------------------------------------- 
        def classIfyOpen(self):     
            print("打开分类页面  classIfyActivity start")
            tool.touchView('id/radio_b')  #点击view通过id
            MonkeyRunner.sleep(2)
            print("打开分类页面  classIfyActivity  End")
            print('\n')
    #--------------------------------------------------------------------------------
    # 方法说明: 切换到活动页
    #-------------------------------------------------------------------------------- 
	def eventActivityOpen(self):    
	    print("打开活动页面  EventActivity start")
            tool.touchView('id/radio_c')  #点击view通过id
            MonkeyRunner.sleep(2)
            print("打开活动页面  EventActivity  end")
            print('\n')
    #--------------------------------------------------------------------------------
    # 方法说明: 切换到购物车页
    #-------------------------------------------------------------------------------- 		
	def shopCarActivityOpen(self):    
	    print("打开购物车页面  shopCarActivity start")
            tool.touchView('id/radio_d')  #点击view通过id
            MonkeyRunner.sleep(2)
            print("打开购物车页面  shopCarActivity  end")
            print('\n')
    #--------------------------------------------------------------------------------
    # 方法说明: 切换到个人中心
    #-------------------------------------------------------------------------------- 
	def myCenterActivityOpen(self):   
	    print("打开个人中心页面  myCenterActivity start")
            tool.touchView('id/radio_e')  #点击view通过id
            MonkeyRunner.sleep(2)
            print("打开个人中心页面  myCenterActivity  end")
            print('\n')




#================================================================================
# 类说明:
#       定义首页测试
#       方法:
#           跳转二维码扫描、跳转搜索页
#           畅销商品、我的货架、趣味购物、特价商品
#           促销专场
#           品牌馆
#================================================================================	
class ShouYe:
    #--------------------------------------------------------------------------------
    # 方法说明: 打开二维码扫描页面
    #-------------------------------------------------------------------------------- 
	def startSearchImgBt(self):
	    print("打开二维码扫描页面  SearchImgActivity start")
	    tool.touchView('id/searchImageButton')  #点击view通过id
	    MonkeyRunner.sleep(2)
            print("打开二维码扫描页面  SearchImgActivity  end")
            print('\n')
    #--------------------------------------------------------------------------------
    # 方法说明: 切换到搜索页面
    #-------------------------------------------------------------------------------- 
	def searchActivityOpen(self):   
	    print("打开搜索页面  searchActivity start")
            tool.touchView('id/search_keyword')  #点击view通过id
            MonkeyRunner.sleep(2)
            print("打开搜索页面  searchActivity  end")
            print('\n')
    #--------------------------------------------------------------------------------
    # 四大固定区域  --  快捷入口
    #-------------------------------------------------------------------------------- 
	def promotionActivityOpen(self):   #切换到畅销商品页面
            print("打开畅销商品页面  promotionActivity start")
            tool.touchView('id/goMarketing_RL')  #点击view通过id
            MonkeyRunner.sleep(2)
            print("打开畅销商品页面  promotionActivity  end")
            print('\n')
			
	def myShelfActivityOpen(self):   #切换到我的货架页面
	    print("打开我的货架页面  myShelfActivity start")
            tool.touchView('id/groupBuying_RL')  #点击view通过id
            MonkeyRunner.sleep(2)
            print("打开我的货架页面  myShelfActivity  end")
            print('\n')

	def shakeOKActivityOpen(self):   #切换到趣味购物页面
	    print("打开趣味购物页面  shakeOKActivity start")
            tool.touchView('id/shakeOK_RL')  #点击view通过id
            MonkeyRunner.sleep(2)
            print("打开趣味购物页面  shakeOKActivity  end")
            print('\n')
			
	def lowPriceActivityOpen(self):   #切换到特价区页面
	    print("打开特价区页面  lowPriceActivity start")
            tool.touchView('id/recharge_RL')  #点击view通过id
            MonkeyRunner.sleep(2)
            print("打开特价区页面  lowPriceActivity  end")
            print('\n')
    #--------------------------------------------------------------------------------
    # 促销专场  GridView
    #-------------------------------------------------------------------------------- 
	def promotionImgActivityOpen(self):   #切换到促销专场商品列表页面
	    print("打开促销专场商品列表页面  promotionImgActivity start")
            tool.touchView('id/promotionImage')  #点击view通过id
            MonkeyRunner.sleep(2)
            print("打开促销专场商品列表页面  promotionImgActivity  end")
            print('\n')

    #--------------------------------------------------------------------------------
    # 品牌馆  GridView
    #-------------------------------------------------------------------------------- 	
	def pinpaiImgActivityOpen(self):   #切换到品牌馆商品列表页面
	    print("打开品牌馆商品列表页面  pinpaiImgActivity start")
            tool.touchView('id/pinpaiImage')  #点击view通过id
            MonkeyRunner.sleep(2)
            print("打开品牌馆商品列表页面  pinpaiImgActivity  end")
            print('\n')


#####################################################################################
#####################################################################################			
#整体代码开始执行
toolUse = Tool()
order = DS365Order()
order.initActivity()

#####################################################################################
#====================================================================================
#首页测试方法调用
shouye = ShouYe()
try:
    shouye.startSearchImgBt()
    toolUse.back()
except ValueError:
    toolUse.printInfo()

try:
    shouye.searchActivityOpen()
    toolUse.back()
except ValueError:
    toolUse.printInfo()
    
try:
    shouye.promotionActivityOpen()
    toolUse.back()
except ValueError:
    toolUse.printInfo()

try:
    shouye.myShelfActivityOpen()
    toolUse.back()
except ValueError:
    toolUse.printInfo()

try:
    shouye.shakeOKActivityOpen()
    toolUse.back()
except ValueError:
    toolUse.printInfo()
    
try:
    shouye.lowPriceActivityOpen()
    toolUse.back()
except ValueError:
    toolUse.printInfo()

try:
    shouye.promotionImgActivityOpen()
    toolUse.back()
except ValueError:
    toolUse.printInfo()

try:
    shouye.pinpaiImgActivityOpen()
    toolUse.back()
except ValueError:
    toolUse.printInfo()

#####################################################################################
#====================================================================================
#订货宝主页面框架切换
order.classIfyOpen()
order.eventActivityOpen()
order.shopCarActivityOpen()
order.myCenterActivityOpen()		
order.mainActivityOpen()		


#####################################################################################
#====================================================================================
#系统清理
toolUse.exit()
MonkeyRunner.alert("finish")
print('test finished!')

路漫漫其修远兮,吾将上下而求索  ~_~

你可能感兴趣的:(Android应用,自动化测试,python,测试)