穩定性測試 | 可定制模塊級的內核穩定性工具

joggerhe 8年前發布 | 33K 次閱讀 Java 安卓開發 軟件測試

背景介紹

穩定的產品質量是留住用戶的第一道閥門,所以穩定性測試是常規測試中必不可少的。這周我們介紹百度應用比較廣泛的兩款穩定性工具: 系統級穩定性測試工具 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的下載地址可參考附錄。

  1. 根據 android 平臺版本,將對應平臺的 monkey.jar push 到 /data/local/tmp/monkey.jar

  2. 生成以下可執行文件 /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 $*

  1. 對 data/local/tmp/monkey 增加執行權限

  2. 使用該擴展功能的 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

 

 本文由用戶 joggerhe 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!