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