乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      【原創(chuàng)】Android 自動化測試Monkey、Monkeyrunner

       WindySky 2016-03-14

      軟件測試是軟件產(chǎn)品開發(fā)過程中的重要環(huán)節(jié),對于保重軟件質(zhì)量具有重要的意思。手動測試和自動化測試是軟件測試的兩個基本手段。本文主要介Android – 自動化測試
      Android平臺上提供了一些自動化測試工具:Monkey、Monkeyrunner。

      Monkey、Monkeyrunner 概述

      一、Monkey 概述
      monkey可以直接在XP/WIN7上運行,只要XP/WIN7上能用adb,即可使用。

      Monkey測試是Android平臺自動化測試的一種手段,通過Monkey程序模擬用戶觸摸屏幕、滑動Trackball、按鍵等操作來對設(shè)備上的程序進行壓力測試,檢測程序多久的時間會發(fā)生異常,Monkey測試是一種為了測試軟件的穩(wěn)定性、健壯性的快速有效的方法。

      Monkey程序由Android系統(tǒng)自帶,使用Java語言寫成,在Android文件系統(tǒng)中的存放路徑是:/system/framework/monkey.jar。
      Monkey.jar程序是由一個名為“monkey”的Shell腳本來啟動執(zhí)行,shell腳本在Android文件系統(tǒng)中的存放路徑是:/system/bin/monkey;這樣就可以通過在shell窗口中執(zhí)行: adb shell monkey {+命令參數(shù)}來進行Monkey測試了。

      二、Monkeyrunner 概述

      1、monkeyrunner工具提供了一個API,使用此API寫出的程序可以在Android代碼之外控制Android設(shè)備和模擬器。通過monkeyrunner,您可以寫出一個Python程序去安裝一個Android應(yīng)用程序或測試包,運行它,向它發(fā)送模擬擊鍵,截取它的用戶界面圖片,并將截圖存儲于工作站上。

      monkeyrunner工具的主要設(shè)計目的是用于測試功能/框架水平上的應(yīng)用程序和設(shè)備,或用于運行單元測試套件,但您當然也可以將其用于其它目的

      Monkeyrunner文件在SDK目錄的tools子目錄下,運行時,如果沒有指定環(huán)境變量,需到tools目錄下方可執(zhí)行

      Monkeyrunner支持自己編寫插件,控制事件,隨時截圖,簡而言之,任何你在模擬器/設(shè)備中能干的事情,MonkeyRunner都能干,而且還可以記錄和回放!!! 

      2、monkeyrunner工具為Android測試提供了以下特性:
      多設(shè)備控制:monkeyrunner API可以跨多個設(shè)備或模擬器實施測試套件。您可以在同一時間接上所有的設(shè)備或一次啟動全部模擬器(或統(tǒng)統(tǒng)一起),依據(jù)程序依次連接到每一個,然后運行一個或多個測試。您也可以用程序啟動一個配置好的模擬器,運行一個或多個測試,然后關(guān)閉模擬器。
       
      功能測試: monkeyrunner可以為一個應(yīng)用自動貫徹一次功能測試。您提供按鍵或觸摸事件的輸入數(shù)值,然后觀察輸出結(jié)果的截屏。
       
       回歸測試:monkeyrunner可以運行某個應(yīng)用,并將其結(jié)果截屏與既定已知正確的結(jié)果截屏相比較,以此測試應(yīng)用的穩(wěn)定性。
       
       可擴展的自動化:由于monkeyrunner是一個API工具包,您可以基于Python模塊和程序開發(fā)一整套系統(tǒng),以此來控制Android設(shè)備。除了使用monkeyrunner API之外,您還可以使用標準的Python os和subpress模塊來調(diào)用如adb這樣的Android工具。

      三、Monkey和Monkeyrunner工具區(qū)別

      Monkey:Monkey工具直接運行在設(shè)備或模擬器的adb shell中,生成用戶或系統(tǒng)的偽隨機事件流。

      monkeyrunner:monkeyrunner工具則是在工作站上通過API定義的特定命令和事件控制設(shè)備或模擬器。

      Monkey 的基本使用方法

      1、可以通過開發(fā)機器上的命令行或腳本來啟動Monkey。
      由于Monkey運行在模擬器/設(shè)備環(huán)境中,所以必須用其環(huán)境中的shell來進行啟動??梢酝ㄟ^在每條命令前加上adb shell來達到目的,也可以進入Shell后直接輸入Monkey命令?;菊Z法如下:

      > adb shell monkey [options] 

      >adb shell
      #monkey

      如果不指定options,Monkey將以無反饋模式啟動,并把事件任意發(fā)送到安裝在目標環(huán)境中的全部包。下面是一個更為典型的命令行示例,它啟動指定的應(yīng)用程序,把調(diào)試等級加了1,并向其發(fā)送500個偽隨機事件:

      > adb shell monkey -p your.package.name –v 500


      2、Monkey 命令可簡單分為如下四類:
       
      基本配置選項:  如設(shè)置嘗試的事件數(shù)量,反饋信息的級別。
       
      運行約束選項: 如設(shè)置只對單獨的一個包進行測試。
       
      事件類型和頻率: 如設(shè)置觸摸屏事件的發(fā)生頻率。
       
      調(diào)試選項,如設(shè)置忽略應(yīng)用程序異常,繼續(xù)向系統(tǒng)發(fā)送事件,直到計數(shù)完成

      3、Monkey 命令解析:

      名稱:  moncgcmd.jpg
查看次數(shù): 1
文件大小:  34.4 kb

      Monkey runner 的基本使用方法:

      1、Monkeyrunner 環(huán)境搭建

      名稱:  Snap8.jpg
查看次數(shù): 1
文件大小:  18.5 KB

      2、下載安裝Python
      下載網(wǎng)址:https://www./

      3、環(huán)境變量配置   ;C:\Python27(安裝目錄復(fù)制到Path的后面,注前面的“;”不要忘記哦)環(huán)境變量路徑以Win7為例:計算機 -> 屬性 -> 高級系統(tǒng)設(shè)置 -> 環(huán)境變量 -> 系統(tǒng)變量 -> 找到Path

      4、monkeyrunnerAPI于com.android.monkeyrunner包中包含三個模塊:

      MonkeyRunner    :一個為monkeyrunner程序提供工具方法的類。這個類提供了用于連接monkeyrunner至設(shè)備或模擬器的方法。它還提供了用于創(chuàng)建一個monkeyrunner程序的用戶界面以及顯示內(nèi)置幫助的方法。   
      waitForConnection (float timeout, string deviceId) 
      sleep (float seconds) 
      help (string format) 
       
      MonkeyImage    :表示一個截圖對象。這個類提供了截圖、將位圖轉(zhuǎn)換成各種格式、比較兩個MonkeyImage對象以及寫圖像到文件的方法。     
      MonkeyImage創(chuàng)建對象的方法如下:
      newimage =MonkeyDevice.takeSnapshot()
      writeToFile (string path, string format)

      MonkeyDevice    :表示一個設(shè)備或模擬器。這個類提供了安裝和卸載程序包、啟動一個活動以及發(fā)送鍵盤或觸摸事件到應(yīng)用程序的方法。您也可以用這個類來運行測試包。     

      MonkeyDevice的常用方法:
      a.Touch (x坐標, y坐標,動作)
      可以通過開啟Pointer location在手機上直接查看坐標點.

      b.Press(‘按鍵值’, 動作)
      動作包括:DOWN, UP, DOWN_AND_UP。大部分時間用DOWN_AND_UP來模擬按鍵、松手的過程。比如要進行一個返回鍵操作:
      device.press('KEYCODE_BACK',MonkeyDevice.DOWN_AND_UP)

      c.Drag((x, y),(x, y),持續(xù)時間,軌跡點)
      按鍵值為Andriod鍵值表中有的值drag((x, y),(x, y),持續(xù)時間,軌跡點)
      第一組是起始坐標,第二組終點坐標。這里的坐標值要通過hierarchyviewer工具來獲取,軌跡點類似采樣

      d.啟動Activity:startActivity(‘string’)
      在python程序中,您將以Python模塊的形式使用這些類。monkeyrunner工具不會自動導入這些模塊。您必須使用類似如下的from語句:
       
      from  com.android.monkeyrunner  import  Monkey Runner,     
      Monkey Device, Monkey Image

      您可以在一個from語句中導入超過一個模塊,其間以逗號分隔。

      5、運行monkeyrunner
       
       monkeyrunner命令的語法為:
       
      monkeyrunner -plugin  <程序文件名> <程序選項>

      1、啟動一個Android系統(tǒng)的模擬器,即為命令中device

      2、 將cmd命令定位到android SDK的路徑下的tools目錄
      3、輸入命令"monkeyrunner",回車,進入Shell命令交互方式
          導入monkeyrunner所要使用的模塊:        A.直接在shell命令中輸入(然后回車):
          from com.android.monkeyrunner import MonkeyRunner, 
          MonkeyDevice,MonkeyImage
          B.輸入device = MonkeyRunner.waitForConnection(),然后回車

      6、一個簡單的monkeyrunner程序?qū)嵗?br> 以下為一個簡單的monkeyrunner程序,它將會連接到一個設(shè)備,創(chuàng)建一個MonkeyDevice對象。使用MonkeyDevice對象,程序?qū)惭b一個Android應(yīng)用包,運行其中一個活動,并向其發(fā)送按鍵事件。程序接下來會將結(jié)果截圖,創(chuàng)建一個MonkeyImage對象,并使用這個對象截圖將保存至.png文件。
        
      # 導入此程序所需的monkeyrunner模塊 
      from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice MonkeyImage
      # 連接當前設(shè)備,返回一個MonkeyDevice對象 
      device = MonkeyRunner.waitForConnection() 
      # 安裝Android包,注意,此方法返回的返回值為boolean,由此您可以判斷安裝過程是否正常 
      device.installPackage('myproject/bin/MyApplication.apk') 
      # 運行此應(yīng)用中的一個活動device.startActivity(component='com.example.android.myapplication.MainActivity') 
      # 按下菜單按鍵 
      device.press('KEYCODE_MENU','DOWN_AND_UP') 
      # 截取屏幕截圖 
      result = device.takeSnapshot()
      # 將截圖保存至文件 
      result.writeToFile('myproject/shot1.png','png')
      #時延(秒):
      MonkeyRunner.sleep(3) 
      #滑動屏幕(Python腳本):
      for i in range(1,70):device.drag(start,end,0.1,10)  
      #觸擊屏幕: 
      device.touch(94,34,'DOWN_AND_UP')  
      # 運行此應(yīng)用中的一個活動device.startActivity(component='com.example.android.myapplication.MainActivity') 
      # 按下菜單按鍵 
      device.press('KEYCODE_MENU','DOWN_AND_UP') 
      # 截取屏幕截圖 
      result = device.takeSnapshot()
      # 將截圖保存至文件 
      result.writeToFile('myproject/shot1.png','png')

      7、Monkeyrunner自動化測試的記錄和回放
      MonkeyRunner工具中提供了記錄與回放的功能,可以通過monkey_recorder.py和monkey_playback.py兩個python文件來實現(xiàn)。此兩個文件存放在:android源代碼 ->  monkeyrunner源代碼 -> scripts文件夾。

      1)記錄
       a、啟動模擬器或通過USB連接手機
       b、打開命令行提示符,并且定位到Tools文件下輸入:
              monkeyrunner monkey_recorder.py 按下回車鍵
      如下圖:
      名稱:  1.jpg
查看次數(shù): 1
文件大小:  26.0 KB

      錄制界面菜單介紹:

      名稱:  2.jpg
查看次數(shù): 2
文件大小:  29.1 KB

      注意:導出的腳本要與monkey_recorder.py和monkey_playback.py 在同一目錄下,即Tools文件夾下。

      名稱:  3.jpg
查看次數(shù): 2
文件大小:  13.8 KB


      2)回放
       
      腳本回放需要使用另外一個腳本 monkeyplayback.py

      執(zhí)行步驟:
       a、啟動模擬器或通過USB連接手機
       b、打開命令行提示符,并且定位到Tools文件下輸入:
              monkeyrunner monkeyplayback.py  “sound”
              按下回車鍵


      附錄:腳本

      1、monkeyrecoder.py

      #Usage: monkeyrunner monkeyrecorder.py  
      #monkeyrecorder.py 
      from com.android.monkeyrunner import MonkeyRunner
      from com.android.monkeyrunner.recorder import MonkeyRecorder
      device = MonkeyRunner.waitForConnection()
      MonkeyRecorder.start(device)

      2、monkeyplayback.py

      import sys
      from com.android.monkeyrunner import MonkeyRunner
      CMD_MAP = {
          "TOUCH":lambda dev,arg:dev.touch(**arg),
          "DRAG":lambda dev,arg:dev.drag(**arg),
          "PRESS":lambda dev,arg:dev.press(**arg),
          "TYPE":lambda dev,arg:dev.type(**arg),
          "WAIT":lambda dev,arg:MonkeyRunner.sleep(**arg)
          }
      # Process a single file for the specified device.
      def process_file(fp,device):
          for line in fp:
              (cmd,rest) = line.split("|")
              try:
                  rest = eval(rest)
              except:
                  print"unable to parse options"
                  continue
              if cmd not in CMD_MAP:
                  print"unknown command:" + cmd
                  continue
              CMD_MAP[cmd](device,rest)
      def main():
          file = sys.argv[1]
          fp = open(file,"r")
          device = MonkeyRunner.waitForConnection()
          process_file(fp,device)
          fp.close();
      if __name__=="__main__":
          main()                                 

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多