智慧 Monkey 在指定執行的頁面範圍內執行方案
在做移動端穩定性測試的時候,Monkey 測試是首選的方案,但是在執行測試過程中也會存在問題。比如說,Monkey 測試是隨機執行的,如果在執行過程中跳出了要執行的 App,開啟的系統頁面或是其他應用的頁面。有的應用有地圖頁面,debug 包的話也會有 Debug 工具等,直接影響 Monkey 的執行結果。為了達到測試指定 App 的效果,希望 Monkey 在 App 內的頁面上執行,是否有相應的方案呢?
一,修改測試 App
透過在網上調研相關的技術,發現可以透過 adb shell am start ActiviyName 可以開啟指定的頁面。但是,出於安全考慮,正常開發的 App 是不能透過這個命令開啟頁面的,會報如下錯誤:
所以需要對被測試的 App 做修改,請參考:Andoird 開發除錯時不修改 Manifest 直接啟動任意 Activity 的方法(https://www.jianshu.com/p/54fd9627860agitlab 上下載一個可以執行 Android)。經過測試,從 App Demo,透過 Android Studio 開啟專案,在 app 模組的 build.gradle 檔案下的 android{}最後新增如下程式碼:
同時在最後新增:
// 啟動android:exported="true"的Activity
task startExportedTestActivity(type: Exec, dependsOn: 'installDebug') {
commandLine 'cmd', '/c', 'adb', 'shell', 'am', 'start', '-n', 'cn.easydone.componentizationapp/com.linked.erfli.moduleb.news.NewsListActivity'
}
其中的 Activity 可以修改成你自己 App 的 Activity。重新打 debug 安裝到手機上,就可以透過 adb shell am start 開啟相應的頁面。
二,開發 Monkey 測試用例
在做 Monkey 測試的時候,肯定不能直接使用命令列的方式來執行。需要藉助於自動化測試框架,如 Appium 來進行操作。這樣做的好處是:1,可以為 Monkey 測試做一些準備操作,如構造測試資料,登入被測 App 等。2,監控 Monkey 的執行,如對執行過程進行截圖,檢測當前執行的頁面等。
而要將 Monkey 在指定的頁面下執行,可以按如下思路來處理:
1,設定頁面白名單
透過配置檔案或是常量來指定要覆蓋的頁面白名單,如下所示:
//檔名:Constant.java
//頁面 Activity 白名單
public static String[] actlist={
"cn.easydone.componentizationapp/cn.easydone.componentizationapp.MainActivity",
"cn.easydone.componentizationapp/cn.easydone.modulea.LibraryActivity",
"cn.easydone.componentizationapp/com.linked.erfli.moduleb.news.NewsListActivity"
};
2,檢測當前頁面是否在白名單中
檢測當前頁面是否在白名單中,如果當前頁面在白名單中,則繼續執行 Monkey 測試,否則隨機開啟白名單中的一個頁面。實現程式碼如下:
/**
* 如果當前頁面不是指定的頁面,啟動app中的頁面
* @param actname
*/
public void startActiviyInApp(String actname){
//System.out.println("當前頁面是:"+actname);
String[] actlist= Constant.actlist;
List<String> activitylist= Arrays.asList(actlist);
//當前頁面不是白名單中的頁面
if(!activitylist.contains(actname))
{
int actindex=(int)(Math.random()*actlist.length);
//System.out.println("獲取第:"+actindex+"個頁面!");
String cmd = "adb -s " + Udid + " shell am start " + actlist[actindex];
LocalCommandLine.execute(cmd, 20000, true);
}
else
{
System.out.println("*****當前頁面在指定頁面範圍中*******");
}
}
3,非同步多執行緒啟動 Monkey
在執行智慧 Monkey 測試的時候,可以透過 java 編寫多執行緒來進行執行。一個執行緒執行你設定的 Monkey 測試,如:
adb shell monkey -p com.jddl.rbr --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 100000
,讓 Monkey 按指定的時間去執行。另外啟動一個執行緒,去檢測當前的 activity,對應的 adb 命令是:adb shell dumpsys window | grep mCurrentFocus,處理一下當前獲取的頁面內容。
根據你的測試需要,如每間隔 3 分鐘檢測一下,呼叫上面編寫的函式,檢測當前頁面是否在白名單中,如果不在記隨機啟動白名單的頁面,繼續執行 Monkey 測試。從而實現控制 Monkey 在指定的頁面範圍中執行。
穩定性測試在移動端專項中佔居重要位置,所以在不少移動測試平臺中會整合智慧 Monkey 測試。藉助於一定的移動端測試框架,不管是開源的 Appium 還是公司對移動框架做的二次開發,實現對 Monkey 測試的封裝,非同步多執行緒去執行 Monkey 測試。結合公司產品的特點,做前置的資料準備,登入,或是其他操作是比較常規的手段。本文介紹了智慧 Monkey 測試的一個使用場景,希望能給你帶來幫助。
相關文章
- 在指定範圍內生成隨機數隨機
- Monkey 執行的時候,音樂播放..
- Java併發基礎06. 執行緒範圍內共享資料Java執行緒
- drools執行指定的規則
- 執行時的頁面構建過程
- 保證執行緒在主執行緒執行執行緒
- 手動指定埠執行
- Java面試題:執行緒池內“鬧情緒”的執行緒,怎麼辦?Java面試題執行緒
- pyav 指定執行緒數目執行緒
- 頁面正在載入執行loding等待效果
- 如何執行指定的單元測試
- 誰遇到過執行 monkey 的時候報 filenotfound 的報錯
- 網站排名優化:所有SEO策略都應該在規範內執行網站優化
- div拖動範圍限定在指定元素內
- 微軟官方統計Win10已在全球範圍內8.25億臺裝置上執行微軟Win10
- 自適應查詢執行:在執行時提升Spark SQL執行效能SparkSQL
- 圍觀,iPad Pro上執行的macOS CatalinaiPadMac
- SQL執行內幕:從執行原理看調優的本質SQL
- Docker命令-docker exec-在執行的容器中執行命令Docker
- 程式設計規範-父子執行緒必須放在不同的執行緒池中程式設計執行緒
- 【Java面試】如何中斷一個正在執行的執行緒?Java面試執行緒
- wine-在mac上執行exe執行檔案Mac
- 敲開阿里大門的執行緒、多執行緒和執行緒池面試專題阿里執行緒面試
- Springboot啟動時執行指定程式碼Spring Boot
- 在Docker容器內執行 vi 編輯器 | BaeldungDocker
- 在windows的IDEA執行PrestoWindowsIdeaREST
- Xamarin.FormsShell基礎教程(4)Shell專案內容列表頁面執行效果ORM
- 執行建構函式中指定的任務函式
- MySQL 執行原理【資料頁】MySql
- performSelector:withObject:afterDelay: 在子執行緒中呼叫不執行performSelectorObject執行緒
- 如何使用 Distrobox 在終端內執行多個 Linux 發行版Linux
- iOS多執行緒全套:執行緒生命週期,多執行緒的四種解決方案,執行緒安全問題,GCD的使用,NSOperation的使用iOS執行緒GC
- 使用 Carbon 獲取指定時間範圍內的日期陣列陣列
- 多執行緒面試題之多執行緒有幾種實現方案,分別是什麼執行緒面試題
- 在指令碼中呼叫git命令:指定git命令執行上下文指令碼Git
- bash shell多執行緒方案執行緒
- 伺服器安全執行方案伺服器
- java在windows下執行JavaWindows