穩定性測試 | 可定制模塊級的內核穩定性工具
背景介紹
穩定的產品質量是留住用戶的第一道閥門,所以穩定性測試是常規測試中必不可少的。這周我們介紹百度應用比較廣泛的兩款穩定性工具: 系統級穩定性測試工具 SmartMonkey 和 可定制模塊級別的內核穩定性工具 。
無論原生monkey,還是智能優化后的UI遍歷的smartmonkey測試,都是一種系統集成級別的穩定性測試,下面介紹一種模塊級別的穩定性測試方法。
穩定性測試是移動端產品專線測試中的重要一項測試,是移動端產品保證穩定性的重要手段,也是移動端產品發版上線的一個重要質量標準。 Android 系統一般使用系統自帶的 monkey 工具來做穩定性測試。
原生Monkey工具缺點
原生 monkey 工具是一種隨機 UI 事件流,用來測試長時間隨機操作是否會導致應用出現異常。因為原生 monkey 操作的隨機性,所以在實際使用過程中,原生 monkey 會暴露出以下一些缺點:
1)原生 monkey 的測試對象是針對整個 Android 系統或者某個應用,但是無法針對應用里的某個模塊或者界面。這樣在產品迭代過程中存在的一個局限是:每個迭代時做的穩定性測試都重新做一遍,而無法針對該迭代新增的功能模塊做單獨的穩定性測試(或者叫做增量穩定性測試)。
以百度云這個應用為例,在某個迭代中集成了“百度錢包”這個新模塊,使用原生的 monkey 工具可能出現的現象是大部分操作可能都落在了百度云的其他模塊,而沒有操作到“百度錢包”這個模塊。
所以,我們期望的穩定性測試能夠從系統和應用級范圍轉移到模塊或者 activity 級別的范圍。
2)原生 monkey 工具的操作是隨機的,這樣可能導致一些用戶路徑操作不到或者操作時間過短;以百度直達號的支付業務為例,所有的支付操作必須是基于百度賬號登錄的前提下才能進行,這樣在支付時就必須經歷登錄百度賬號這個用戶路徑。那么問題來了,原生 monkey 因為是隨機的,無法輸入指定的用戶名 / 密碼來登錄百度賬戶。
實現業務化配置
1.支持特定模塊或者Activity
實現思路
一般進入一個模塊會有一個固定的入口,而退出這個模塊,也會退回到這個固定入口界面。在使用時,每次操作之后都去檢查當前的界面是否為該界面,如果是,則去點擊這個入口控件,就回到了這個模塊,繼續測試;這樣即可保證穩定性測試一直保持在這個模塊中進行。
檢測到當前界面為關注的 activity 時,通過與手機上的 ViewServer 通信,獲取該 activiy 的控件信息,得到指定的控件的坐標信息;再對這個坐標做一個點擊的操作,即回到了指定的模塊界面。
使用方法
在執行 monkey 命令時擴展一個 sa 參數,參數格式是 package/activity/item ,通過該參數可指定入口界面元素;同時再擴展一個 ea 參數,參數格式也是 package/activity/item ,通過該參數指定出口界面元素,當碰到出口界面元素時再次主動進入入口界面。
2.配置業務操作及比例
實現思路
大家知道,執行 monkey 命令時需要配置各個事件的比例,而該優化點的思路就是將業務操作寫成自動化腳本,然后將該腳本抽象成一個 monkey 事件,并且可以配置執行比例。
使用方法
在執行 monkey 命令時擴展一個 m 參數,參數格式是 腳本路徑 --pct-custom 業務比例
例如,測試百度瀏覽器時定期去打開百度首頁:
-
將腳本 browser_test.shpush 到 /data/local/tmp/ 目錄下 ( 需要保證 browser_test.sh 有可執行權限 )
-
monkey 命令參數配置 -m /data/local/tmp/browser_test.sh --pct-custom 5
工具使用環境配置
從以上介紹可知,原生monkey測試技術的改進需要擴展monkey命令參數,為了實現這點,需要對Android官方自帶的monkey.jar包進行源碼修改,然后重新編譯生成一個新的monkey jar包。下面的介紹是針對新monkey jar生成以后用戶的配置步驟,而對于android各平臺的monkey jar的下載地址可參考附錄。
-
根據 android 平臺版本,將對應平臺的 monkey.jar push 到 /data/local/tmp/monkey.jar
-
生成以下可執行文件 /data/local/tmp/monkey
# Script to start"monkey" on the device, which has a very rudimentary
# shell.
#
base=/data/local/tmp
exportCLASSPATH=$base/monkey.jar
trap ""HUP
exec app_process/system/bin com.android.commands.monkey.Monkey $*
-
對 data/local/tmp/monkey 增加執行權限
-
使用該擴展功能的 monkey 運行命令類似:
adb -d shell/data/local/tmp/monkey -s 0 -p packagename --throttle 2000 --pct-touch 15--kill-process-after-error --pct-nav 25 --pct-majornav 15 --pct-appswitch 2--pct-anyevent 16 --monitor-native-crashes -a package/activity/itemname/[index]-v -v 100
-a 參數即指定需要關注的 activity ,以及入口控件名稱,格式為:
-apackage/activity/itemname/[index]
其中, package/activity 可通過 HierarchyViewer 來查看,如下圖
itemname 也可通過 HierarchyViewer 來查看,如下圖
index 是指這個 item 名稱在這個界面上出現的位置,使用 hierarchyviewer 從上面開始數從左到右,從上到下。例如,關注的 item 名稱為 TextView ,需要從 hierarchyviewer 上看,從左到右,從上到下數所有出現的 TextView ,找到關注的 TextView 的 index 。
Index 是一個可選字段,如果不填則默認為 0 , index 用于在同一個 activity 上有多個相同名稱的 item 時,指定特定的 item 。
使用備注
Android出于安全考慮,當系統屬性ro.secure=0且ro.debuggable=1時才允許開啟viewServer服務,所以只有滿足這個條件的手機才能使用本文所述的-a參數擴展功能。如果需要更改系統屬性ro.secure=0 且ro.debuggable=1,可以通過先root手機,再修改boot.img的方法來實現。
來自:http://qa.baidu.com/academy/detail/article/119