第2.3節 Android生成全量和增量報告

覆蓋率報告(Coverage Report)是一種軟件測試工具生成的報告,用于評估測試用例對代碼的覆蓋程度。它通過統計代碼中哪些部分已經被測試用例執行過,哪些部分還沒有被執行,來衡量測試的充分性。覆蓋率報告通常包括以下幾種類型的覆蓋率指標:
1.行覆蓋率(Line Coverage):
? ? ?- 衡量代碼中每一行是否被至少執行過一次。

2.分支覆蓋率(Branch Coverage):
? ? - 衡量代碼中每個條件分支(如if語句、switch語句等)是否都被執行過。

3.函數覆蓋率(Function Coverage)
? ? - 衡量代碼中每個函數是否都被調用過。

4.語句覆蓋率(Statement Coverage):
? ? - 衡量代碼中每個語句是否都被執行過。

5.路徑覆蓋率(Path Coverage)
? ? - 衡量代碼中所有可能的執行路徑是否都被覆蓋到。

覆蓋率報告的作用:

1.評估測試質量:
- 通過覆蓋率報告,開發人員和測試人員可以了解當前測試用例對代碼的覆蓋情況,從而評估測試的質量和充分性。

2.發現未測試的代碼:
- 覆蓋率報告可以幫助識別那些從未被執行過的代碼段,這些代碼段可能存在潛在的缺陷或邏輯錯誤。

3.優化測試用例:
- 根據覆蓋率報告,可以針對性地增加或修改測試用例,以提高代碼的覆蓋率,確保更多的代碼邏輯得到測試。

4.提高代碼質量:
- 通過提高代碼覆蓋率,可以減少代碼中的潛在缺陷,提高軟件的整體質量和可靠性。

5.支持持續集成:
- 在持續集成(CI)流程中,覆蓋率報告可以作為一個重要的指標,幫助團隊監控和維護代碼質量。如果覆蓋率低于某個閾值,可以觸發警報或阻止代碼合并。

6.輔助代碼審查:
- 覆蓋率報告可以作為代碼審查的一部分,幫助審查人員更好地理解代碼的測試情況,從而提出更有針對性的改進建議。

7.風險管理:
- 通過覆蓋率報告,項目管理者可以更好地評估項目的測試風險,制定相應的風險管理策略。

2.3.1 Android生成全量報告

Jacoco插件有完整的一套覆蓋率相關功能,所以當采集了覆蓋率數據文件后,就可以生成覆蓋率報告。這樣沒有指定變化的內容,直接對整個項目生成的報告是全量報告,目前有兩種生成覆蓋率報告的方法,我們將逐一介紹。

一,Gradle任務生成報告

1,添加gradle任務
在采集了覆蓋率數據文件,要生成覆蓋率任務的項目中,找到app的gradle文件,添加如下任務:
task jacocoTestReport(type: JacocoReport) {reports {xml.enabled = truehtml.enabled = true}def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*']def debugTree = fileTree(dir: "$buildDir/intermediates/javac/debug", excludes: fileFilter)def mainSrc = "$project.projectDir/src/main/java"sourceDirectories.from = files([mainSrc])classDirectories.from = files([debugTree])executionData.from = files("$buildDir/outputs/code_coverage/debugAndroidTest/connected/coverage.ec")
}
注意:
  • sourceDirectories:項目的源碼文件,要指到java層,否則報告中無法渲染代碼覆蓋情況。
  • classDirectories:項目構建的類文件,注意是插樁后構建的文件,但在javac文件夾下。
  • executionData:覆蓋率數據文件路徑,如果沒有這個路徑,請創建這個目錄,并把上節下載的覆蓋率數據文件放到這個目錄中,重新命名。
2,生成覆蓋率報告
添加任務后同步項目,可以看到gradle文件中對應任務的左側有一個執行標示,單擊選擇"Run Android....."
Android Studio輸出如下,生成覆蓋率報告。
也可以在命令行下執行 ./gradlew jacocoTestReport,同樣能生成報告。報告路徑如下:app/build/reports/jacoco/jacocoTestReport/

二,命令行生成報告

Jacoco還可以不使用Android Studio直接使用命令行生成報告,此時需要下載jaoco的包: EclEmma - JaCoCo Java Code Coverage Library,下載指定的包,如我們使用的0.8.7的包。
打開壓縮包,找到libs文件夾,就可以看到jacococli.jar包,這個就是要使用的工具。
命令使用方法:
java -jar ${jacococli.jar的路徑} report ${exec文件路徑} 
--classfiles ${類文件路徑} --sourcefiles ${源碼文件路徑,要到/src/main/java} 
--encoding utf-8 --html ${報告路徑}
所以生成上面項目的覆蓋率報告,命令行方法可以是:
報告內容和上面完全一樣:

2.3.2 Android增量報告(Incremental Report)

增量報告是指在連續的構建或測試過程中,僅顯示相對于上一次構建或測試的變化部分的報告。這種報告方式主要用于跟蹤和分析代碼覆蓋率的變化,特別是在持續集成(CI)和持續交付(CD)環境中非常有用。

增量報告的特點
1.變化部分:
- 增量報告只關注當前構建與上一次構建之間的差異,而不是整個項目的完整覆蓋率。
- 例如,如果某個文件在上一次構建中已經完全覆蓋,而在當前構建中沒有新的測試用例,增量報告將不會顯示該文件的覆蓋率信息。


2.效率:
- 通過只顯示變化部分,增量報告可以更快地生成和解析,減少資源消耗。
- 在大型項目中,增量報告可以顯著提高構建和測試的速度。


3.問題定位:
- 增量報告有助于快速定位新引入的代碼或測試用例對覆蓋率的影響,便于開發者及時發現和修復問題。


4.持續集成:
- 在持續集成環境中,增量報告可以作為構建過程的一部分,幫助團隊實時監控代碼質量的變化。
- 例如,如果新提交的代碼導致覆蓋率下降,增量報告可以立即提醒開發人員進行修正。


增量報告的應用場景:
1.代碼審查:
- 在代碼審查過程中,增量報告可以幫助審查者快速了解新提交的代碼對現有測試用例的覆蓋情況,確保新代碼的質量。


2.持續集成:
- 在持續集成系統中,增量報告可以作為構建過程的一部分,自動檢測每次提交對代碼覆蓋率的影響,確保代碼質量的持續改進。


3.回歸測試:
- 在回歸測試中,增量報告可以幫助測試人員快速識別新引入的代碼是否引入了新的問題,確保回歸測試的高效性。

2.3.3 生成增量報告的方案

網上生成增量報告的方案很多,介紹性文檔較多,具體使用效果不得而知。主要集中在如下幾種:
1,diff-cover
項目地址: GitHub - Bachmann1234/diff_cover: Automatically find diff lines that need test coverage.,通過python處理diff信息以及生成增量覆蓋率報告。
缺點:增量信息較多時,處理速度慢。生成報告樣式和jacoco完全不同,有一定的學習成本。
2,增量插樁
根據需求的diff信息,在引入jacoco插件時,進行針對性插樁,生成報告的時候只生成插樁的文件,具體方案網上有本處不再展開: https://juejin.cn/post/6920029313316159502。
缺點:生成報告符合要求,但是無法同時采集全量覆蓋率數據,在日常測試過程中需要同時生成全量和增量的覆蓋率報告,此方案需酌情使用。
3,二次開發jacococli工具
網上的開源項目: jacoco: jacoco二開,支持增量代碼覆蓋率 可以通過命令行指定diff信息,并根據diff信息生成報告,渲染增量代碼,完全符合要求。
缺點:需要有一定的開發能力,對項目重新打包;項目較老,需要做相應的修改。
覆蓋率相關功能是精準測試平臺的核心,為了更好的開發我們的平臺,增量報告采用第三種方案,下節將詳細介紹如何使用此方案。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/73189.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73189.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/73189.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

奇跡科技:藍牙網關賦能少兒籃球教育的創新融合案例研究

一、引言 本文研究了福建奇跡運動體育科技有限公司(簡稱‘奇跡科技’)如何利用其創新產品體系和桂花網藍牙網關M1500,與少兒籃球教育實現深度融合。重點分析其在提升教學效果、保障訓練安全、優化個性化教學等方面的實踐與成效,為…

高考志愿填報管理系統基于Spring Boot SSM

目錄 摘要 ?一、系統需求分析?: 1.1用戶主體分析 1.2 功能需求分析 1.3、非功能需求分析 二、?技術實現?: ?三、結論?: 摘要 該系統主要實現了:學生信息管理、院校信息查詢、專業信息展示、志愿填報模擬、智能推薦管…

網絡HTTPS協議

Https HTTPS(Hypertext Transfer Protocol Secure)是 HTTP 協議的加密版本,它使用 SSL/TLS 協議來加密客戶端和服務器之間的通信。具體來說: ? 加密通信:在用戶請求訪問一個 HTTPS 網站時,客戶端&#x…

LintCode第1712題 - 和相同的二元子數組

描述 在由若干 0 和 1 組成的數組 A 中,有多少個和為 S 的非空子數組 樣例 1: 輸入:A [1,0,1,0,1], S 2 輸出:4 解釋: 如下面黑體所示,有 4 個滿足題目要求的子數組: [1,0,1] [1,0,1] [1,0,1,0] [0,1,…

【MySQL筆記】庫操作與表操作

🔥個人主頁🔥:孤寂大仙V 🌈收錄專欄🌈:MySQL 🌹往期回顧🌹:【MySQL】認識MySQL 🔖流水不爭,爭的是滔滔不 一、庫操作1.1 顯示數據庫1.2 創建數據庫…

SpringBoot3實戰(SpringBoot3+Vue3基本增刪改查、前后端通信交互、配置后端跨域請求、數據批量刪除(超詳細))(3)

目錄 一、從0快速搭建SpringBoot3工程、SpringBoot3集成MyBatis、PageHelper分頁查詢的詳細教程。(博客鏈接) 二、實現前端與后端通信對接數據。(axios工具) &#xff08;1&#xff09;安裝axios。(vue工程目錄) &#xff08;2&#xff09;封裝請求工具類。(request.js) <1&…

單播、廣播、組播和任播

文章目錄 一、單播二、廣播三、組播四、任播代碼示例&#xff1a; 五、各種播的比較 一、單播 單播&#xff08;Unicast&#xff09;是一種網絡通信方式&#xff0c;它指的是在網絡中從一個源節點到一個單一目標節點對的傳輸模式。單播傳輸時&#xff0c;數據包從發送端直接發…

【實戰】deepseek數據分類用戶評論數據

在平時的工作中&#xff0c;我們會遇到數據分類的情況&#xff0c;比如將一些文本劃分為各個標簽。如果人工分類這塊的工作量將是非常大&#xff0c;而且分類數據的準確性也不高。我們需要用到一些工具來實現。提高效率的同時也提高準確率。 1.示例數據 用戶ID 時間戳 評論場…

技術視角解讀:游戲出海如何借助AWS全球架構突破性能與合規瓶頸

【場景痛點】 某二次元卡牌手游團隊在東南亞市場遭遇聯機延遲投訴率高達37%&#xff0c;日本地區因數據合規問題面臨下架風險。在傳統IDC架構下&#xff0c;運維團隊需要同時管理3個區域的物理服務器&#xff0c;版本更新耗時長達6小時。 【技術架構升級】 通過AWS Local Zones…

【JavaEE】網絡編程socket

1.????前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 親愛的朋友們&#x1f44b;&#x1f44b;&#xff0c;這里是E綿綿呀????。 如果你喜歡這篇文章&#xff0c;請別吝嗇你的點贊????和收藏&#x1f4d6;&#x1f4d6;。如果你對我的…

第16屆藍橋杯單片機4T模擬賽三

本次模擬賽涉及的模塊&#xff1a;基礎三件套&#xff08;Led&Relay&#xff0c;按鍵、數碼管&#xff09; 進階單件套&#xff08;pcf8591的AD模塊&#xff09; 附件&#xff1a; 各模塊底層代碼在文章的結尾 一、數碼管部分 1.頁面1 頁面1要顯示的格式是&#xff1a; …

網絡華為HCIA+HCIP IPv6

目錄 IPv4現狀 IPv6基本報頭 IPv6擴展報頭 IPv6地址 IPv6地址縮寫規范 ?編輯 IPv6地址分配 IPv6單播地址分配 IPv6單播地址接口標識 IPv6常見單播地址 - GUA &#xff08;2 / 3 開頭&#xff09; IPv6常見單播地址 - ULA IPv6常見單播地址 - LLA IPv6組播地…

基于YOLOv8深度學習的智能小麥害蟲檢測識別系統

作者簡介&#xff1a;Java領域優質創作者、CSDN博客專家 、CSDN內容合伙人、掘金特邀作者、阿里云博客專家、51CTO特邀作者、多年架構師設計經驗、多年校企合作經驗&#xff0c;被多個學校常年聘為校外企業導師&#xff0c;指導學生畢業設計并參與學生畢業答辯指導&#xff0c;…

Mac:Maven 下載+安裝+環境配置(詳細講解)

&#x1f4cc; 下載 Maven 下載地址&#xff1a;https://maven.apache.org/download.cgi &#x1f4cc; 無需安裝 Apache官網下載 Maven 壓縮包&#xff0c;無需安裝&#xff0c;下載解壓后放到自己指定目錄下即可。 按我自己的習慣&#xff0c;我會在用戶 jane 目錄下新建…

XSS-labs(反射型XSS) 靶場 1-13關 通關

目錄 前言 XSS漏洞概述 XSS漏洞分類 通關日記 level1 分析 解題 ?level2 分析 解題 方法一&#xff1a;閉合標簽 方法二&#xff1a;閉合雙引號 level3 分析 解題 level4 分析 解題 level5 分析 解題 level6 分析 解題 level7 分析 解體 level8 …

GPT-5 將免費向所有用戶開放?

GPT-5 將免費向所有用戶開放&#xff1f; 硅谷知名分析師 Ben Thompson 最近與 OpenAI CEO Sam Altman 進行了一場深度對談&#xff0c;其中Sam Altman透漏GPT-5將免費向大家發放。 OpenAI 這波操作可不是一時沖動&#xff0c;而是被逼出來的。DeepSeek 這個新秀橫空出世&am…

【雜記二】git, github, vscode等

一、前言 暫時空著... 二、git 2.1 可能的疑問 1. VSCode 項目名和 GitHub 倉庫名是否需要一致&#xff1f; 不需要一致。 VSCode 項目名&#xff08;也就是你本地的文件夾名字&#xff09;和 GitHub 倉庫名可以不一樣。 Git 是一個分布式版本控制系統&#xff0c;它主要關…

數學愛好者寫的編程系列文章

作為一個數學愛好者&#xff0c;我大學讀的專業卻不是數學專業&#xff0c;而是跟計算機有關的專業。原本我對編程一竅不通&#xff0c;平時上課也是在看數學文獻&#xff0c;作業基本靠同學&#xff0c;考試及格就行。不過后來因為畢業的壓力&#xff0c;我還是擁抱編程了&…

FPGA 以太網通信(四)網絡視頻傳輸系統

一、網絡視頻傳輸系統 網絡視頻傳輸系統使用ov5640攝像頭采集數據&#xff0c;通過組件UDP幀將視頻數據實時傳輸給上位機。 ov5640視頻傳輸帶寬 像素分辨率設為640x480&#xff0c;幀率設為60幀&#xff0c;像素格式為RGB565&#xff0c;傳輸帶寬為 640 x 480 x 16bit x 60 fps…

[leetcode]1631. 最小體力消耗路徑(bool類型dfs+二分答案/記憶化剪枝/并查集Kruskal思想)

題目鏈接 題意 給定 n m n\times m nm地圖 要從(1,1) 走到 (n,m) 定義高度絕對差為四聯通意義下相鄰的兩個點高度的絕對值之差 定義路徑的體力值為整條路徑上 所有高度絕對差的max 求所有路徑中 最小的路徑體力值是多少 方法1 這是我一開始自己寫的記憶化剪枝 比較暴力 時…