做過UI自動(dòng)化測試同學(xué),都會(huì)深深體會(huì)幾個(gè)痛點(diǎn):維護(hù)量大、適配量大、編寫代碼巨大等?;谶@些問題,大家都會(huì)想到抽象封裝通用常用方法,編過程序的同學(xué)都知道,如何提高編程速度,那就是有一套自己熟悉和好用的函數(shù)庫,這樣編程很大部分就如搭積木游戲,可以快速搭建程序?;诖宋覀冊O(shè)計(jì)了第一套封裝結(jié)構(gòu)模式,如下圖所示:
http://wiki.jikexueyuan.com/project/geekdigest/images/ui01.png" alt="" />
從以上結(jié)構(gòu),不難發(fā)現(xiàn)應(yīng)用基礎(chǔ)庫比較凌亂,沒有分類。如果是自己寫的還記得住,要是移交給別人,就顯得很糟糕了,別人不愿意去看去用。那么,急需解決的問題就是如何分類比較合理。
從基于UI測試的測試對象出發(fā),我們測試的對象為一個(gè)個(gè)的Activity,那我們可以使用Activity來進(jìn)行分類。首先每個(gè)Activity 都有自己的專有方法,如撥號界面,會(huì)有輸入號碼、撥號、刪除號碼等功能,我們將每個(gè)Activity劃分為一個(gè)單獨(dú)的類,類里面把這個(gè)Activity 涉及的方法都寫好提供給用例調(diào)用,如下圖撥號界面的屬性與功能的基礎(chǔ)分解。
http://wiki.jikexueyuan.com/project/geekdigest/images/ui02.png" alt="" />
依據(jù)以上 Activity 封裝模式,我們還需要在結(jié)構(gòu)中再加入一層 Activity 函數(shù)庫,那么,新的結(jié)構(gòu)圖如下所示:
http://wiki.jikexueyuan.com/project/geekdigest/images/ui03.png" alt="" />
這里涉及了幾個(gè)Activity的查詢方法。
adb shell dumpsys package <包名>
adb shell dumpsys activity
找到棧頂Activity
http://wiki.jikexueyuan.com/project/geekdigest/images/ui04.png" alt="" />
adb shell dumpsys activity | find “mFocusedActivity”
簡化搜索字符
adb shell dumpsys activity | find “mF”
以上方法,最快捷的是方法四可以馬上知道當(dāng)前的頁面信息,最全面的是方法1與方法2,使用哪種方法需要依據(jù)實(shí)際使用情況進(jìn)行選擇。
之前我們介紹過,基于同種布局抽象出通用方法。我們將常用的通用方法,放在公共庫中,將每個(gè)界面方法放于每個(gè)單獨(dú)界面的類中。下面來看一下基本基本類圖:
http://wiki.jikexueyuan.com/project/geekdigest/images/ui05.png" alt="" />
在各種方法都固化完后,編寫用例就成了搭積木游戲,可以快速的搭建需要的用例。將用例的邏輯寫在用例中,用例的數(shù)據(jù)分離出來全部寫在對應(yīng)的Activity 類中。這樣平時(shí)主要維護(hù)已有的各個(gè)Activity內(nèi)方法與數(shù)據(jù)。
最后再按照功能將用例結(jié)構(gòu)抽象成為一個(gè)標(biāo)準(zhǔn)框架層理論,這樣大家就更容易明白與理解了。
http://wiki.jikexueyuan.com/project/geekdigest/images/ui06.png" alt="" />
基于此框架,基本不變的層為:布局層、組件層、通用層。界面層會(huì)因?yàn)榻缑娴淖兓M(jìn)行維護(hù)變化。設(shè)計(jì)時(shí)候尤其注意函數(shù)的通用性、函數(shù)的參數(shù)、各種重載函數(shù),以及各種異常情況都需要重點(diǎn)考慮和規(guī)避。作為通用的方法,為了保證函數(shù)的調(diào)用不出問題,也是需要測試的,我們必須寫一份用例來測試這些方法,模仿單元測試方式來檢查這些通用方法的可用性、穩(wěn)定性、可靠性,以此來保證在應(yīng)用變化,Android版本變化時(shí)候能快速的發(fā)現(xiàn)哪些函數(shù)存在的不兼容現(xiàn)象,進(jìn)行及時(shí)的修改,保證業(yè)務(wù)的正常進(jìn)行。
界面層的所有方法都基于接口方式進(jìn)行設(shè)計(jì),實(shí)際的用例由這些接口方法組成。當(dāng)版本變化的時(shí)候只需要重新實(shí)現(xiàn)接口重新變化一份,用例只需要變換一下實(shí)例化的類就可以完成切換用例。如此這樣,用例的固定步驟也可以不用變化,僅僅變化每塊積木里面的內(nèi)容就可以。
以上內(nèi)容總結(jié)為如下幾點(diǎn):
更多 APP 測試解答及職業(yè)規(guī)劃問題,請掃描下面二維碼加群:(行內(nèi)10年大牛定時(shí)指導(dǎo))
http://wiki.jikexueyuan.com/project/geekdigest/images/1.png" alt="" />