1. 程式人生 > >阿斯蒂芬 阿斯蒂芬

阿斯蒂芬 阿斯蒂芬



1.androidstudio學習
android studio快捷鍵
ctrl+shift+N檔案查詢
ctrl+shift+F查詢
ctrl+alt+L格式化 
ctrl+alt+t常用結構語句
ctrl+alt+m封裝方法
ctrl+f
ctrl+r替換
alt+shift+程式碼上下移動
ctrl+y刪除一行
alt+insert覆蓋父類方法 
double shift查詢


as中android專案目錄
project=eclipse中的工作空間
module=eclipse中的單個專案(包括可執行專案或者library專案)


androidstudio 更新
settings-》system settings-》updates
androidstudio匯入專案
androidstudio匯入androidstudio專案
androidstudio匯入eclipse單/多專案
匯入多專案eclipse工程:1.直接匯入
                       2.分佈匯入,做成module,在匯入
  
androidstudio除錯
F8一步一步執行
F9跳到下一個斷點




androidstudio 協作開發 
svn 忽略操作
settings-》versioncontrol-》ignorefiles
git


gradle配置


執行時使用正式keystore




多渠道打包
manifest宣告metedata
<meta-data android:value="${VALUE}" android:name="CHANNEL"/>
build.gradle中宣告
productFlavors{
   xiaomi{}
   qihu{}
   wandoujia{}
   baidu{}
   yingyongbao{}
}


productFlavors.all{
   flavor->flavor.manifestPlaceholders=[VALUE:name]
}




gradle中app選項
install


androidstudio外掛


settings->plugin
GsonFormat   -》根據json字串生成類(java類裡郵件  generate-gsonformat 輸入json資料直接生成類)
butterknife外掛-》xml郵件 generate android code
android selector generator-》 由pressed 和normal圖片生成selector




as程式碼檢測效能分析
程式碼檢測-》android lint 
工程右鍵-》analyze-》inspectcode
效能分析-》monitor




傳程式碼jcenter
jcenter相對maven對各個國家的網路訪問友好很多
arr相對jar,能打包res和manifest,arr相當於library
jcenter.bintray.com


註冊bintray賬號(bintray.com),
建立包名,配置認證資訊,












2.androidUI自動化測試簡介與例項
monkeyrunner:
python語言編寫
adb連結pc執行
主要用於ui測試
邏輯判斷較差
instrumentation:
     java編寫
adb命令或者手機中直接啟動
單個activity測試,需要與應用有相同簽名
有時候會需要root
robotium基於instrumentation,程式碼量相對較少


UIAutomator
主要用於ui自動化測試,模擬人對手機的操作
編寫快速,執行簡單,無activity限制,無簽名限制,幾乎可以模擬所有的人為操作
//lib中放入andoroid.jar 和 uiautomator.jar
public class Test extends UiAutomatorTestCase { 
public void testDemo() throws UiObjectNotFoundException{
   //點選home
UiDevice.getInstance().pressHome();
//獲取瀏覽器按鈕
UiObject browser=new UiObject(new UiSelector().text("瀏覽器"));
//點選並等待開啟新的窗體
browser.clickAndWaitForNewWindow();
//獲取輸入框
UiObject edit=new UiObject(new UiSelector().className("android.widget.EditText"));
//點選輸入框
edit.click();
//刪除輸入框內容
UiDevice.getInstance().pressDelete();
//輸入輸入框新內容
edit.setText("www.baidu.com");
//確認
UiDevice.getInstance().pressEnter(); 




android create  uitest-project -n "name" -t 1 -p "工作空間"
生成build.xml
修改build.xml   help改為build
執行build.xml
生成一個jar包 
adb    .jar  push /data/local/tmp
adb shell uiautomator runtest  .jar -c “包名+類名”






######################################################################################
2.2Android UiAutomator 環境配置與編譯執行
https://github.com/fan2597/UiAutomatorHelper  快速編譯於測試
1 、開啟Eclipse
2 、新建一個java工程,包
3 、增加build path
4 、 新建測試類,繼成UiAutomatorTestCase
5 、 編寫用例,方法名必須test開頭
6 、 編譯與執行 
建立build檔案:android create uitest-project -n <jar name> -t 1 -p <workspace path>
修改build檔案:進入工作空間,開啟build.xml檔案將第二行的help修改為build
開始編譯:ant –buildfile <build.xml 檔案路徑>
push檔案:adb push <path_to_output_jar> /data/local/tmp/ 
執行測試:adb shell uiautomator runtest <jar name>-c <包名>.<類名>[#test name]
###################################################################################
2.3 UIAutomatorAPI介紹
2.3.1 UIDevice
      2.3.1.1介紹
 單例模式,getInstance,getUiDevice(可能獲取為空),
 功能:獲取裝置資訊
       裝置級別的操作
監聽器功能:處理指令碼被中斷

 2.3.1.2按鍵與keycode使用
        手機常見按鍵
HOME
MENU
BACK
VOLUME_UP
VOLUME_DOWN
RecentApps
POWER
Dpad
api方法  press***()
        pressKeyCode()
 
META Key: alt shift caps_lock
            列            啟用狀態                metastate
            base           meta_key未啟用          0
            caps           shift或者caps_lock啟用  1 
            fn             alt啟用                 2
            caps_fn      shift或者caps_lock和alt 3
例:使用keycode輸入字元
UIDevice.getInstance().pressKeyCode(KeyEvent.KeyCode_A);//輸入小寫a
       UIDevice.getInstance().pressKeyCode(KeyEvent.KeyCode_A,1);//輸入大寫A
 2.3.1.3獲取座標與座標點選
        左上角是(0,0)
dp:裝置獨立畫素,320畫素放到640畫素要拉昇一倍()
boolean  click(x,y);
int getDisplayHeight();
int getDisplayWidth();
Point getDisplaySizeDp();
sdk/tools/uiautomator.bat   獲取螢幕快照
例:
click(x,y);點選某一點
rect,矩形物件
UIObject clock = new UiObject(new UiSelector().resourceId("***"));//根據id獲取,id有快照可得
Rect rect = clock.getBounds();//該物件的矩形區域
int centerX = rect.centerX();
int centerY = rect.centerY();//獲取該區域終點,然後再click(centerX,centerY); 
 
 2.3.1.4拖拽與滑動
        步長:從一點到另一點滑動的時間
boolean drag(startX,startY,endX,endY,steps);//拖動物件從一個座標到另一個座標
boolean swipe(Point[] segments,int segmentSteps);//在點陣中滑動
boolean swipe(startX,startY,endX,endY,steps)//通過座標滑動螢幕
 
 
 2.3.1.5旋轉螢幕
        0 
90左轉
180 
270 右轉
void setOrientationLeft();   通過禁用感測器,模擬裝置左轉
void setOrientationRight();   通過禁用感測器,模擬裝置右轉
void setOrientationNatural();通過禁用感測器,模擬裝置轉到預設狀態
void unfreeezeRotation();     重啟感測器和物理旋轉
void freezeRotation();        凍結
boolean isNaturalOrientation(); 是否是預設方向
int getDisplayOrientation();   返貨旋轉角度 0 1 2 3 對應 0 90 180 270
 
 2.3.1.6滅屏與喚醒螢幕
        都是按電源鍵
void wakeUp();
void sleep();
boolean isScreenOn();檢測螢幕是否亮屏
 
 2.3.1.7截圖與等待空閒
        圖片縮放比例:
圖片質量:
File類:
圖片格式:PNG格式
空閒狀態:視窗沒有動作,介面處於不動的
視窗更新事件:開啟視窗為更新,更新完成就是空閒
 
boolean takeScreenShot(File);
boolean takeScreenShot(File,scale,quality);
 
等待空閒相關的api
void waitForIdle(timeout);//如果指定事件內還沒有完成更新,則報錯
void waitForIdle();//預設十秒
boolean waitForWindowUpdate(packagename,timeout)
 
 2.3.1.8獲取包名,開啟通知欄,快速設定,獲取佈局檔案
        獲取包名
                void getCurrentPackageName();
                 
開啟通知欄
                void openNotification();
快速設定
                void openQuickSettings();
獲取佈局檔案 /data/local/tmp資料夾下
           void dumpWindowHierachy(filename); 
 2.3.1.9例項演示(開啟瀏覽器輸入www.baidu.com)
             亮屏-解鎖-單機瀏覽器-單機輸入框-輸入www.baidu.com-按回車  
 
        public void testBrowser() throws RemoteException{
//滅屏-》亮屏->解鎖->單擊瀏覽器->單擊網址輸入框->輸入www.baidu.com->按回車鍵->旋轉螢幕->截圖
UiDevice.getInstance().sleep();
//亮屏
if(!UiDevice.getInstance().isScreenOn()){
UiDevice.getInstance().wakeUp();
}
//解鎖
UiDevice.getInstance().swipe(536, 1496, 1080, 1496, 20);
//按home鍵
UiDevice.getInstance().pressHome();
//點選瀏覽器
UiDevice.getInstance().click(950, 1800); 
//點選輸入框
UiDevice.getInstance().click(589, 151); 
//刪除
UiDevice.getInstance().pressDelete();
//輸入www.baidu.com
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_W); 
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_W); 
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_W); 
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_PERIOD); 
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_B); 
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_A); 
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_I); 
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_D); 
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_U); 
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_PERIOD); 
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_C); 
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_O); 
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_M); 
//enter確認
UiDevice.getInstance().pressEnter();
//螢幕左轉
UiDevice.getInstance().setOrientationLeft();
//截圖
UiDevice.getInstance().takeScreenshot(new File("/sdcard/browser.png")); 
}
 
 
 
 
 


2.3.2 UIObject
      2.3.2.1UiObject類介紹
        代表元件物件,物件有許多模擬操作手機的屬性和方法 
 2.3.2.2點選與長按
        rect代表矩形區域[left,top] [right,bottom]
預設的click是點選中點
boolean click();
boolean clickAndWaitForNewWindow(timeout);
boolean clickAndWaitForNewWindow();//預設為5.5秒,超時則異常
boolean clickBottomRight();
boolean clickTopLeft();
boolean longClick();//如果想保持長按效果,可以使用UIDevice的swipe來模擬
boolean longClickBottomRight();
boolean longClickTopLeft();
 
new UiSelector.resouceId(id);
 
 2.3.2.3拖拽與滑動
        拖拽到某點或另一個元件上
滑動距離
boolean drageTo(dest,steps);//速度慢會組合成資料夾,速度慢則會將dest趕走
boolwan dragTo(destX,destY,steps);
boolean swipDown(steps);
        boolean swipUp(steps);
boolean swipLeft(steps);//recentAps 清除
boolean swipRight(steps);
 
 2.3.2.4輸入文字與清除文字
        boolean setText(text);//輸入文字 (如果已經有 文字則會先刪除)
void clearTextField();//清除文字(先長按再刪除:有時候會出錯)
             
自定義刪除動作
             //移動游標到行尾,使用backspace
             UiObject w = new UiObject(UiSelector.text("接受者")); UIDevice.getInstance().pressKeyCode(KeyEvent.KeyCode_Move_end)
while(!w.exsist())  //逐個刪除直到接收者出現       
        UIDevice.getInstance().pressKeyCode(KeyEvent.KeyCode_Del); 
 
 2.3.2.5獲取物件的屬性和屬性的判斷
         Rect getBounds();
 int getChildCount();
 String getClassName(); 類名
 String getContentDescription(); 描述
 String getPackageName();  包名
 String getText();  
 Rect getVisibleBounds();//獲取課件區域 
 
 2.3.2.6手勢操作
        兩指手勢  performTwoPointerGesture(start1,start2,end1,end2,steps);
多指手勢  performMultiPointer(touches);
兩指合攏  boolean  pinchIn(percent,steps);
兩指擴張  boolean  pinchOut(percent,steps);  
 2.3.2.7判斷物件是否存在
            boolean waitForExists(timeout);等待物件出現
boolean waitForGone(timeout);等待物件消失
boolean exsists();檢查物件是否存在 
2.3.4 UICollection
      2.3.4.1介紹
        元素條目集合,同一種類的合集
先按照一定的條件列舉中符合條件的子元素,然後再通過一定的條件查詢
             使用場景1.容器類元件一般作為父類,2.通過UIObject很難定位3.獲取某一類集合的數量
 2.3.4.2 集合中查詢
         UiObject getChildByDescription(pattern,text);
 UiObject  getChildByText(pattern,text);
 UiObject getChildByInstance(pattern,instance);
 這三個方法都是先從patter找到一批,再從第二個引數的條件獲取到特定的例項
 如果沒找到丟擲uiobjectnotfoundexception
 
      2.3.4.3 獲取符合條件的object數量  
              int getChildCount(pattern);
 


2.3.5 UIScrollable
      2.3.5.1介紹
        UiCollection自類,專門處理滾動事件,提供各種滾動方法
 2.3.5.2快速滾動
        步長:從一點到另一點滑動的時間
掃動次數:
boolean flingBackword();步長為5向後滾動
boolean flingForward();向前滾動
boolean flingToBegining(swipes);快速掃動到開頭
boolean flingToEnd(swipes);快速掃動到結尾
swipes不一定能滾動到最前或這最後,需要根據列表的長短來預估swipes
 
 2.3.5.3設定列表子元素
        UiObject getChildByDescription(pattern,text,allowScrollSearch);
UiObject getChildByDescription(pattern,text);
 
        UiObject getChildByText(pattern,text,allowScrollSearch);//是否會滾動,查詢
UiObject getChildByText(pattern,text);//預設滾動查詢
 
        UiObject getChildByIntance(pattern,instance);只找當前頁面,不滾動查詢 
 
 2.3.5.4獲取與設定最大滾動次數常量
        int getMaxSearchSwipes();//獲取最大掃動次數
UIScrollable setMaxSearchSwipes();//設定最大可掃動次數 
預設是30次,如果列表過長,30次就會找不到,所以需要手動設定一個最大滾動次數
 
 2.3.5.5滑動區域校準常量設定與獲取
             校準常量:滑動操作的偏移量
double getSwipeDeadZonePercentage();
UIScrollable setSwipeDeadZonePercentage();
 2.3.5.6向前與向後滾動
        boolean scrollBackward(int steps);
boolean scrollBackward();
boolean scrollFroward();
boolwan scrollForward(steps);
 
      2.3.5.7滾動到某個物件
        boolean scrollIntoView(selector);
boolean scrollIntoView(uiObject);
boolean scrollTextIntoView(text);
boolean scrollDescriptionINtoView(desc);
boolean scrollToBeginning(maxSwipes);
boolean scrollToBeginning(swipws,steps);
boolean scrollToEnd(maxSwipes);
boolean scrollToEnd(swipws,steps);
 
 2.3.5.8設定滾動方向
        setAsHorizentalList();//水平滾動
setAsVerticalList();//縱向滾動 
 
2.3.6 UIWatcher
     
 UIWatcher用於處理指令碼處理過程中遇到非預想的步驟
 測試過程中打了一個電話
 測試過程中有簡訊,鬧鐘等非預想步驟
      中斷監聽檢查條件:   boolean checkForCondition();
 監聽器需要在用例之前啟動,用例出現過程中出現異常才能呼叫的監聽器處理
 
 監聽器操作
 void registerWatcher(name,watcher);//當uiselector無法匹配到物件時,觸發
 void removeWatcher(name);
 void resetWatcherTriggers();
 void runWatchers();
 檢查監聽器
 boolean hasAnyWathcerTriggered();
 boolean hasWatcherTriggered(name);
 
 
 
2.3.7 UIConfigrator
     2.3.7.1介紹
       用於設定指令碼動作的預設延時
可調節兩個模擬動作之間的間隔
可調節輸入文字的預設時間間隔
可調節滾動的時間間隔
可調節等待系統空閒時間間隔

2.3.7.2api演示
動作 預設3秒
setActionAcknowledgeMentTimetout();
getActionAcknowledgmentTimeout();
鍵盤輸入 預設0秒
setKeyInjectionDelay();
getKeyInjectionDelay();
滾動預設200ms
setScrollAcknowledgetmentTimeout();
getScrollAcknowledgementTimetou();
空想預設10s
setWaitForIdleAcknowledgementTimeout();
getWaitFroIdleAcknowledgementTimetout();
查詢元件預設10s
setWaitFroSelectorTimeout();
getWaitForSelectorTimeout();
2.3.7.3例項
模擬雙擊與快速單擊
使用keycode輸入自定義字串
改變預設速度
 
 


#####################################################################################
3 UIAutomator報告


3.1報告的介紹與檢視
numtests執行的用例數量
stream資訊流錯誤流
id執行框架
test用例名字
class用例完整類名
current當前執行第幾
code狀態碼
3.2
斷言失敗報告
AssertionFailedError
code=-2 
執行全部通過
(恢復場景最好是先模擬幾次back,再home)
指令碼錯誤中途中斷


多用例同時執行
3.3 
setUp->testCase->tearDown
setUp開始
tearDown結束
Bundle
由多個鍵值對組成的集合
getAutomationSupport().sendStatus(int,bundle);
3.4 
通過-e傳入電話號碼撥打電話
-e key value
Bundle b = getParams();
b.get(key);
 






4 UIAutomator正則表示式
4.1正則表示式
   記錄文字規則的程式碼
   元字元:
   普通字元:
   匹配;
      
4.2正則表示式的語法
   .任意字元
    
   \s 空格 tab 換行 換頁 回車
   \S非空格字元[^\s]
   \d數字
   \D非數字字元[^\d]
   \w一個單詞字元
   \W一個非單詞字元
   ^一行的開始
   $一行的結尾
   \b一個單詞的邊界
   \B一個非單詞的邊界
   *任意次數
   +一次或多次
   ?零次或一次
   {n}重複n次
   {n,}重複n次或更多
   {n,m}n-m次
   漢字[\u4E00-\u9FA5]
   
4.3操作
選擇鬧鐘
新建鬧鐘然後刪除鬧鐘


相容多語言
聯絡人|people
同種型別對話按鈕
y = textMatches("是|確定|確認|Y");
n = textMatches("否|取消|取消|N");
if(y){


}else{


}
   
4 UIAutomator影象處理
1.BitMap,點陣圖,代表一張圖片
          獲取畫素點,獲取顏色,擷取某個區域,壓縮,縮放,修改
2.通過Bitmap獲取畫素與影象擷取
3.嵌入文字
4.影象對比


效果類截圖
失敗與一場截圖
利用影象判斷元件


5.UiAotumator輔助apk
1.在測試中彈出提示
  讓apk接收UiAutomator傳送的訊息
  uiautomator可以傳送am命令,apk接收命令進行相應操作
  am broadcast -a com.jkxy.action -e key value
  
  receiver中
  bundle = intent.getExtras();
  value = bundle.get(key);
2.輸入中文
  UiAutomatorUicode助手,將輸入的原始字元轉換成Unicode文字,
  jutf7輸入法,
  
  輔助的apk,安裝jutf-7輸入法,設為預設
  UiObject.setText(Utf7ImeHelper.e("各種語言"));
  
3.獲取應用資訊


 
 
 UIAutomator快速除錯
 1.ant除錯
   /tools/ant/uibuild.xml
   target 基本執行單元
   property 變數
   project 跟元素
   
   copy 複製檔案或者目錄
   delete 刪除檔案目錄
   mkdir 建立
   move 
   echo
   jar
   war 
   javac
   
   
   clean->build->install->test
   實現ant除錯的步驟
   1.修改名字為test的target
   2.建一個新的target為debug
   3.debug依賴為clean build install test
   4.定義一個testcase為完整類名#用例名
   
   
 2.python除錯
 3.java除錯




##############################################################
Monkey介紹
1.monkey是什麼
  google提供的一個用於穩定性和壓力測試的命令列工作
  /system/framework/Monkey.jar
  /system/bin/monkey
  
2.環境變數
由adb啟動,adb配置好即可
3.如何執行
pc
adb shell monkey [option] <count>
shell端
adb shell
monkey [option] <count> > /mnt/sdcard/monkey.txt
1是標準2是錯誤
monkey [option] <count>  1>mnt/sdcar/monkey.txt 2>mnt/sdcard/error.txt


Monkey的基本引數和事件引數
1.基本引數
   -v -v 輸出資訊
   
2.約束條件
  -p 執行執行的包名列表(只能測試有桌面圖示的應用,指定應用,可以使用多個-p)
  -c 意圖的種類(category)
  -s 隨機數種子,
  --throttle<毫秒> 
  --randomize-throttle隨機延遲


  
  
3.傳送事件的型別和頻率
  --pct-touch<percent>調整觸控事件的百分比
  --pct-motion<percent>滑動事件比例
  --pct-nav<percent>
  --pct-majornav<percent>
  --pct-syskeys<percent> 如home back start call ,end call
  --pct-appswitch<percent> 介面切換
  --pct-anyevent<percent>
  --pct-flip<percent>鍵盤的換出隱藏
  --pct-pinchroom<percent> 兩指操作
  
  
2.Monkey除錯引數
android常見錯誤
ANR:5廟內介面沒響應,receiver10秒內每完成
異常:
閃退:


monkey除錯引數控制測試停止還是繼續  
--dbg-no-events 只開應用不進行任何操作
--hprof儲存記憶體報告/data/misc
--ignore-crashes
--ignore-timeouts
--ignore-security-exceptions
ignore不設定遇到這些錯誤,monkey停止,忽略後,monkey會重啟
--wait-dbg啟動monkey後,先中斷其執行,等待偵錯程式附加上來


3.Monkey的黑白名單
黑名單:不測的應用
白名單:值測的應用
只能使用一個,不能同時設定黑名單和白名單。
--pkg-blacklist-file 
--pkg-whitelist-file
黑白名單檔案放在/data/local/tmp目錄下
格式是包名一行一行的




4.Monkey的測試策略
例子1:整機測試,不測撥號,忽略所有錯誤,測100萬次
adb shell monkey --ignore-crash --ignore-timeouts 
--pkg-blacklist-file /data/local/tmp/black.txt -v -v 10000000


例子2:測試計算器30萬次,隨機種子100,隨機延遲1秒忽略所有錯誤
adb shell monkey -p com.android.caculator2 -s 100 --throttle 1000 --ignore-crash --ignore-timeouts -v -v 300000


例子3:測試計算器,觸控30%,其他案件50%,錯誤停止,延時200
adb shell monkey -p com.android.caculator2 --throttle 200 -pch-touch 30 --pct-anyevent 50 -v -v 10000000




###################################
monkey指令碼編寫以及使用monkey檢查記憶體洩露
1.monkey指令碼編寫
1.1格式(簡單快捷不需要任何藉助工具)
#標頭檔案
type= raw events
count= 10
speed= 1.0
#以下為monkey命令
start data >>
DispatchPress(KEYCODE_HOME)
DispatchPress(KEYCODE_MENU) 
1.2api
    LaunchActivity(pkgName,className);//開啟 
包名跟類名如何獲取?
第一種方式,獲取正處於前臺的應用資訊:
adb shell dumpsys activity| find "mFocusedActivity"
第二種方式
adb shell dumsys package packagename

Tap(x,y,tapDuration);點選 
DispatchPress(keycode);
RotateScreen(degree,peresist);
DispatchFlip(true/false);//鍵盤開關
LongPress();//長按兩秒
PressAndHold(x,y,duration);模擬長按
DispatchString(輸入字串);
Drag(startx,starty,endx,endy,step);拖拽
pinchroom();縮放 
userwait(time);
DeviceWakeUp();喚醒螢幕
RunCmd(cmd);執行命令
ProfileWait延時
1.3例項:開啟瀏覽器輸入www.jikexueyuan.com測試10次
開啟瀏覽器
清空網址
輸入網址
確認
完成退出


adb shell monkey -f /data/local/tmp/moneky.txt -v -v --throttle 500  10
-f指向自己寫的monkey指令碼






Monkey的伺服器
adb shell monkey --port 1080
adb forward tcp:1080 tcp:1080
telnet localhost 1080 
Monkey伺服器命令原始碼
/development/cmds/monkey/src/com/adroid/commands/monkey/MonkeySourceNetWork.java 
flip  open/close 開啟關閉鍵盤
touch down /move/up[x][y]
key   down/up [keycode]
sleep [time]
type  [str]    鍵入
wake            喚醒
tap   [x][y]點選 
press [keycode]   按壓
deferreturn [event][time][cmd]


listvar
getvar
listviews
getrootview
queryview
例子:
開啟撥號盤,撥打122
1.開啟撥號盤:  press KEYCODE_CALL
2. tap  533 1665
3. tap 111 995
   tap 211 995 
   tap 211 995 
4.press 533 1659




 #############################################
 Monkey指令碼生成工具
 1.工具理論
 2.工具設計
 3.指令碼生成工具程式碼解讀
    https://github.com/fan2597/MonkeyCreateScript

 Monkey測試:穩定性壓力測試
 常規測試
 應用選取策略+隨機種子策略+事件策略+異常策略+延時策略+事件數量
 10萬:常規測試
 30萬:壓力測試
 50萬:穩定性測試
 100萬:長時間測試


 專項測試
  事件壓力專項: 
  -pct-rotation
  -pct-appswitch
  -pct-pinchroom
  -pct-motion
  -pct-syskeys
  -pct-nav
  -pct-anyevent
  效能專項:  
   記憶體,adb shell dumpsys meminfo<程序名>
   cpu,adb shell -n 1 top|find "程序名"
   gpu,adb shell dumpsys gfxinfo<程序名>
   流量 adb shell cat /proc/net/xt_qtaguid/stats/grep "uid#"
   電量 adb shell dumpsys battery
   


 指令碼策略 
 Monkey指令碼,自帶錯誤監聽,一旦出錯,可以自動化立馬停止
 使用情況:anr和crash異常,低概率很難復現的異常。
 隨機指令碼自動生成:
 MonkeyScript.jar
 生成monkeyscript.txt

相關推薦

1.androidstudio學習 android studio快捷鍵ctrl+shift+N檔案查詢ctrl+shift+F查詢ctrl+alt+L格式化 ctrl+alt+t常用結構語句ctrl+alt+m封裝方法ctrl+fctrl+r替換alt+shift+程式碼

勝多負少空間發是否

撒的發生的規劃防控技術的黑色的空間空間發揮考核的空間開發貨款水電費斯蒂芬斯蒂芬是防守打法的方式的奮鬥奮鬥的的方法發的發發發的沙發斯蒂芬是的發打發斯蒂芬似懂非懂是否勝多負少空間發斯蒂芬是否

裏雲觀察——裏雲總裁王堅專訪

郵箱 會有 硬件 教授 聚光燈 自己 風險 祝福 平臺 文 / 《程序員》總編輯 劉江 2011年底,我走訪了阿裏雲計算公司在杭州的總部,與掌門人王堅博士及其核心團隊成員有較長時間的對話,第一次近距離接觸阿裏雲。那時,阿裏雲在移動操作系統和雲計算平臺兩大正面戰場雙線作戰

10、蘋果圖標由來(喬布和比爾蓋的故事)+利納+Linux圖形界面

利納斯 喬布斯 比爾蓋斯歷史回顧 CP/M——》DOS比爾蓋茨計算機科學之父—圖靈(×××,被監禁,吃了塗了有毒的的蘋果自殺):喬布斯用咬了一口的蘋果的原因,因為他非常崇拜圖靈的,以此紀念圖靈。當時喬布斯用的是Unix(蘋果系統現在也是Unix,並且是BSD架構的,直接跑在硬件上的系統,所以性能要比安卓的要好

是打發

amp 感謝 函數 log 通用 config 需要 包括 設計 int main(void) { uint16_t a; uint8_t key,cnt; //XRT1初始化 AX_Init(115200

魂兮歸來,生於而終安於

姥姥 我姥姥下葬那天,好多親戚都來了。在田埂上,一個中年男人迎面站住,說:“這是閆紅嗎?都長這麽大了。”我有點啼笑皆非,同時理解他一定是見過少年或是幼年時的我。 我媽走上前招呼他,那名字有點耳熟,返程路上我突然想起來,當年他父母被打成右派,他一度被我姥姥收養,後來他們鬧翻了,他留下一句名言,

機器學習:貝葉分類器(二)——高樸素貝葉分類器代碼實現

mod ces 數據 大於等於 即使 平均值 方差 很多 mode 一 高斯樸素貝葉斯分類器代碼實現 網上搜索不調用sklearn實現的樸素貝葉斯分類器基本很少,即使有也是結合文本分類的多項式或伯努利類型,因此自己寫了一遍能直接封裝的高斯類型NB分類器,當然與真正的源碼相

裏雲優惠券 – 裏雲短信優惠券 滿1000減50 滿3000減150 滿5000減250 滿10000減500

html 所有 src 金融 post 優勢 系統通知 包括 info 阿裏雲優惠券 – 雲數據庫RDS MYSQL代金券 滿5000減250、滿10000減500 本文分享阿裏雲短信優惠券、阿裏雲短信代金券,用於購買阿裏雲短信資源包\套餐包: 1、阿裏雲新用戶可領取總金額

克,特拉首席小白鼠

夏乙 安妮 問耕 發自 凹非寺量子位 出品 | 公眾號 QbitAI 伊隆·馬斯克,比你想的還要激進。 作為特斯拉CEO,馬斯克經常一邊自己坐在Model S上,一邊召開電話會議。車輛的駕駛交給Autopilot,也就是那個時不時會出次意外的自動駕駛系統。 他這麼做不僅僅是

sklearn的快速使用之十(高樸素貝葉 )

""" ========================================= Gaussian Naive Bayes ( 高斯樸素貝葉斯 ) ========================================= """ print(__doc__) from s

特林數-特林反演

斯特林數 遞推式: \[ \begin{Bmatrix}n\\k \end{Bmatrix}=\begin{Bmatrix}n-1\\k-1\end{Bmatrix}+k\cdot \begin{Bmatrix}n-1\\k \end{Bmatrix}\\ \begin{bmatrix}n\\k \end

克:特拉將在中國超級工廠生產所有的電池模組

“90後”女大學生放棄北大保送復旦!她到底有多厲害?  東北網12月6日訊(記者 姜姍姍) 在東北農業大學有這樣一個自強不息的女大學生,她放棄北大直博被保送到復旦大學藥學院。她本科期間獲得國家獎學金、國家勵志獎學金、新東方自強獎學金、第一屆全國大學生生命聯賽國家二等獎……被評為黑龍江省“三好學生”。她就是生命

bzoj3601: 一個人的數論 莫比烏反演 高消元

題目 分析 數論神仙題,話不多說開始推導 ans=∑xn[gcd(x,n)==1]xdans=\sum_x^n[gcd(x,n)==1]x^dans=x∑n​[gcd(x,n)==1]xd =∑xn

分享《人工智能的未來》+霍金&布拉克

技術 支持 更多 roc sha 分享圖片 51cto ces efi 下載:https://pan.baidu.com/s/1EsAgLPX_PdXpfSdKEfI8zw 更多資料下載:https://pan.baidu.com/s/1lMO23nnrIag8Glvy2B

04 貝葉演算法 - 貝葉網路

01 貝葉斯演算法 - 樸素貝葉斯02 貝葉斯演算法 - 案例一 - 鳶尾花資料分類03 貝葉斯演算法 - 案例二 - 新聞資料分類 之前聚類演算法中講了__無向圖__的聚類演算法 - __譜聚類__。13 聚類演算法 - 譜聚類 本章介紹的貝葉斯演算法是__有向圖__的聚類演算法。 區別:__譜聚類_

貝葉啊貝葉,你這腦袋咋長的

       以前不懂貝葉斯,怎麼看都困,考試過了就再也想不起來了,如今工作才發現這些數學知識如此有用,而且那麼神祕又充滿智慧,但是理解了之後,發現原來這麼簡單,之後不由的感嘆,簡單中的智慧太他麼神奇了!       &n

[摩密碼錶]摩密碼對照表

它由兩種基本訊號和不同的間隔時間組成:短促的點訊號" .",讀" 的 "(Di);保持一定時間的長訊號"—",讀"答 "(Da)。[]間隔時間:滴,1t;答,3t;滴答間,1t;字母間,3t;字間,5t。 1、一點為一基本訊號單位,一劃的長度=3點的長度。 2、在

模糊(高濾波)的原理與演算法

通常,影象處理軟體會提供”模糊”(blur)濾鏡,使圖片產生模糊的效果。

理想的低通濾波器、巴特沃濾波器、高濾波器

低通濾波器         1.理想的低通濾波器        其中,D0表示通帶的半徑。D(u,v)的計算方式也就是兩點間的距離,很簡單就能得到。        使用低通濾波器所得到的結果如下所示。低通濾波器濾除了高頻成分,所以使得影象模糊。由於理想低

【Tom M. Mitchell課件】機器學習——高樸素貝葉

本課件主要內容包括: 以另一種方式看待樸素貝葉斯 樸素貝葉斯:文字檔案分類 學習對檔案的分類 詞袋模型 多項式分佈 多項詞彙袋 詞袋的MAP估計 樸素貝葉斯演算法 高斯分佈 高斯樸素貝葉斯