一種精准monkey測試的方法


WeTest 導讀

相信大家都知道移動端應用的monkey測試吧,不知你們有沒有為monkey測試的太過於隨機性的特性有過困擾,至少在我們這種界面控件較少且控件位置較偏的app的使用上其測試有效性大打折扣。因此本文主要針對這個問題,提供了一種解決方案。

 


 

1. 問題背景

 

Monkey測試:是Android自動化測試的一種手段,簡單的說是像猴子一樣亂點,它向系統發送偽隨機的用戶事件流(如按鍵輸入、觸摸屏輸入、手勢輸入等),是一種隨機性測試,為了測試軟件的健壯性和穩定性,通常用於安卓應用的壓力測試。

 

因此,我們的產品也用了這種傳統的monkey手段進行app穩定性測試,在使用一段時間后,並未發現實際性問題。通過觀察一段時間的執行過程,發現由於我們app幾個頁面控件布局是比較偏上和偏下邊緣,中間只有一個大按鈕,這樣中間大按鈕命中率比較高經常會進入同一個頁面,那么其他頁面和按鈕的功能幾乎沒有被點擊到。這種傳統monkey測試控件命中率太低!

 

市面上有很多類似布局的app,相信在采用傳統monkey測試時也存在此類問題。

 

2. 解決方案

 

我們知道,對於app頁面布局的控件位置、屬性等信息是可以用android sdk 工具包中的uiautomatorviewer.bat查看的,如果在monkey測試時能獲得這些控件的位置信息,那么就可以實現控件的精准點擊。android sdk提供了這個命令“adb shell uiautomator dump”,可以實現將當前activity布局文件dump到xml文件中,這樣問題就得到了解決。

 

dump 布局文件:

 

 

 

得到的window_dump.xml內容:

 

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<hierarchy rotation="0">
<node index="0" text="" resource-id="" class="android.widget.FrameLayout" package="com.bass.cleaner.security" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,0][1080,1776]">
<node index="0" text="" resource-id="" class="android.widget.LinearLayout" package="com.bass.cleaner.security" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,0][1080,1776]">
...
</hierarchy>

 

uiautomatorviewer.bat查看控件屬性:

 

 

但是,又一問題,xml中的控件非常多,並非每個控件都可以點擊,如果挨個嘗試點擊那么執行效率也是非常慢的,不符合預期。幸好,控件有個clickable屬性,當其等於true時,表示該控件可點,反之不可點。那么,我們將控件信息xml文件中“clickable=true”的控件過濾出來,再去計算這些控件的位置進行點擊,就可以實現精准點擊。到此,問題得到完美解決。

 

舉例,執行流程如下:

 

當然,在實際中,還存在控件的點擊順序問題,如果點擊順序不合適,也會存在有些控件被頻繁點擊、有些控件可能點擊不到的情況。這就需要根據實際的測試目標來指定執行策略,例如,在當前頁可點擊的控件列表中,隨機點擊、順序點擊,或存儲各頁面控件的目錄樹,進行深度遍歷點擊等等。

 

隨機測試完后,有時還需要還原執行過程,定位發現的問題,所以在執行過程中,我還加入了一些截圖操作,在每次點擊控件前進行點擊坐標的標記、截圖,這樣,測試完后就能根據這些截圖很完美的還原出了整個隨機測試的過程,大大簡化的問題的定位。舉例,下圖是執行過程中的幾張連續截圖: 

 

 

 

圖中,紅點位置就是點擊位置,很直觀的展示了執行過程。

 

總結

 

本文所述的方案很好的解決了monkey測試在控件布局不均衡的app上執行有效性低的問題。同時,實現了一種自適應的隨機測試手段,也就是無需針對不同app編寫不同的隨機測試腳本,實現了一套測試代碼用於所有app的隨機性測試。

 


 

“自動化兼容測試” 服務將提供雲端自動化兼容服務,提交雲端百台真機,並行測試。快速發現游戲/應用兼容性和性能問題,覆蓋安卓主流機型

點擊:https://wetest.qq.com/product/auto-compatibility-testing 了解更多詳情。

 

如果使用當中有任何疑問,歡迎聯系騰訊WeTest企業QQ:2852350015


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM