目錄
前言:
一、方法介紹
1、UI Automator
3、shell腳本
二、shell腳本實現自動化測試原理和步驟
1、?原理
2、步驟
三、shell自動化測試實例
前言:
? ? ? ?在開發項目的過程中,我們將某個階段的需求完成并且提測,通常,在測試工程師更細致的測試之下,會測試出一些我們沒有考慮周全而出現的代碼邏輯問題或自測沒有測出來的交互問題,有些問題可以直接通過打印定位,但是對于一些偶現,且在當前打印中并不能快速定位的問題,那我們接下來的調試步驟一般是在相關代碼里添加一些自己的新的打印,然后根據測試工程師描述的步驟進行操作,然后再觀察打印,重復這兩個步驟之后一步步debug出有問題的代碼段,由于這個問題是偶現的,若概率非常小,則需要我們不斷的手動點擊屏幕,做大量的重復的動作去復現測試工程師描述的問題,該過程相當費“體力”,此時我們會想,既然該操作動步驟是重復的,那我們有沒有方法進行自動化測試呢。
? ? ? ? 那么接下來我重點介紹一種自動測試的方法,shell腳本自動化測試。
一、方法介紹
?????要實現自動化測試,方法有很多,例如使用原生框架UI Automator、使用第三方開源工具Appium、以及我提到的shell腳本自動化測試等等。接下來,對于前兩種方法我只是做一個簡單的介紹,第三種自動化測試方法我會著重說明。
1、UI Automator
? ? ? UI Automator 是一個適用于跨應用功能界面的界面測試框架,對系統和已安裝的應用進行測試。借助 UI Automator API 在設備上測試可見元素,而無論 Activity 位于哪里。因此你可以執行打開“設置”菜單等操作或測試設備中的應用。你的測試可以通過描述詞查找界面組件,例如該組件中顯示的文字,或內容說明等。
??類型:官方原生測試框架。
??用途:跨應用UI自動化測試,支持操作系統級界面元素(如通知欄、設置菜單)。
??特點:無需源碼,提供API定位控件,支持多設備并行測試。
??工具鏈:UI Automator Viewer用于控件層級分析。
??缺點:對H5支持有限。
2、Appium
Appium是開源的、跨平臺的測試自動化測試框架,主要用于測試移動端應用,Appium支持模擬器和真機上的原生應用、混合應用、Web應用。Appium使用WebDriver的JSON wire協議來驅動Apple系統的UI Automator庫、Android系統的UI Automator框架,因Appium集成了Selendroid框架,所以Appium支持比較老版本的Android,Appium支持Selenium WebDriver支持的所有語言(Java、Python、JavaScript、Objective-C、PHP、Ruby、C#、Clojure、Perl等)。
??用途:跨平臺端到端測試,支持原生、混合和Web應用。
??優勢: ?
1)多語言支持(Python、Java等),腳本復用性高。
2)無需修改應用代碼,通過Desired Capabilities配置設備參數。
??典型操作:元素定位(ID/XPath)、滑動、輸入文本。
3、shell腳本
相比于以上提到的兩個方法,該方法較為輕量化,但可以測試的功能較為有限,優勢是對于一些簡單的測試,例如簡單的重復點擊屏幕幾個固定坐標的測試,使用該方法方便快捷,輕量化,不需要配置較為繁雜的壞境,且代碼量非常小。
??
??用途:測試一些較為簡單的測試項,例如重復點擊屏幕的固定坐標等。
??優勢:輕量化,系統級別測試,代碼編寫簡單,不需要配置復雜的環境等。
??缺點:不能實現較為復雜的測試。
二、shell腳本實現自動化測試原理和步驟
1、?原理
? ? ? Shell自動化測試實際上就是將我們平時adb調試時使用的各種命令組合起來,組成一個可以滿足我們測試要求的測試文本,由于我們的測試需求通常是做大量重復操作復現問題,故該腳本通常包含循環語句。測試的時候運行該腳本即可實現自動化測試。
2、步驟
(1)將我們的測試邏輯通過shell語句組合起來,形成一個文本,例如myTest.sh;
(2)adb或者串口連接我們的設備,將該shell文本復制到我們的設備的某個路徑下,例如etc/myTest.sh;
(3)使用執行命令使該腳本執行起來(./etc/myTest.sh)。
三、shell自動化測試實例
以下是自動化測試腳本實例,該腳本的功能是打開應用一和應用二,且將它們進行分屏,重復200次。
- #!/system/bin/sh
- sleep?1
- i=1
- while?[?$(($i))?-le?200?]
- do
- i=$(($i+1))
- #?最近任務
- input?tap?3811?1087? ???//點擊坐標(3811,1087)?
- sleep?0.5
- input?tap?3796?1141
- sleep?0.5
- #?kill?all_pid
- input?tap?3615?1483? ? ? ?//點擊坐標(3615,1483)?
- sleep?0.5
- #?init
- input?keyevent?HOME
- sleep?2
- #?進入側邊欄
- input?tap?3811?1087
- sleep?0.5
- input?tap?3796?1141
- sleep?0.5
- #?打開應用分屏
- input?tap?3238?702
- sleep?0.5
- #?選擇應用一
- input?tap?2627?738
- sleep?0.5
- #?選擇應用二
- input?tap?2265?925
- sleep?0.5
- #?確認開啟進入分屏
- input?tap?2643?1178
- sleep?6
- done
部分代碼語句解析:
while?[?$(($i))?-le?200?] ??: 循環測試兩百次
input?tap?3811?1087?????: 點擊屏幕坐標(3811,1087)
input?keyevent?HOME????: 點擊home按鍵,回到主頁