亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Android自動化測試工具鏈的設(shè)計與實現(xiàn)

        2018-11-30 01:46:54蔡維婷黎偉健
        計算機應(yīng)用與軟件 2018年11期
        關(guān)鍵詞:功能測試開發(fā)人員代碼

        蔡維婷 黎偉健 范 敏

        (中移互聯(lián)網(wǎng)有限公司品質(zhì)管理部 廣東 廣州 510640)

        0 引 言

        由于產(chǎn)品敏捷開發(fā)和版本快速迭代的需要,在移動互聯(lián)網(wǎng)應(yīng)用的開發(fā)過程中,必然存在大量重復(fù)的測試工作。目前,已有多種支持產(chǎn)品開發(fā)的測試工具,但存在測試流程不夠連貫、測試工具不相關(guān)聯(lián)的問題。因此,有必要在產(chǎn)品持續(xù)集成的基礎(chǔ)上實施進一步的自動化措施,以系統(tǒng)化方式管理產(chǎn)品開發(fā)過程,提高產(chǎn)品開發(fā)質(zhì)量和效率。本文以Android客戶端開發(fā)為例,闡述一種產(chǎn)品開發(fā)過程中“一鍵式”自動化測試工具鏈的設(shè)計和解決方案。

        1 概 述

        與產(chǎn)品開發(fā)相關(guān)的測試一般包括單元測試、代碼規(guī)范檢查和功能測試等[1-2]。在持續(xù)集成的開發(fā)環(huán)境中,部署自動化測試流程是保障開發(fā)質(zhì)量和效率的重要措施[3-4]。對于Android應(yīng)用開發(fā),業(yè)界已有開源的持續(xù)集成平臺[5-6]、開發(fā)構(gòu)建工具[7]和自動化測試框架[8-10]。開發(fā)人員可基于JUnit單元測試框架驗證代碼內(nèi)部邏輯[11-12],使用Findbugs、Checkstyle、PMD等代碼規(guī)范檢查工具評審代碼質(zhì)量[13],運用自動化測試框架對產(chǎn)品功能進行黑盒測試[14-15]。

        開發(fā)過程需要經(jīng)過反復(fù)的測試驗證。然而,目前所使用的測試工具之間相互獨立,測試環(huán)節(jié)仍然需要由開發(fā)人員控制操作,對開發(fā)效率而言存在一定的局限性;并且,代碼質(zhì)量由開發(fā)人員自行把控,代碼提交前沒有經(jīng)過統(tǒng)一、規(guī)范的自動化檢測流程,不利于版本的穩(wěn)定迭代。為此,本文提出一種應(yīng)用于開發(fā)過程的自動化測試工具鏈,便于開發(fā)人員在開發(fā)過程中實現(xiàn)多項測試需求。開發(fā)人員只需一鍵觸發(fā)即可在持續(xù)集成的開發(fā)環(huán)境下,完成項目構(gòu)建、單元測試、靜態(tài)代碼檢查、功能測試、版本管理等功能。

        2 方案設(shè)計

        2.1 架構(gòu)設(shè)計

        本文提出的測試工具鏈系統(tǒng)主要由以下各部分構(gòu)成:

        (1) 持續(xù)集成平臺(Jenkins):系統(tǒng)核心,控制自動化流程的執(zhí)行;

        (2) 構(gòu)建工具(Ant):在Jenkins平臺執(zhí)行Ant指令集,調(diào)用代碼編譯、單元測試、代碼規(guī)范檢查、功能測試等構(gòu)建任務(wù)腳本;

        (3) 單元測試框架(JUnit):源代碼中嵌入的測試用例,被Ant構(gòu)建工具調(diào)用;

        (4) 代碼規(guī)范檢查插件(Fingbugs/Findsecbugs、Checkstyle、PMD):被Ant構(gòu)建工具調(diào)用,以檢查源代碼與設(shè)定代碼規(guī)范間的差異;

        (5) 自動化測試框架(Robotium):使用其Solo類創(chuàng)建的自動化測試應(yīng)用,被Ant指令調(diào)用執(zhí)行;

        (6) 版本管理工具(SVN):包括SVN服務(wù)器VisualSVN Server,用于分配版本倉庫和配置用戶權(quán)限;以及SVN客戶端TortoiseSVN,用于開發(fā)版本的更新和同步。

        系統(tǒng)架構(gòu)如圖1所示。

        圖1 產(chǎn)品開發(fā)過程自動化測試系統(tǒng)架構(gòu)

        2.2 流程設(shè)計

        當(dāng)Android開發(fā)人員將代碼提交至SVN服務(wù)器,系統(tǒng)即以自動化方式執(zhí)行測試流程:SVN服務(wù)器即時遠(yuǎn)程觸發(fā)Jenkins持續(xù)集成平臺對開發(fā)項目的構(gòu)建;通過調(diào)用Ant工具進行項目代碼編譯,生成開發(fā)應(yīng)用;調(diào)用JUnit單元測試及Fingbugs/Checkstyle/PMD代碼規(guī)范檢查工具,生成檢測報告;構(gòu)建成功后,平臺將開發(fā)代碼及代碼檢測結(jié)果增量提交至SVN服務(wù)器,并將被測應(yīng)用部署在測試環(huán)境;同時激活已開啟的手機模擬器或測試終端,啟動關(guān)鍵功能的Robotium自動化測試,并將測試代碼及功能測試結(jié)果增量提交至SVN服務(wù)器。

        自動化流程以任務(wù)流方式部署在Jenkins平臺,分別完成代碼檢測及其結(jié)果入庫、功能測試及其結(jié)果入庫四項任務(wù),流程如圖2所示。其中:將代碼檢測結(jié)果提交任務(wù)和功能測試任務(wù)設(shè)定為代碼檢測項目的下游任務(wù),即當(dāng)代碼檢測任務(wù)成功完成后,將并行觸發(fā)代碼檢測結(jié)果提交和功能測試;將功能測試結(jié)果提交任務(wù)設(shè)定為功能測試任務(wù)的下游任務(wù)。

        圖2 自動化測試工具鏈流程

        (1) 代碼檢測任務(wù):當(dāng)開發(fā)人員提交代碼更新,代碼檢測任務(wù)被遠(yuǎn)程觸發(fā)。首先檢測流程狀態(tài)標(biāo)識,若該流程當(dāng)前有被其他開發(fā)人員提交的任務(wù)在運行,則將新觸發(fā)的任務(wù)置于等待狀態(tài),以避免運行相同的流程造成Jenkins工作空間沖突。當(dāng)輪詢檢測到流程處于可執(zhí)行狀態(tài)時立即依次執(zhí)行代碼構(gòu)建、單元測試和代碼掃描。如果構(gòu)建失敗,Jenkins系統(tǒng)發(fā)送郵件通知開發(fā)人員,流程結(jié)束;如果構(gòu)建成功,將觸發(fā)代碼檢測結(jié)果提交入庫,并觸發(fā)自動化測試任務(wù)。代碼檢測任務(wù)使用參數(shù)方式將構(gòu)建號分別傳遞給代碼檢測提交和功能測試任務(wù),以便為代碼檢測任務(wù)的構(gòu)建日志入庫做準(zhǔn)備。

        (2) 代碼檢測結(jié)果提交:當(dāng)代碼檢測任務(wù)完成后,開發(fā)代碼及其檢測結(jié)果將被提交入庫。根據(jù)Jenkins日志存儲路徑以及從上游代碼檢測任務(wù)傳遞的構(gòu)建號參數(shù)作為子目錄,獲取任務(wù)構(gòu)建日志。將工作空間中的代碼、生成的報告、構(gòu)建日志等內(nèi)容增量提交至SVN,以開發(fā)項目名稱及構(gòu)建號作為提交備注。

        (3) 功能測試任務(wù):當(dāng)代碼檢測任務(wù)完成后,與代碼檢測結(jié)果提交任務(wù)并行的功能測試任務(wù)被觸發(fā)。啟動Android測試設(shè)備或模擬器,安裝被測應(yīng)用,開始自動化功能測試。若檢測到測試設(shè)備未能正常連接,Jenkins系統(tǒng)發(fā)送功能測試失敗的郵件通知,流程結(jié)束。功能測試任務(wù)使用參數(shù)方式將構(gòu)建號傳遞給功能測試結(jié)果提交任務(wù),以便為功能測試任務(wù)的構(gòu)建日志入庫做準(zhǔn)備。

        (4) 功能測試結(jié)果提交:當(dāng)功能測試任務(wù)完成后,測試結(jié)果被提交入庫。根據(jù)Jenkins日志存儲路徑以及從上游功能測試任務(wù)傳遞的構(gòu)建號參數(shù)作為子目錄,獲取任務(wù)執(zhí)行日志。將工作空間中的功能測試代碼、生成的測試報告、運行日志等內(nèi)容增量提交至SVN服務(wù)器,以自動化測試項目名稱及構(gòu)建號作為提交備注。將流程狀態(tài)標(biāo)識設(shè)置為結(jié)束狀態(tài),流程結(jié)束。系統(tǒng)最后將流程結(jié)束郵件發(fā)送給開發(fā)人員。

        3 方案部署

        本方案的自動化測試工具鏈系統(tǒng)實現(xiàn)Jenkins+ SVN+Ant+JUnit+Fingbugs(Findsecbugs)/Checkstyle/PMD+Robotium測試平臺和工具的連接,連接圖如圖3所示。工具鏈經(jīng)部署連接后,將在服務(wù)器后臺運行,無需人工干預(yù)。開發(fā)人員可通過Jenkins平臺實時查看流程運行狀態(tài),也可在收到系統(tǒng)發(fā)出的測試結(jié)束郵件通知后查看測試結(jié)果。

        圖3 工具鏈連接圖

        3.1 本地代碼與SVN服務(wù)器間的連接

        開發(fā)人員通過TortoiseSVN客戶端,將本地開發(fā)項目的遠(yuǎn)程路徑定位至VisualSVN服務(wù)器,用于開發(fā)代碼的同步和提交。

        3.2 SVN服務(wù)器發(fā)起與Jenkins平臺間的連接

        在SVN服務(wù)器的開發(fā)項目存儲庫上配置post-commit鉤子腳本,指明當(dāng)有代碼提交時將發(fā)起Jenkins平臺上工具鏈項目對應(yīng)鏈接的訪問,如http://Jenkins_IP_Address:Port/job/Project/build?token=token_id。在Jenkins平臺的工具鏈項目配置中,設(shè)定以遠(yuǎn)程觸發(fā)作為項目構(gòu)建條件,設(shè)置身份驗證令牌,使SVN服務(wù)器的鉤子腳本可以訪問Jenkins平臺工具鏈項目的構(gòu)建執(zhí)行頁面,以啟動對代碼提交任務(wù)的自動化測試流程。

        3.3 Jenkins平臺與Ant構(gòu)建工具間的連接

        Jenkins平臺對自動化流程中各任務(wù)的執(zhí)行主要以批處理命令的方式調(diào)用Ant指令集腳本。一般情況下,構(gòu)建腳本文件build.xml位于開發(fā)項目的根目錄,為了使自動化流程覆蓋代碼檢測功能,對Jenkins平臺以及Android SDK安裝路徑下的build.xml文件作以下改動:

        (1) 在Jenkins平臺項目路徑下部署開發(fā)項目的構(gòu)建文件(命名為build_android.xml),作為通用的項目構(gòu)建腳本文件。在build_android.xml文件初始的項目定義部分,聲明項目在Jenkins平臺工作空間路徑basedir及Android SDK的安裝路徑sdk.dir。

        (2) 在Android SDK安裝目錄下的Ant構(gòu)建文件 oolsantuild_ant.xml中,在輸入、輸出路徑部分各子目錄前添加basedir,使Ant構(gòu)建腳本能自動適配到需要執(zhí)行構(gòu)建的項目路徑,即:

        補充為:

        (3) 在Jenkins控制臺任務(wù)腳本的Ant命令行中,添加構(gòu)建文件參數(shù)“-buildfile”及構(gòu)建文件所在路徑,使Ant工具調(diào)用指定的腳本文件執(zhí)行構(gòu)建。

        3.4 Ant構(gòu)建與JUnit單元測試框架間的連接

        在構(gòu)建腳本文件build_android.xml中,增加對JUnit單元測試子任務(wù)junit的定義,說明Android SDK中JUnit插件的路徑,指定所生成檢測報告的文件類型。Jenkins控制臺在完成項目編譯后,通過使用Ant工具執(zhí)行“ant junit”命令,即可執(zhí)行代碼單元測試,并生成測試報告。截取部分代碼如下:

        location="${sdk.dir} oolslibjunit.jar"/>

        3.5 Ant構(gòu)建與代碼規(guī)范檢查工具間的連接

        將代碼規(guī)范檢查插件Findbugs(Findsecbugs)、Checkstyle和PMD置于Jenkins平臺Ant工具庫目錄下。在構(gòu)建腳本文件build_android.xml中,分別添加各代碼規(guī)范檢查插件對應(yīng)子任務(wù)findbugs(包括fingsecbugs)、checkstyle和pmd的定義,說明插件的路徑及其classname、代碼規(guī)范集文件路徑以及需要生成測試報告的文件類型。Jenkins控制臺在完成項目編譯后,通過使用Ant工具執(zhí)行“ant findbugs checkstyle pmd”命令,即可執(zhí)行代碼規(guī)范檢查,并生成相應(yīng)的測試報告。截取部分代碼如下:

        dir= "${ant.library.dir}/findbugs-3.0.1/lib">

        classname="edu.umd.cs.findbugs.anttask.FindBugsTask"/>

        outputFile="${findbugs_result_folder}/findbugs_result.xml"/>

        path="${sdk.dir}platformsandroid-21android.jar"/>

        classpathref="checkstyle.path"

        classname="com.puppycrawl.tools.checkstyle.ant.CheckstyleAntTask"/>

        dir="${ant.library.dir}/pmd-bin-4.2.6/lib"/>

        classname="net.sourceforge.pmd.ant.PMDTask"

        classpathref="pmd.classpath"/>

        3.6 Jenkins平臺與Robotium測試框架間的連接

        當(dāng)完成代碼構(gòu)建和代碼規(guī)范檢測任務(wù)后,工具鏈進入自動化功能測試環(huán)節(jié)。測試程序由基于Robotium框架的測試項目產(chǎn)生。采用Robotium的主要原因是相比其他測試框架,Robotium在調(diào)用過程中,包括啟動和運行可以完全不用人工干預(yù),有利于在自動化工具鏈中使用。Jenkins控制臺通過“adb devices”命令驗證存在已連接的測試手機或模擬器,對其發(fā)送keyevent指令進行測試終端的解鎖激活。為了獲取在終端上運行的測試日志和結(jié)果,Jenkins控制臺通過執(zhí)行“adb logcat-d”指令,使運行在終端上的測試數(shù)據(jù)同步傳輸?shù)絁enkins平臺上。以Robotium測試項目設(shè)定的關(guān)鍵字作為篩選條件,對數(shù)據(jù)作過濾處理,將測試日志和結(jié)果在Jenkins平臺上予以展示和保存。

        3.7 Ant構(gòu)建與Robotium自動化測試框架間的連接

        在Robotium測試代碼構(gòu)建文件build_robotium.xml初始的項目定義部分,聲明項目在Jenkins平臺工作空間路徑basedir以及Android SDK的安裝路徑sdk.dir,使構(gòu)建腳本通用于開發(fā)項目不同開發(fā)人員的使用。測試代碼編譯后生成Test.apk。Jenkins控制臺使用Ant工具運行“ant uninstall installd”,將被測應(yīng)用App.apk重新安裝在真機或模擬器上。在Jenkins控制臺運行Ant工具命令“ant uninstall clean debug install test”,依次生成和安裝Test.apk,并運行Robotium自動化測試。

        3.8 Jenkins平臺向SVN服務(wù)器發(fā)起提交的連接

        測試任務(wù)執(zhí)行完畢后,Jenkins平臺向SVN服務(wù)器發(fā)起對增量代碼、日志和測試結(jié)果的提交。Jenkins平臺首先調(diào)用“svn update”命令使項目空間與SVN服務(wù)器同步;調(diào)用“svn delete”和“svn add”命令發(fā)現(xiàn)在工具鏈運行過程中產(chǎn)生的文件變動;通過“svn status”命令檢測提交狀態(tài),如有代碼沖突,由Jenkins平臺中斷自動化流程,系統(tǒng)發(fā)出告警郵件;調(diào)用“svn commit”命令進行代碼提交,使用“-m”參數(shù)注明提交備注。

        4 實施驗證

        在已部署自動化測試工具鏈的系統(tǒng)上,對一個Android開發(fā)應(yīng)用的開發(fā)過程實施自動化測試流程。經(jīng)實踐驗證,當(dāng)開發(fā)人員向SVN服務(wù)器提交代碼更新,立即觸發(fā)Jenkins平臺運行自動化測試,包括代碼構(gòu)建、單元測試、代碼規(guī)范檢查、功能測試和版本控制,并輸出運行日志和測試報告。Jenkins平臺按任務(wù)腳本設(shè)定,在流程運行過程中實時顯示和記錄自動化測試的運行信息。截取部分運行結(jié)果如下:

        Total time: 30 seconds

        [CHECKSTYLE] checkstyle_report.xml with 117 unique warnings and 0 duplicates.

        [FINDBUGS] findbugs_result.xml with 8 unique warnings and 0 duplicates.

        [PMD] pmd_result.xml with 2 unique warnings and 0 duplicates.

        Triggering a new build of robotiumTest

        Email was triggered for: Always

        Finished: SUCCESS

        當(dāng)工具鏈運行出現(xiàn)異常情況,如測試終端未連接、代碼編譯構(gòu)建失敗、代碼提交發(fā)現(xiàn)沖突等,系統(tǒng)向開發(fā)人員發(fā)送運行失敗通知郵件,提供錯誤日志信息。當(dāng)測試任務(wù)遇到異常超時,系統(tǒng)中的超時保護機制能中止當(dāng)前流程,并由Jenkins平臺發(fā)送告警郵件通知開發(fā)人員,提供出錯信息。當(dāng)測試正常運行結(jié)束后,系統(tǒng)向開發(fā)人員發(fā)送郵件,說明工具鏈對應(yīng)的開發(fā)項目名稱、系統(tǒng)鏈接、本次測試序號和最終運行結(jié)果。

        最終生成的測試報告,含文本和XML格式,包括JUnit單元檢測報告、Fingbugs(Findsecbugs)、Checkstyle、PMD靜態(tài)代碼掃描檢測報告以及自動化功能測試報告。其中,XML格式的代碼檢測報告可在Jenkins平臺以圖表方式展示,包含代碼缺陷描述、代碼行定位和代碼更替參考。截取Checkstyle檢測報告如圖4所示。

        圖4 Checkstyle檢測報告

        對于流程主要環(huán)節(jié),工具鏈的測試結(jié)果提交子任務(wù)將自動保存測試運行日志,以便追溯版本測試信息。日志提交結(jié)果截圖如圖5所示。

        圖5 測試日志提交記錄

        為避免因項目并發(fā)提交造成的沖突,自動化流程中設(shè)置的運行狀態(tài)保護機制能使被觸發(fā)的測試任務(wù)根據(jù)流程當(dāng)前的狀態(tài)被啟動運行或被置于隊列中等待。因此,部署的工具鏈系統(tǒng)可用于開發(fā)團隊的開發(fā)人員共同使用。同樣,工具鏈也可用于多個開發(fā)項目的自動化測試,只要SVN服務(wù)器上的開發(fā)項目和Jenkins平臺上部署的自動化流程對應(yīng),以便調(diào)用相應(yīng)的工具鏈。

        5 結(jié) 語

        本文提出了一種Android應(yīng)用開發(fā)中自動化測試工具鏈的解決方案。運用自動化流程實現(xiàn)產(chǎn)品持續(xù)集成過程中所執(zhí)行的代碼構(gòu)建、單元測試、代碼規(guī)范檢查和功能測試,并配備版本控制、日志管理等功能,有助于系統(tǒng)管理開發(fā)過程,規(guī)范代碼質(zhì)量,提高產(chǎn)品開發(fā)和測試效率。

        猜你喜歡
        功能測試開發(fā)人員代碼
        某內(nèi)花鍵等速傳動軸八功能測試夾具設(shè)計
        Semtech發(fā)布LoRa Basics 以加速物聯(lián)網(wǎng)應(yīng)用
        創(chuàng)世代碼
        動漫星空(2018年11期)2018-10-26 02:24:02
        創(chuàng)世代碼
        動漫星空(2018年2期)2018-10-26 02:11:00
        創(chuàng)世代碼
        動漫星空(2018年9期)2018-10-26 01:16:48
        創(chuàng)世代碼
        動漫星空(2018年5期)2018-10-26 01:15:02
        汽車儀表HMI功能測試介紹
        人事薪資管理系統(tǒng)軟件測試方案研究
        民用飛機機載電子硬件測試策略研究
        科技視界(2015年27期)2015-10-08 12:34:04
        讓W(xué)indows 10進入開發(fā)者模式
        電腦迷(2015年12期)2015-04-29 23:22:51
        国产专区一线二线三线码| 日本国产在线一区二区| 日本不卡一区二区三区在线| 国产精品亚洲av高清二区| 亚洲人成影院在线无码按摩店| 久久久久久免费毛片精品| 久久综合视频网站| 亚洲国产精品夜男人天堂| 日本一区二区三区区视频| 综合色就爱涩涩涩综合婷婷 | 玩弄放荡人妻少妇系列| 98在线视频噜噜噜国产| 久久精品国产亚洲av成人无人区| 亚洲字幕中文综合久久| 99国产精品人妻噜啊噜| 亚洲人成电影在线无码| 日本久久一区二区三区高清| 国产激情一区二区三区在线| 日本最大色倩网站www| 日韩中文网| 日韩精品有码中文字幕| 天堂av在线美女免费| 熟女熟妇伦av网站| 亚洲国产精品久久九色| 开心五月激情五月天天五月五月天| 日韩内射美女片在线观看网站| 免费无码毛片一区二区三区a片| 色噜噜狠狠色综合欧洲| 国产91精品一区二区麻豆亚洲| 亚洲成av人在线播放无码 | 国产91中文| 国产av一区二区三区国产福利 | 麻豆精品久久久久久久99蜜桃 | 国产日产免费在线视频| а天堂中文地址在线| 中国凸偷窥xxxx自由视频| 国产在线拍偷自拍偷精品| 亚洲av调教捆绑一区二区三区 | 怡红院免费的全部视频| 白丝美女被狂躁免费视频网站| 日本视频一区二区三区在线|