-------------------------------------------------------------------------------------------------------------------
一、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, 实现模拟器链接。
二、命令调试
执行基本的代码形式,在命令窗口中实现:
// 简单的示例
- <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 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!')
来源: http://lib.csdn.net/article/python/41930