您的位置:首页 > 移动开发 > Android开发

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

2016-04-22 15:28 387 查看
博客论文系列篇导航 ----- 你还可以看看这里@_@

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

一、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 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!')


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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: