阿斯蒂芬 阿斯蒂芬
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