李全 東華大學(xué)信息科學(xué)與技術(shù)學(xué)院
基于Robot Framework和Appium的APP自動化測試框架
李全 東華大學(xué)信息科學(xué)與技術(shù)學(xué)院
基于Robot Framework和Appium設(shè)計出一種app自動化測試框架,該框架實現(xiàn)了對多個安卓手機設(shè)備進行并發(fā)功能測試。Robot Framework框架負(fù)責(zé)編寫測試用例,編寫shell腳本為每個手機啟動Appium服務(wù),Appium負(fù)責(zé)啟動服務(wù)連接手機,發(fā)送用例編寫的指令到手機同時接收執(zhí)行結(jié)果。同時,以某app為例,驗證本框架的適用性。
robot Framework Appium APP自動化測試
隨著移動互聯(lián)的迅速發(fā)展,手機越來越離不開人們的生活,日益豐富的手機APP幫助人們實現(xiàn)衣食住行的各個方面。各個公司都在大力發(fā)展無線端業(yè)務(wù),APP也是每個公司必備的產(chǎn)品。安卓手機是人們常用的,市場占有率最高,品牌最豐富的手機。所以公司開發(fā)一款A(yù)PP勢必要對APP進行兼容性測試,傳統(tǒng)的手工測試在測試多款手機時就非常的枯燥和浪費人力,這也是目前階段必須解決的問題。
根據(jù)當(dāng)前的測試現(xiàn)狀,本文以某app為例,設(shè)計出一種基于Robot Framework和Appium的APP自動化測試框架,并設(shè)計實現(xiàn)對手機設(shè)備進行并發(fā)測試,減少人力成本和重復(fù)性工作。
Appium是開源的,支持Android和IOS,適用于Native App、Hybird App、Web App等APP類型,不需要重新編譯APP,擴展了WebDriver,封裝了Android和IOS自動化方法的框架。它支持很多語言來編寫測試腳本,Java、Javascript、PHP、Python、C#、Ruby等主流語言。
它是Client/Server架構(gòu),運行的時候Server端會監(jiān)聽Client端發(fā)過來的命令,翻譯這些命令發(fā)送給移動設(shè)備或模擬器,然后移動設(shè)備或模擬器做出響應(yīng)的反應(yīng)。正是因為這種架構(gòu),所以Client可以使用Appium client libraries多種語言的測試腳本,而且Server端完全可以部署在服務(wù)器上,甚至云服務(wù)器。每個Client連接到Server以后都會有一個Session ID,而且Client發(fā)送命令到Server端都需要這個Session ID,因為這個seesion id代表了你所打開的瀏覽器或者是移動設(shè)備的模擬器。所以你甚至可以打開N個Session,同時測試不同的設(shè)備或模擬器。
Appium是擴展Webdriver,所以也可以使用Selenium Grid來實現(xiàn)并發(fā)測試。
每個設(shè)備啟動相應(yīng)的Appium服務(wù),所以在服務(wù)器識別到設(shè)備時會給該啟動相應(yīng)的Appium服務(wù),注冊到hub上,這樣在執(zhí)行用例時,hub會隨機分配給所有空閑設(shè)備測試用例,并會自動回收返回結(jié)果,驗證測試用例步驟是否通過。具體實現(xiàn)步驟如下:
①下載selenium-server-standalone-xxx.jar的jar包,然后命令行執(zhí)行相應(yīng)的Java命令啟動hub server,如:java -jar selenium-server-standalone-3.0.1.jar -port 4444 -role hu–timeout 120。
②每個設(shè)備編寫相應(yīng)的JSON格式的配置文件,其中deviceName可以通過adb devices命令查看,每個設(shè)備的port不能相同。
③執(zhí)行Appium的命令啟動設(shè)備client server,如appium -p 4725 -U Device1UDID --nodeconfig path oXXX1.json,其中-p后面為你啟動appium服務(wù)的端口號 -U后面為你設(shè)備的UDID, --nodeconfig 后面為第三步編輯的json文件的路徑。這樣client就注冊到hub上。
④瀏覽器輸入http://localhost:4444/grid/console就能看到你連接了多少個設(shè)備。這樣就完成了為設(shè)備啟動selenium Grid,注冊設(shè)備client server到hub上,編寫用例時remote_url只需要填hub的地址即可。
為了不每次手動輸入這些命令,本設(shè)計采用編寫shell腳本的形式啟動以上所有的服務(wù)。
本文基于Robot Framework對APP進行自動化并發(fā)測試的實現(xiàn)。
3.1 自動化腳本的編寫
通過Robot Framework Ride引入AppiumLibrary關(guān)鍵字庫即可編寫測試腳本,該庫繼承了Appium所有底層API編寫的關(guān)鍵字,在腳本執(zhí)行時可以被Appium sever所識別并執(zhí)行相應(yīng)指令。在打開app關(guān)鍵字open application中的remote_url參數(shù)中需填寫第二章所述的hub地址。
Robot Framework自帶的pybot命令運行測試代碼不能起到并行執(zhí)行的結(jié)果,所以要引入pabot。pabot為Robot Framwork擴展執(zhí)行方式,實現(xiàn)方式為安裝pabot,運行pabot命令,如:pabot--processes 10 --outputdir path/to/results path/ to/parallelSuits,其中--processes 10,即起10個線程運行,所以processes的值<=我們的設(shè)備數(shù),--outputdir path/to/results,指定我們運行結(jié)果存放的路徑,在該路徑下回生成相應(yīng)的測試結(jié)果,path/to/parallelSuits,指定運行suites的路徑,對于兼容性測試,有幾個設(shè)備,復(fù)制幾個測試腳本文件即可。
本文基于Robot Framework和Appium提出了一種App自動化測試框架,并以某app為例,進行了框架實現(xiàn)和適用性驗證。
框架以Robot Framework為腳本編寫和執(zhí)行層,引入AppiumLibrary進行腳本開發(fā),同時引入Appium和selenium Grid實現(xiàn)了對手機設(shè)備的統(tǒng)一調(diào)度,引入Robot Framework擴展執(zhí)行方式pabot作為并發(fā)執(zhí)行命令,完成了對多手機設(shè)備的并發(fā)執(zhí)行,減少了重復(fù)性工作和人力成本的浪費,節(jié)約了軟件開發(fā)和測試周期。
在未來的研究中,可以將并發(fā)測試植入到軟件開發(fā)全周期中,在app打包完成后自動觸發(fā)相應(yīng)的測試腳本,執(zhí)行測試,測試人員只要關(guān)注新的功能點的測試即可。