App遍歷初步探討
好像好久沒有更新部落格了,之前寫的幾篇部落格關於自動化的框架的居多,其中好多博友向我提了好多問題,我沒有回覆。這裡給博友道個歉 ~ ~總結幾點原因如下:
1.我一般很少上部落格,看到了都是好幾天之前的問題
2.比較懶~ ~這是主要原因,以後會更改!
3.框架都是比較老了,現在已經對自動化單元測試框架,做了更高階的封裝。(報告更加優美,功能也增加了:比如錯誤截圖,後臺異常蒐集,可重複多次 執行,錯誤錄屏,後臺crash和anr異常·捕捉)
4.打算最近重新把這一套完整的東西,放在github上。
目前從事的是APP測試,所以封裝了minicap快速截圖、監聽器處理異常彈框(廣告)、圖形識別、OCR技術等公共方法與appium完美結合,關於圖形識別和OCR的作用是明顯的...當前這一套東西同樣適應用web端。
目前我們的所有測試結果是放在平臺上的。包括功能、效能、穩定性、相容性測試等....
這一塊,我改天專門講講我在封裝時的一些小心得.....
今天,我們的主題是遍歷APP!!!
進入主題,為什麼要研究這個玩意?
話說做app自動化測試或者功能測試對monkey這個玩意應該不陌生嗎,在壓力測試中經常跑這個然後蒐集crash和anr資訊。但是monkey的缺點是很明顯:
1.沒有目的性,遍歷效果比較差,一般很難比較系統的遍歷玩app的大部分 頁面!!
2.經常沒事還把你wifi給斷了,那麼接下來的monkey是無意義的,有些app沒有網就是廢的~
3.可能陷入到一種死迴圈中,比如A-B-C-D-C-B-A 根本出不來,這時候如果看見了,可能狂按返回鍵幫他跳出整個死迴圈...
所以我也改造了monkey了 某種程度上讓他看起來稍微智慧和高效點,整個有感興趣的博友可以留言討論。。。
好了,說了這麼多,我們總想著如果有一種演算法大致上能像人一樣點完app的上所有按鈕 ,然後在點選過程中收集一些效能資訊比如耗電、cpu、上下行流量...更重要的是蒐集一些crash和anr資訊,對於一些比較固定且內容變化不大的app還可以進行圖形對比,判斷不同版本對應不同頁面的截圖差異!等等
其實,早就有這個東西了像百度的測試的那個所謂的深度遍歷,還有其他的各種雲的遍歷,但是但是,效率是相當的差,因為不支援定製和一些過濾規則,根本遍歷不了幾個按鈕就結束或者陷入死迴圈...而且tm的還要錢...我是試用了下,懶得再用了!然後再testhome上看見了一個大神寫的app遍歷:https://testerhome.com/search?q=AppCrawler
感覺想法和思路很好!我非常佩服,但是我下載了下來用來遍歷我們的這個比較比較變態的app,效率和遍歷深度很差....這裡沒有其他的意思(針對我的 這個app ),實話實說!原因呢可能有一下幾點:
1.我們的這個app廣告特別的多,不時彈出個廣告,讓你措手不及,這個不好處理!
2.過濾規則我可能沒太理解怎麼用!
3.有死迴圈出現。比如在A使用者的個人主頁面點選進了B的個人profile 然後進入C 的個人 profile,反正一直在 profile 頁面遍歷!
還有一些缺點:
1.沒有脫離appium,執行指令碼建立在appium的基礎上
2.速度有點慢...
那麼,我也想寫個簡單的遍歷指令碼 (我希望他不斷不簡單),當前可能不能和這位大神的AppCrawler 相比,但是也有我的一些小優點~~
1.用的自生長的深度優先遍歷演算法
在一個初始頁面獲取所有自定義規則的element,然後點選其中的一個element,跳轉或者不跳轉到另外一個page,再次獲取次也麼的合法element新增路徑和圖的鄰邊...一直這樣遞迴一直到一個page
無法獲取新的element或到達設定的深度或設定的時間終止遍歷!!如果不太瞭解可以看下深 度優先遍歷演算法 。不過我們的這個圖和鄰邊是單向的。
2.脫離了appium,利用appium的真正實現原理封裝了針對於uiautomator2-server的方法,只要裝有這個apk就行,省去了appium的安裝成本和排除坑爹的 appium 錯誤的錯誤成本。
3.同樣支援規則引導
4.目前自認為還可以的遍歷效率和深度(對我這個app,當前還要不斷增加邏輯和優化,這是我寫這篇部落格的主要目的!)
5.遍歷完生成思維導圖和遍歷截圖(用jsmind)
....
其他的慢慢的再加上,我只想讓他遍歷高效點和準確點,工程我已經放在github上,寫這篇部落格的目的就是想引入這麼個概念,然後想讓感興趣的一些拓展或修改這個框架,不管是過濾規則還是演算法
我相信只有大家共同來想好怎麼做這個工程才能做好!!!
github的地址:https://github.com/zhoudaqiang/appCrawler
最後,寫的時候比較隨意主要是讓他能執行起來。如果大家對這個框架不太瞭解或者對其中的任何思想不明白可以留言加QQ詳聊。希望能有人一起想好做好這個遍歷工程,至少能比monkey高效點~