相似於網頁端自動化,安卓測試的自動化也主要是針對控件的自動化。其原理就是經過python(其餘語言) 的腳原本代替咱們手動完成的任務。因此咱們須要的工具就是 python(測試腳本),Appium(安卓自動化測試工具),uiautomatorviewer.bat (定位安卓控件),虛擬機或者真機(運行安卓程序)。html
咱們按照自動化測試的過程來介紹工具的使用與安裝。python
這是 SDK 自帶的一個工具,主要做用就是定位安卓的控件的位置,由於 Appium 控制的就是這些控件,或者說是元素。獲取元素位置的方法有不少,相似於網頁端的 'class', 'xpath' , 'id' 等等。關於這個工具,GitHub 有大神分享了一版增強版的工具,傳送門。增強版能夠直接定位徹底的 xpath 路徑,相比經過 class 本身寫要方便不少。android
上面是一個查看元素的例子,經過右下方的路徑能夠十分簡單的訪問到元素。尤爲是對於 React-Native 這種框架式,而不是基於原生安卓的,這樣就方便了不少不少。git
這個工具是目前普遍使用的安卓自動化測試的工具。可是官網好像已經中止更新了,目前好像在 GitHub 維護,傳送門 。下載後直接安裝,不過貌似只能安裝在系統盤。關於 Appium 的具體使用,能夠參考這篇博客,傳送門 。這裏就不過多的敘述具體的操做過程了。github
啓動以後是這樣的,而後直接運行python腳本就能夠看到虛擬機或者真機上 APP 自動的運行了。web
這裏準確的來講是,在python 腳本中對虛擬機或者真機的操做。對python 來講,首先安裝支持 Appium 運行的包,appium,而後在測試的開始要配置機器,也就是讓 Appium 找到機器在哪,連接機器與 Appium,這樣就能夠經過 Appium來控制 機器了。app
self.desired_caps = {} self.desired_caps['platformName'] = 'Android' # 平臺 self.desired_caps['deviceName'] = '192.168.221.101:5555' # self.desired_caps['platformVersion'] = '9.0' # 系統版本 # self.desired_caps['app'] = 'E:/autotestingPro/app/UCliulanqi_701.apk' # 指向.apk文件,若是設置appPackage和appActivity,那麼這項會被忽略 # self.desired_caps['deviceName'] = 'Android Emulator' self.desired_caps['appPackage'] = 'com.cnblogandroid' # APK包名 self.desired_caps['appActivity'] = '.MainActivity' # 被測程序啓動時的Activity self.desired_caps['unicodeKeyboard'] = 'true' # 是否支持unicode的鍵盤。若是須要輸入中文,要設置爲「true」 self.desired_caps['resetKeyboard'] = 'true' # 是否在測試結束後將鍵盤重軒爲系統默認的輸入法。 self.desired_caps['noReset'] = True # true:不從新安裝APP,false:從新安裝app self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", self.desired_caps) # 構建虛擬機,用於測試
這樣配置以後就能夠直接開始寫測試代碼,控制虛擬機或者真機了。可是咱們爲了方便,寫不少個不一樣的測試,因爲有時候測試沒法連在一塊兒,因此咱們使用 unittest 框架來寫測試代碼。該方法的好處是,能夠寫多個相關或者不相關的測試實例,而後將他們組合起來,具體就是:框架
if __name__ == '__main__': suite = unittest.TestSuite() # 一個測試實例 tests = [Test_Blog_HomeWork("test_blog"), test_borad("test_borad")] # 能夠加入其它測試 suite.addTests(tests)
對於自動化測試,咱們一般用於重複的操做,或者覆蓋性的測試。那麼如何判斷測試的完整性呢,及代碼中有沒有出現未運行到的測試呢? unittest 提供了一個 UnittestTextReport 的方法。能夠看到測試的狀況,爲了美觀,unittest 還提供了 HTMLTestRunner 經過html的方式顯示測試結果。工具