999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Android自動化測試工具鏈的設計與實現

2018-11-30 01:46:54蔡維婷黎偉健
計算機應用與軟件 2018年11期
關鍵詞:檢測

蔡維婷 黎偉健 范 敏

(中移互聯網有限公司品質管理部 廣東 廣州 510640)

0 引 言

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

1 概 述

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

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

2 方案設計

2.1 架構設計

本文提出的測試工具鏈系統主要由以下各部分構成:

(1) 持續集成平臺(Jenkins):系統核心,控制自動化流程的執行;

(2) 構建工具(Ant):在Jenkins平臺執行Ant指令集,調用代碼編譯、單元測試、代碼規范檢查、功能測試等構建任務腳本;

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

(4) 代碼規范檢查插件(Fingbugs/Findsecbugs、Checkstyle、PMD):被Ant構建工具調用,以檢查源代碼與設定代碼規范間的差異;

(5) 自動化測試框架(Robotium):使用其Solo類創建的自動化測試應用,被Ant指令調用執行;

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

系統架構如圖1所示。

圖1 產品開發過程自動化測試系統架構

2.2 流程設計

當Android開發人員將代碼提交至SVN服務器,系統即以自動化方式執行測試流程:SVN服務器即時遠程觸發Jenkins持續集成平臺對開發項目的構建;通過調用Ant工具進行項目代碼編譯,生成開發應用;調用JUnit單元測試及Fingbugs/Checkstyle/PMD代碼規范檢查工具,生成檢測報告;構建成功后,平臺將開發代碼及代碼檢測結果增量提交至SVN服務器,并將被測應用部署在測試環境;同時激活已開啟的手機模擬器或測試終端,啟動關鍵功能的Robotium自動化測試,并將測試代碼及功能測試結果增量提交至SVN服務器。

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

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

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

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

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

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

3 方案部署

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

圖3 工具鏈連接圖

3.1 本地代碼與SVN服務器間的連接

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

3.2 SVN服務器發起與Jenkins平臺間的連接

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

3.3 Jenkins平臺與Ant構建工具間的連接

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

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

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

補充為:

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

3.4 Ant構建與JUnit單元測試框架間的連接

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

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

3.5 Ant構建與代碼規范檢查工具間的連接

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

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測試框架間的連接

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

3.7 Ant構建與Robotium自動化測試框架間的連接

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

3.8 Jenkins平臺向SVN服務器發起提交的連接

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

4 實施驗證

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

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

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

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

圖4 Checkstyle檢測報告

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

圖5 測試日志提交記錄

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

5 結 語

本文提出了一種Android應用開發中自動化測試工具鏈的解決方案。運用自動化流程實現產品持續集成過程中所執行的代碼構建、單元測試、代碼規范檢查和功能測試,并配備版本控制、日志管理等功能,有助于系統管理開發過程,規范代碼質量,提高產品開發和測試效率。

猜你喜歡
檢測
QC 檢測
“不等式”檢測題
“一元一次不等式”檢測題
“一元一次不等式組”檢測題
“幾何圖形”檢測題
“角”檢測題
“有理數的乘除法”檢測題
“有理數”檢測題
“角”檢測題
“幾何圖形”檢測題
主站蜘蛛池模板: 国产精品亚洲一区二区三区在线观看| 国产尤物jk自慰制服喷水| 麻豆精品在线播放| 国产精品开放后亚洲| 91在线日韩在线播放| 亚洲第一区欧美国产综合| 日韩黄色精品| 一级爆乳无码av| 伊人久久精品无码麻豆精品| 亚洲AV无码一区二区三区牲色| 亚洲欧洲日韩久久狠狠爱| 欧美精品啪啪一区二区三区| 亚洲色大成网站www国产| 亚洲码在线中文在线观看| 国产成人综合日韩精品无码首页| 2020极品精品国产| 亚洲欧州色色免费AV| 波多野结衣一区二区三区四区视频 | 久久久久国产精品嫩草影院| 国产新AV天堂| 精品无码视频在线观看| 色国产视频| 欧美午夜性视频| 国产熟睡乱子伦视频网站| 色九九视频| 久久婷婷色综合老司机| 日本精品一在线观看视频| 色综合综合网| 国模私拍一区二区 | 一级成人a毛片免费播放| 欧美综合激情| 国内精品九九久久久精品| 亚洲综合第一区| a色毛片免费视频| 国产成人精品亚洲77美色| 久青草免费视频| 亚洲精品国产精品乱码不卞| av在线无码浏览| 欧美国产日韩另类| 波多野结衣视频网站| 中文一级毛片| 久久国产精品国产自线拍| 欧美激情综合| 亚洲黄网视频| 国产一区免费在线观看| 国产爽妇精品| 91精品专区国产盗摄| 99青青青精品视频在线| 五月天在线网站| 国产午夜人做人免费视频| 玖玖精品视频在线观看| 无套av在线| 国产亚洲视频在线观看| 综合色亚洲| 国产精品毛片一区| 四虎精品免费久久| 免费三A级毛片视频| 女人毛片a级大学毛片免费| 老司机久久99久久精品播放| 毛片网站在线看| 特级毛片免费视频| 亚洲国产中文在线二区三区免| 亚洲中文字幕23页在线| 2021国产精品自产拍在线观看| 亚洲成人一区二区| 亚洲91精品视频| 亚洲成a人片| 高清久久精品亚洲日韩Av| 国产男人的天堂| 丝袜高跟美脚国产1区| 日韩在线1| 国产日韩欧美精品区性色| 国产91高跟丝袜| 国产日韩丝袜一二三区| 国产精鲁鲁网在线视频| 67194亚洲无码| 色综合日本| 亚洲无卡视频| 久久伊伊香蕉综合精品| 色综合日本| 天天操天天噜| 国产丝袜91|