1. 程式人生 > >Android自動化測試MonkeyRunner(二)------第一個示例

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,實現模擬器連結。

二、命令除錯

執行基本的程式碼形式,在命令視窗中實現:

                      

//簡單的示例

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

路漫漫其修遠兮,吾將上下而求索  ~_~

相關推薦

Android自動化測試MonkeyRunner------第一示例

------------------------------------------------------------------------------------------------------------------- 一、ADB基本命令 ADB Andr

初識gauge自動化測試框架

numbers 引用 文件中 自動化測試 文件描述 tor 興趣 測試 你是 看到一些同學對該工具有點一興趣,那麽我將繼續介紹Gauge自動化測試工具。 Gauge本質上一個BDD(Behavior Driven Development)測試框架。所以,首先你要了解BDD的

Python + Robotframework + Appium 之APP自動化測試實踐

廢話不多說,直接來實踐(二),本次基於Android手機Settings模組下的search功能進行的自動化測試,程式碼如下 :   1 *** Settings *** 2 Library AppiumLibrary 3 4 *** Variables

App自動化測試探索MAC環境搭建iOS+Python+Appium測試環境

code -s image ios 使用 usr developer contents gis 環境搭建要求,MAC 機器一臺,要求 Xcode 8.0以上 1. 安裝 Homebrew /usr/bin/ruby -e "$(curl -fsSL https://raw

【selenium3+JAVA】介面自動化測試教程——瀏覽器的關閉

瀏覽器的關閉有兩個方法,如下所示: System.setProperty("webdriver.chrome.driver", "D:\\test\\driver\\chromedriver.exe"); ChromeDriver chrome = new Ch

nightwatch + selenium 瀏覽器自動化測試 教程

上一篇已經講述瞭如何搭建環境,這一片主要針對語法進行 目錄 測試案例 測試案例 module.exports = { 'Demo test Google' : function (browser) { browser .url('htt

UI層自動化測試框架:Appium基礎

申明:本章節引用很多第三方資料和網上的教程,在參考資料tab中我都有備註,請理解。 由於該框架是基於Appium的,所以先講講appium的基礎知識 一:Appium介紹 Appium是由nodejs的express框架寫的Http Server

Android自動化測試初探: 模擬鍵盤滑鼠事件Socket+Instrumentation實現

通過Socket + Instrumentation實現模擬鍵盤滑鼠事件主要通過以下三個部分組成:   *   Socket程式設計:實現PC和Emulator通訊,並進行迴圈監聽   *   Service服務:將Socket的監聽程式放在Service中,從而達到

行為觸發之Android自動化測試instrumentation

由於對測試並沒有太多的概念,一不小心搜尋到各種字首:Instrumentation、InstrumentationTestCase、InstrumentationTestSuite、InstrumentationTestRunner 傻了眼,但仔細一看把字首去掉後大致就分類為了這三類:TestCase、T

webUI自動化測試框架:程式碼分層-基礎層

前言:該webUI自動化框架主要分為四層:基礎層、物件層、操作層、用例層,每一層負責各自的功能,這樣有益於提高程式碼的可讀性,複用性和擴充套件性。基礎層主要封裝了一些工具類,如解析xml檔案,讀取excel,分瀏覽器啟動,時間處理等,供其他類呼叫。 另外,筆者這邊主要使用的

Android自動化測試初探: 再述模擬鍵盤滑鼠事件adb shell 實現

上一篇博文中講述了通過Socket程式設計從外部向Emulator傳送鍵盤滑鼠模擬事件,貌似實現細節有點複雜。其實Android還有一種更簡單的模擬鍵盤滑鼠事件的方法,那就是通過使用adb shell 命令。 1.傳送鍵盤事件: 命令格式1:adb shell inp

Android自動化測試探索Android SDK tools安裝、aapt配置以及使用aapt獲取apk包名

Android SDK tools安裝 下載連線: https://www.androiddevtools.cn 找到對應mac的版本下載安裝即可   AAPT配置 #1. 進入根目錄 cd ~  #2. 開啟.bash_profile,  如

Android自動化測試探索程式碼覆蓋率統計

Android 程式碼覆蓋率統計   本週開始準備統計Android自動化用例的程式碼覆蓋率,將最終使用的方法記錄下來。   覆蓋率監測的原理 覆蓋率監測的原理跟iOS上的原理差不多,大致的思路參考下吧, iOS自動化探索(十)程式碼覆蓋率統計 Android使用的是JaCoCO覆蓋率統計

Python3-Selenium自動化測試框架之selenium使用和元素定位

Selenium自動化測試框架(二)之selenium使用和元素定位 (一)selenium的簡單使用 1、導包 from selenium import webdriver 2、初始化瀏覽器 # 驅動在python環境中 browser = webdriver.Chrome() # 驅動不放在python環

Java 第一程式HelloWorld

      我們都知道java是跨平臺的,所說的跨平臺就是指可以在不同得平臺環境上執行,win7,win8,win10,xp,mark等,在不同得平臺上執行就要安裝不同的執行工具JRE,JDK是開發工具它裡面包含了JRE。 1.安裝好開發工具JDK 2.在

Django 學習筆記第一網頁

Django 第一個 Hello World 專案 經過上一篇的安裝,我們已經擁有了Django 框架 1.選擇專案預設存放的地址 預設地址是C:\Users\Lee,也就是進入cmd控制檯的地址,建立專案後命令 django-admin startproject project_test 預設地址就新建了一

elasticsearch5.2.2 外掛開發 第一有實際功能的外掛

實現的功能也非常簡單。擴充套件ES的API功能。比如你ES裝在本地(預設埠),訪問http://127.0.0.1:9200/_mytest1  則返回我們的資訊,訪問http://127.0.0.1:9200/_mytest1 /myaction則返回帶myactio

Jenkins自動化搭建測試環境

打開 自己 到你 自動化部署 找到 工具 技術分享 directory 查看 Fork項目 找到項目 單擊Fork 這時,會發送一個郵件到你的git郵箱中,點擊鏈接即可完成fork 這樣,這個工程就已經fork到自己的git上了 然後就可以下載這個工程到本機了 這

HTTP介面自動化經驗總結Okhttp3 介面測試框架搭建

搭建這套環境前,需要Eclipse安裝testNG,Maven 1.Eclipse安裝testNG https://mp.csdn.net/postedit/81868683 2.Eclipse安裝Maven http://www.cnblogs.com/pengyan-9826/p

Android測試原理

// 在測試環境下啟動Activity mActivity = getActivity(); // 得到這個Activity中的主要UI控制代碼,一個Spinner mSpinner = (Spinner)mActivity.findViewById(com.android.exa