李思佳 王茜 高筱竹
【摘 要】通過編寫自動化測試腳本,利用搭建好的自動化測試框架,對應(yīng)用進行自動化測試,并將測試結(jié)果反饋給測試人員。研究被測應(yīng)用程序的UI測試點,進行測試用例的編寫,使得測試用例能夠完全覆蓋被測應(yīng)用,通過腳本和用例對一款應(yīng)用進行自動化UI測試。
【關(guān)鍵詞】Appium;UI自動化測試;Maven;TestNG;數(shù)據(jù)驅(qū)動測試;Jenkins
中圖分類號: TP311.52 文獻標識碼: A 文章編號: 2095-2457(2018)06-0141-002
【Abstract】Through the preparation of programming automated test scripts,and make use of built automated test framework, make automated testing of the application,and give the test results to the testers. Study the UI test points of the tested APP,and write the test cases,making the test cases can completely cover the application under test,through an example of scripts and use cases for automated UI testing.
【Key words】Appium;UI Automation Testing;Maven;TestNG;Data Driven Testing;Jenkins
0 引言
如今移動應(yīng)用是一個很熱的話題,一個移動應(yīng)用離不開好的用戶體驗,所以UI測試已經(jīng)成為移動應(yīng)用測試的重中之重。 自動化 UI測試創(chuàng)建測試代碼來執(zhí)行測試任務(wù),各種測試任務(wù)覆蓋不同的使用場景,然后測試框架來運行測試任務(wù)。
Android基于UI層面的自動化測試工具,其主流測試方法主要有以下兩種。其一是Instrumentation,通過把測試代碼和應(yīng)用代碼 ,運行在同一個進程中,通過Java反射機制,來獲取當前窗口所有視圖,并查找到目標控件的屬性信息,計算出目標控件中心點坐標;再利用Instrument內(nèi)部接口,實現(xiàn)點擊操作;其代表有Robotium。另一種則是通過Android提供的各種服務(wù),來獲取當前窗口的視圖信息;其主要特點是:測試代碼和被測應(yīng)用各自運行在各自的進程內(nèi),相互獨立;其代表有 Ui Automator、Appium。
通過Appium搭建的UI自動化測試框架測試應(yīng)用的范圍更加廣泛,節(jié)約測試時間,提高測試效率。Appium是一款基于UIAutomator和UIAutomation兩者的UI自動化測試框架,能夠?qū)崿F(xiàn)針對不同平臺使用同一套API,帶來極大的便利。
1 總體技術(shù)方案
1.1 技術(shù)方案
針對各種測試框架工具的整合以達到構(gòu)建完整測試框架的目的。進一步研究被測APP的UI測試點,進行測試用例的編寫,使得測試用例能夠完全覆蓋被測應(yīng)用。達到只通過腳本和用例便能夠?qū)σ豢顟?yīng)用進行自動化UI測試的目的。用到的工具除了Appium,還有maven、TestNG、Git、Jenkins。
maven項目對象模型(POM),通過一小段描述信息來管理項目的構(gòu)建、報告和文檔的軟件項目管理工具。由于maven的缺省構(gòu)建規(guī)則有較高的可重用性,所以常常用兩三行 maven 構(gòu)建腳本構(gòu)建簡單的項目。在自動化項目中的使用maven的主要目的是幫助構(gòu)建自動化項目(jar包管理,編譯,執(zhí)行測試等),非常方便。
TestNG,即Testing Next Generation,下一代測試技術(shù),是一套根據(jù)JUnit和NUnit思想而構(gòu)建的利用注釋來強化測試功能的一個測試框架,即可以用來做單元測試,也可以用來做集成測試。
Git是一個開源的分布式版本控制系統(tǒng),用以有效、高速的處理從很小到非常大的項目版本管理,并且具有代碼托管的功能。
Jenkins是基于Java開發(fā)的一種持續(xù)集成工具,用于監(jiān)控持續(xù)重復(fù)的工作。
具體的設(shè)計思路如下圖圖1所示
1.2 技術(shù)路線
(1)搭建測試腳本的代碼框架
(2)在服務(wù)器上搭建git倉庫,并將測試代碼提交到服務(wù)器。
(3)在服務(wù)器上進行相應(yīng)的環(huán)境配置,安裝Jenkins,安裝郵件通知插件。
(4)整合git和Jenkins,使其能夠形成一個整體。
(5)進行被測APP的篩選,編寫測試腳本,利用測試框架進行測試。
2 關(guān)鍵技術(shù)
2.1 環(huán)境配置
Java環(huán)境
Maven環(huán)境配置:將已經(jīng)下載的maven完整jar包版的壓縮包進行解壓縮操作,同樣放入到Dev目錄下。將已經(jīng)下載好的maven壓縮包解壓縮并將解壓出來的文件夾放如d盤dev目錄下。接下來需要配置下MAVEN_HOME以及 bin目錄,找到Path變量;%MAVEN_HOME%\bin
保存之后,打開CMD,輸入mvn -v,如果返回以下內(nèi)容,證明maven的環(huán)境變量配置好了:
Appium: 將已經(jīng)下載的maven完整jar包版的壓縮包進行解壓縮操作,同樣放入到Dev目錄下。
·Android SDK
配置ANDROID_HOME
;%ANDROID_HOME%\tools
; %ANDROID_HOME%\platform-tools
保存之后,打開CMD,輸入adb 返回以下內(nèi)容表示環(huán)境變量配置完成
2.2 測試應(yīng)用程序
maven項目的根目錄下新建res/app目錄,將安卓測試APP放入此目錄:
啟動Appium Server
啟動Appium Server,用于接收和處理來自client的請求。雙擊已經(jīng)安裝好的Appium
如果出現(xiàn):
> info: Welcome to Appium v1.4.16 (REV ae6877eff263066b26328d457
bd285c0cc62430d)
> info: Appium REST http interface listener started on 127.0.0.1:4723
>info:[debug] Non-default server args: {"address":"127.0.0.1","logNoColors":true,"platformName":
Android","platformVersion":"19","automationName":"Appium"}
> info: Console LogLevel: debug
表明服務(wù)啟動成功。
鼠標右鍵執(zhí)行run as TestNG test,用例就開始執(zhí)行了
2.3 Appium實現(xiàn)思路框架
Appium 遵循著一種哲學,重點體現(xiàn)于以下4個需求:
·你無需為了自動化,而重新編譯或者修改你的應(yīng)用。
·你不必局限于某種語言或者框架或者平臺來書寫和運行測試代碼。
·一個移動自動化的框架不應(yīng)該在接口上重復(fù)造輪子。(移動自動化的接口應(yīng)該統(tǒng)一)。
源代碼必須開源
第三方框架封裝成一套API,WebDriver API.WebDriver(也就是"Selenium WebDriver")指定了客戶端到服務(wù)端的協(xié)議(JSON Wire Protocol)。使用這種客戶端-服務(wù)端的架構(gòu),我們可以使用任何語言來編寫客戶端,向服務(wù)端發(fā)送恰當?shù)腍TTP請求。目前已經(jīng)實現(xiàn)了大多數(shù)流行語言版本的客戶端,這意味著你可以使用任何測試套件或者測試框架??蛻舳藥炀褪呛唵蔚腍TTP客戶,可以以任何你喜歡的方式潛入你的代碼。換句話說,Appium和WebDriver 客戶端不是技術(shù)意義上的“測試框架”,而是“自動化庫”。你可以在你的測試環(huán)境中隨意使用這些自動化庫!
2.5 數(shù)據(jù)驅(qū)動測試簡介
數(shù)據(jù)驅(qū)動測試將測試腳本與測試數(shù)據(jù)放在同一個測試架構(gòu)中,該測試架構(gòu)提供可重用的測試邏輯,目的是減少測試維護工作量和改善測試覆蓋率。測試輸入數(shù)據(jù)和測試結(jié)果數(shù)據(jù)都會被存儲在一個或者 多個數(shù)據(jù)源、數(shù)據(jù)庫中,數(shù)據(jù)存儲格式和數(shù)據(jù)組織方式依賴于具體實現(xiàn)。測試數(shù)據(jù)與測試邏輯分離,當測試數(shù)據(jù)發(fā)生改變時,不會影響測試邏輯。同一個測試邏輯可以針對不同數(shù)據(jù)來進行測試,提高了測試邏輯的使用效率和可維護性。
3 總結(jié)
3.1 項目成果
本項目的主要目標是通過編寫自動化測試腳本,利用搭建好的自動化測試框架,對應(yīng)用進行自動化測試,并將測試結(jié)果反饋給測試人員。由此減少測試工作人員對UI測試的工作量,提高測試人員的工作效率。
在本項目中的一個重要思想是實現(xiàn)持續(xù)集成。UI自動化測試是自動化測試中的一個重點,也是一個難點,因為一款應(yīng)用的UI在項目開發(fā)階段時時刻刻都在進行變化。利用持續(xù)集成思想不僅可以很好的應(yīng)對UI變化,而且有利于團隊的分工合作,提高團隊的工作效率。
3.2 后期改進
基于Appium的UI自動化測試框架在實現(xiàn)過程中電腦運行測試代碼所需要的環(huán)境問題有待進一步解決,能夠成功運行測試框架的電腦只實現(xiàn)了一臺,其它會出現(xiàn)意想不到的問題。目前僅僅實現(xiàn)在控制臺輸出測試過程以及結(jié)果的日志信息,在數(shù)據(jù)驅(qū)動方面存在的困難是利用excel表格進行存儲數(shù)據(jù)來讀取以及將測試結(jié)果等信息輸出保存為excel表格或者輸出html網(wǎng)頁結(jié)果,這些還需要進一步研究實現(xiàn)。
3.3 未來期望
希望后續(xù)研究人員能實現(xiàn)如何將數(shù)據(jù)存儲于excel表格中被調(diào)用實現(xiàn)數(shù)據(jù)與測試分離,以及如何將結(jié)果存儲在excel表格中實現(xiàn)結(jié)果清晰明朗化的反饋。
【參考文獻】
[1]余盈寬、高守瑋、崔徐佳.基于關(guān)鍵字的安卓UI自動化測試的設(shè)計[D].工業(yè)控制計算機2015.
[2]徐凱田.UI自動化測試驅(qū)動的軟件開發(fā)方法研究[J].科技視界2015.
[3]陳昊.Android手機自動化測試系統(tǒng)的設(shè)計與實現(xiàn)[D].西安電子科技大學2014.
[4]呂茜.基于WebDriver和TestNG的網(wǎng)頁自動化測試方法[J]. 軟件2016.
[5]陳學亮.基于云的Andriod應(yīng)用自動化測試框架研究[J].中國電信股份有限公司廣東研究院2017.
[6]Ashwaq A.Alotaibi、Rizwan J. Qureshi.Novel Framework for Automation Testing of Mobile Applications using Appium[J].MECS Press 2017
[7]Pressman E、Huberman M.Pithiness in plants:I.The effect of mechanical perturbation and the involvement of ethylene in petiole pithiness in celery.Biology DepartmentWake Forest UniversityWinston-SalemNorth Carolina 1984.