標籤:des android http io os ar 使用 java sp
要說android的自動化,那真是折騰死我了,從早期的monkeyrunner,到後來的robotium,再到最新的uiautomator,各有各的問題,總之性價比都不夠高,不太適合我的使用情境。於是不願意將研究結果投入實踐,一直等待。今年的適配問題越發突出,再不自動化,迴歸就該搞死人了。
於是最後研究比對instrumetation和uiautomator,終於確定了uiautomator方案,其實也是勉為其難,不過總算也是可以實現的。先準備好指令碼,批量修改了所有布局檔案,增加了contentDescription屬性,少許的動態產生的布局,可以在開發配合下代碼中增添,到時候提交到svn,以後再有新模組,都要求增加該屬性,提交給測試增加自動化測試模組就可以了。
不過需要通過sdk的tools目錄下的uiautomatorviewer.bat(管理員權限運行),查看介面元素,然後一一引用並進行操作,一是需要開發的大力配合,二是全都要一點點自己寫,三是需要編譯成jar包,push到手機上才能運行,也就是說只能通過日誌暴力調試。
峰迴路轉,本來是有項目找方法測試C#的WPF,在搞定了這事以後,發現ranorex還可以測試ios和android程式,大喜之。於是試了試,發現可以和最傳統的自動化測試載入器一樣進行對象識別,錄製和回放,真是大爽呀。(事後經過測試,發現不適合我,因為ranorex和robotium一樣,不可以跨應用,只能用回uiautomator解決方案)
整個步驟大致是:
1. Instrument原始碼,編譯出一個可測版本(這個我回頭單獨寫一章,如何進行instrument源碼);
2. 建立一個android的測試專案;
3. 串連上手機,手機上會安裝一個service;
4. 部署之前編譯的可測試apk到手機上;
5. 錄製,回放。
這個東西很好的一點是使用的instrument,也就是說他不是從一個孤零零的apk外圍做的,而是直接從源碼裝hook,那要訪問到程式的任何東西都可以了。這樣就不擔心google有一天對外關閉大門,instrumentation可是他自己的東西。
先說建立項目吧:
001.png
002.png
Module和advanced裡面可以建立cmd控制台程式,也可以建立測試的模組庫,還可以建立表單程式,我就預設選擇了Testsuite
003.png
建立完以後就這個樣子了。
不管三七二十一,直接開始錄製:
004.png
005.png
這裡的apk是將源碼處理過的,其實deploy的時候勾選上instrument就可以了,不過我還是細細說說instrument的細節吧。參考:手把手教你ranorex_android源碼instrument
006.png
提示JRE1.6 not found:
填寫JRE的目錄:
C:\xxx\android\Java\jdk1.6.0_03\jre
隨口說一句:Jre就是java程式的運行環境;jdk是你做java開發的那套東西。
007.png
出錯:
008.png
1. 檢查apk是否混淆(obfuscated)
2. 必須使用api8以上版本,也就是sdk2.2以上版本;
3. 手機上是否安裝了一個沒有instrumented的版本
依次檢查發現都沒有問題,仔細一看,我倒,怎麼手機串連是個叉叉,於是刪除手機重新添加,於是就大功告成了。
所以別以為選擇上了裝置就可以,要隨時留心檢查一下裝置狀態是鉤鉤還是叉叉:
009.png
在deploy apk之前手機上會先啟動一個服務:
010.png
這個樣子就是安裝成功了:
011.png
點開服務介面中的那個被測程式,會看到一個toast提示:ranorex connected
在ranorex上開啟view spy
012.png
013.png
所有的對象都被識別出來了,要知道引用方式,只需找到對象然後點擊一下track,爽吧。
然後在
014.png
物件程式庫中(這個例子是TandroidRepository.cs)中可以看到引用到的介面元素,錄製的操作在Recording1.cs(這個檔案頭部分強調: // DO NOT MODIFY THIS FILE! It is regenerated by the designer. ),不過沒關係,還有Recording1.UserCode.cs,你的代碼可以寫在這裡,把錄製的代碼拷貝來改巴改巴就可以用了。
好了,這個ranorex工程和android的例子,我都一起打包,提供給大家下載試試吧。
手把手教你ranorex_android自動化測試第一個樣本