天地會(huì)珠海分舵注:本來這1系列是準(zhǔn)備出1本書的,詳情請(qǐng)見早前博文“尋求合作火伴編寫《深入理解 MonkeyRunner》書籍“。但由于諸多緣由,沒有如愿。所以這里把草稿分享出來,所以毛病在所難免。有需要的就參考下吧,轉(zhuǎn)發(fā)的話還請(qǐng)保存每篇文章結(jié)尾的出處等信息。
MonkeyRunner使用起來非常的簡單,只需要導(dǎo)入以下幾個(gè)類基本上就可以滿足測試腳本編寫的需求,比如:
如果你想使用MonkeyRunner的控件相干的功能來讓自己的代碼可擴(kuò)大性和可移植性更好,那末你也只需額外用上下面幾個(gè)類就基本上能滿足你的要求了:
如果你還想更簡單的使用控件相干的功能,MonkeyRunner一樣也能夠滿足你,只要你導(dǎo)入以下的類就能夠使用EasyMonkeyDevice來調(diào)用其封裝好的易用的API:
所以從腳本的角度來看,使用MonkeyRunner可以簡單的理解成把需要的類給整合起來,然后通過代碼把相應(yīng)的業(yè)務(wù)邏輯通過各個(gè)類提供的方法給實(shí)現(xiàn)出來。?
但從MonkeyRunner實(shí)現(xiàn)的角度來看,事實(shí)并沒有這么簡單,為了滿足MonkeyRunner腳本需要的功能,全部框架里面會(huì)使用到不同的庫和不同的模塊,乃至?xí)?qū)動(dòng)Android機(jī)器真?zhèn)€不同模塊與服務(wù)來做事情。我們先看下MonkeyRunner的全部架構(gòu)圖:
MonkeyRunner是1個(gè)CS(客戶端-服務(wù)器)架構(gòu)的框架,主要的代碼控制邏輯是在PC端作為客戶端來運(yùn)行的;但客戶端需要驅(qū)動(dòng)運(yùn)行在目標(biāo)Android系統(tǒng)的服務(wù)器端來做事情,比如驅(qū)動(dòng)Monkey服務(wù)去調(diào)用對(duì)應(yīng)的Android服務(wù)去注入事件以實(shí)現(xiàn)點(diǎn)擊等操作功能。服務(wù)器端和客戶真?zhèn)€通訊是通過Socket來實(shí)現(xiàn)的,而Socket又分為基于USB通訊協(xié)議和TCP通訊協(xié)議的,也就是說用戶既可以通過 USB線直接連接主機(jī)和Android目標(biāo)機(jī)器;也能夠通過網(wǎng)絡(luò)使用TCP協(xié)議來連接主機(jī)和 Android目標(biāo)機(jī)器(使用命令:adb connect IP)。但注意客戶端其實(shí)不會(huì)直接連接Android目標(biāo)裝備端中各個(gè)服務(wù)正在監(jiān)聽的端口,而是連接主機(jī)端和該端口對(duì)應(yīng)的轉(zhuǎn)發(fā)端口,只要連接上轉(zhuǎn)發(fā)端口,所有發(fā)向該端口的數(shù)據(jù)都會(huì)直接轉(zhuǎn)發(fā)給Android目標(biāo)機(jī)器端對(duì)應(yīng)的服務(wù)監(jiān)聽的端口。
從上圖可以看到,MonkeyRunner腳本的實(shí)現(xiàn)需要多個(gè)庫的支持,經(jīng)常使用的有以下這幾個(gè):
往下1層我們可以看到,MonkeyRunner跟Android目標(biāo)機(jī)器進(jìn)行通訊根據(jù)需要做的事情不同而會(huì)驅(qū)動(dòng)3種不同的服務(wù)去處理要求:
這里要注意的是MonkeyRunner框架其實(shí)不會(huì)直接連接adbd這個(gè)Android目標(biāo)機(jī)器的守護(hù)進(jìn)程來驅(qū)動(dòng)其做事情,而是先和ADB服務(wù)器這個(gè)PC真?zhèn)€守護(hù)進(jìn)程進(jìn)行通訊,然后再由ADB服務(wù)器來驅(qū)動(dòng)adbd來完成要求的。至于ADB服務(wù)器,ADB守護(hù)進(jìn)程,ADB協(xié)議和ADB命令行客戶端等概念,第4章”ADB協(xié)議及服務(wù)“會(huì)詳述。
最下面1層就是Android系統(tǒng)的核心服務(wù)了。MonkeyRunner的很多要求都是需要調(diào)用到Android的系統(tǒng)服務(wù)來完成的。比如點(diǎn)擊1個(gè)控件就需要通過monkey服務(wù)來調(diào)用Android系統(tǒng)的InputManagerService來注入按鍵事件來實(shí)現(xiàn)點(diǎn)擊要求。
作者:天地會(huì)珠海分舵
微信公眾號(hào):TechGoGoGo
微博:http://weibo.com/techgogogo
CSDN:http://blog.csdn.net/zhubaitian