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

来源:互联网 发布:矩阵加常数 编辑:程序博客网 时间:2024/05/22 11:38

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

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



一、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使用命令详情

二、命令调试

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

                      

//简单的示例

<span style="background-color: rgb(255, 204, 204);">from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage  <span style="color:#009900;">#引入需要的组件</span>device = MonkeyRunner.waitForConnection()  <span style="color:#009900;">#获取设备对象</span>device.press('KEYCODE_MENU','DOWN_AND_UP')  <span style="color:#009900;">#按下菜单按钮</span>result = device.takeSnapshot()              <span style="color:#009900;">#获取截图文件</span>result.writeToFile('./shot1.png','png')    <span style="color:#99ff99;"> </span><span style="color:#009900;">#将截图文件保存</span></span>

三、文件运行

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

                        

实现文件的调用后,可先在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 MonkeyRunnerfrom com.android.monkeyrunner import MonkeyDevicefrom com.android.monkeyrunner.easy import EasyMonkeyDevicefrom com.android.monkeyrunner.easy import Byfrom com.android.chimpchat.hierarchyviewer import HierarchyViewerimport systype = 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 tooltool = 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!')

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

0 0