安卓自動化系列:先從MonkeyRunner聊起

寫在正文之前

關(guān)于測試方面的東西湃窍,值得研究和推敲的東西實在太多,我一直想提倡和實踐一種軟件行業(yè)的工匠精神仙蛉,從測試這個崗位來講,工匠精神意味著測試人明白破壞是為了重建碱蒙,明白測試的目的是為了預(yù)防BUG而不是發(fā)現(xiàn)BUG荠瘪,意味著對每一個缺陷窮根問底,意味著無論從流程還是技術(shù)上都無所不用其極地為提高產(chǎn)品質(zhì)量而努力赛惩,而測試人員哀墓,更像是一股特種作戰(zhàn)人員,他們身懷絕技喷兼,斗智斗勇篮绰,無孔不入地深入產(chǎn)品、深入底層季惯,去發(fā)現(xiàn)隱藏的缺陷吠各。一個好的測試人員不該被限制被拘束,他們明白自動化的威力星瘾,但也不輕視黑盒走孽,會以白盒作為輔助手段,安全性能對他們來講更是架構(gòu)在CI之上的更高層自動化琳状。
這一系列會以安卓自動化為主磕瓷,從基本的MonkeyRunner講到谷歌的Uiautomator再講到更高層次的Robotium和Appium,我們會發(fā)現(xiàn)念逞,所有框架都不是閉門造車困食,他們的差別只是架構(gòu)和設(shè)計思想上的差別,而不是技術(shù)層次的差別翎承。

什么是MonkeyRunner

MonkeyRunner是Android SDK提供的測試工具硕盹。嚴(yán)格意義上來說MonkeyRunner其實是一個Api工具包,它不像我們上一講講過的Monkey叨咖,Monkey是向應(yīng)用發(fā)送一系列偽隨機(jī)事件瘩例,而MonkeyRunner提供了一系列的API用于具體操控我們的安卓系統(tǒng)啊胶,例如打開哪個activity、做什么操作都是可以自定義的垛贤。有了Monkeyrunner焰坪,我們可以通過python語句控制apk包的安裝和卸載、啟動app聘惦、向app發(fā)送各種動作指令某饰、截取圖片并保存。
然而MonkeyRunner提供的操作有限善绎,適合重復(fù)性黔漂、短路徑的測試,例如渠道包的冒煙測試禀酱,不適合連續(xù)性的操作炬守,缺點(diǎn)也同樣明顯;
1比勉、 由于type和drag方法的不穩(wěn)定劳较,很容易偏離我們的預(yù)期。
2浩聋、 MonkeyRunner不支持?jǐn)嘌怨畚希恢С纸貓D之間的對比。

MonkeyRunner實戰(zhàn)

話不多說衣洁,直接貼代碼墓捻,代碼也寫得比較簡單,所有的理解也會體現(xiàn)在注釋中坊夫,工具比較簡單砖第,建議大家直接上官網(wǎng)查看API。

# -*- coding: utf-8 -*  
"""
MonkeyRunner: 提供了橋接測試程序與設(shè)備或者模擬器的作用环凿,
              提供了一些輔助ui及內(nèi)置的幫助命令梧兼。
           
MonkeyDevice: 代表我們所連接的設(shè)備本身,提供了操作設(shè)備
              的一系列方法智听,包括安裝羽杰、應(yīng)用apk,喚醒到推、重啟考赛、
              觸摸設(shè)備的一系列方法。
              
MonkeyImage : 代表我們的截圖對象莉测。這個類提供了對截圖的一系列操作
              颜骤,例如截圖之間的相似度對比斷言,生成截圖等等

"""
from com.android.monkeyrunner import MonkeyRunner 
from com.android.monkeyrunner import MonkeyDevice 
from com.android.monkeyrunner import MonkeyImage 

#引入我最愛的單元測試框架unittest
from unittest import TestCase, main

class  SimpleAPI(TestCase):
    '''
    簡單利用monkerrunner的API進(jìn)行了一些基本的操作捣卤,例如
    安裝忍抽、卸載八孝、滑動、截圖等等
    
    '''

    def setUp(self):
        '''
        配置連接鸠项,如果10s還沒有連接上唆阿,則報異常

        '''
        try:
            self.device = MonkeyRunner.waitForConnection(10)
        except:
            print('連接超過10s,超時锈锤,請檢查設(shè)備')

            
        #定義測試包名
        self.package = 'net.medlinker.medlinker'

        #定義你要打開的activity名
        self.activity = 'net.medlinker.medlinker/.guide.MainActivity'

        #定義打開路徑
        self.runComponent = self.package + '/' + self.activity

        #安裝,如果原來的已經(jīng)有安裝包闲询,則會先卸載
        try:
            self.device.installPackage('medlinker.apk')
        except:
            print('sorry,install failed')

    def tearDown(self):
        print('Nice to meet you')


    def test_main_headline_page(self):
        '''
        進(jìn)入首頁久免,進(jìn)行一系列的操作,最后進(jìn)行截圖扭弧,與其他目錄中原本已有的截圖進(jìn)行對比
        
        '''
        self.device.startActivity(component=self.runComponent)
        
        #等待界面啟動完成阎姥,monkeyrunner在等待方面做得比較挫,只有一個sleep方法
        MonkeyRunner.sleep(4)

        #操縱設(shè)備按下菜單鍵
        self.device.press('KEYCODE_MENU', MonkeyDevice.DOWN_AND_UP)

        #在(500,1200)坐標(biāo)位置進(jìn)行點(diǎn)擊鸽捻,這個也做得比較挫呼巴,隨著設(shè)備的變化位置會發(fā)生變化
        self.device.touch(500, 1200,"DOWN_AND_UP");

        #模擬拖動操作
        self.device.drag((550,500),(100,500), 0.5, 1)

        #當(dāng)前位置截圖
        mainPageImage = self.device.takeSnapshot()

        #加載已知正確的圖像
        imageTrue = MonkeyRunner.loadImageFromFile('E:\github\true.png')

        #斷言,如果兩個圖片有大于75%的相似度御蒲,則斷定測試通過
        self.assertTrue(imageTrue.sameAs(mainPageImage, 0.75))

if __name__ == '__main__':
    main()

        
             

有問題歡迎與我討論衣赶,太晚了,睡覺咯

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末厚满,一起剝皮案震驚了整個濱河市府瞄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌碘箍,老刑警劉巖遵馆,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異丰榴,居然都是意外死亡货邓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進(jìn)店門四濒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來换况,“玉大人,你說我怎么就攤上這事峻黍「绰。” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵姆涩,是天一觀的道長挽拂。 經(jīng)常有香客問我,道長骨饿,這世上最難降的妖魔是什么亏栈? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任台腥,我火速辦了婚禮,結(jié)果婚禮上绒北,老公的妹妹穿的比我還像新娘黎侈。我一直安慰自己,他們只是感情好闷游,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布峻汉。 她就那樣靜靜地躺著,像睡著了一般脐往。 火紅的嫁衣襯著肌膚如雪休吠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天业簿,我揣著相機(jī)與錄音瘤礁,去河邊找鬼。 笑死梅尤,一個胖子當(dāng)著我的面吹牛柜思,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播巷燥,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼赡盘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了矾湃?” 一聲冷哼從身側(cè)響起亡脑,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎邀跃,沒想到半個月后霉咨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拍屑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年途戒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片僵驰。...
    茶點(diǎn)故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡喷斋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蒜茴,到底是詐尸還是另有隱情星爪,我是刑警寧澤,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布粉私,位于F島的核電站顽腾,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏诺核。R本人自食惡果不足惜抄肖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一久信、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧漓摩,春花似錦裙士、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至夭咬,卻和暖如春酥诽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背皱埠。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留咖驮,地道東北人边器。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像托修,于是被迫代替她去往敵國和親忘巧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 作者:Ringoyan睦刃,騰訊測試開發(fā)工程師砚嘴。先后為植物大戰(zhàn)僵尸Online,糖果傳奇等游戲擔(dān)任測試經(jīng)理涩拙,其負(fù)責(zé)的“...
    飯盒閱讀 2,795評論 2 41
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理际长,服務(wù)發(fā)現(xiàn),斷路器兴泥,智...
    卡卡羅2017閱讀 134,695評論 18 139
  • 分享一下自己作為面試官問的一些奇葩問題工育,背后的原因,以及應(yīng)對的建議搓彻。不一定有可復(fù)制性如绸,重在思路,也可娛樂旭贬。 有個挺...
    貞觀十三年閱讀 443評論 1 3
  • 1. 一則新聞瞬間走紅遭到熱議稀轨,一學(xué)校的畢業(yè)照扼脐,領(lǐng)導(dǎo)全為ps上去的,這個學(xué)校的領(lǐng)導(dǎo)到底有多忙靶端? 作為一名一線教師谎势,...
    小雞愛小米閱讀 918評論 1 6
  • 這張圖片是昨天晚上11:40拍的凛膏,K247晚點(diǎn)五個小時,于是果斷改簽了三點(diǎn)半的T215脏榆。誰知道又晚點(diǎn)半個小時猖毫,每年...
    VICKY_MA閱讀 204評論 0 0