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