當前位置:首頁 » 編程語言 » java8實戰

java8實戰

發布時間: 2025-06-26 17:39:09

『壹』 實戰|java 測試覆蓋率 Jacoco 插樁的不同形式總結和踩坑記錄

本文為霍格沃茲測試學院優秀學員對 Jacoco 的總結和對使用過程中可能遇到的坑點記錄。測試開發進階學習,文末加群。

一、概述

測試覆蓋率是老生常談的話題。本文主要關注Java後端的測試覆蓋率。由於歷史原因,公司基本不做單元測試(UT),因此我們更關心手工執行、介面執行(人工使用Postman等)、介面自動化、WebUI自動化對應用系統的覆蓋度。

盡管Jacoco已流行多年,各種文檔和帖子描述得很詳細,但大多數文章都是針對特定形式的總結和使用方法。負責整個公司項目的覆蓋率任務的人們需要一一研究和應對,經歷多次入坑、出坑。

今年上半年負責公司不同類型的項目覆蓋率統計技術的適配,對不同形式的項目有了一定的了解,記錄下來,希望對他人有所幫助。本文由個人能力有限、表達能力有限所寫,如有錯誤,歡迎指正。

二、投入覆蓋率之前的思路

了解了Jacoco的部分機制,知道它提供了許多強大的功能,以滿足不同形式的項目需求。Jacoco提供了API,可以屏蔽不同類型項目帶來的困擾。

官方API示例地址:Jacoco.org/Jacoco/trunk...

使用API進行操作的好處包括:

  1. 屏蔽不同方式的構建部署。若想將此功能集成到平台中,API無疑是很好的方式。
  2. 只需將Jacoco插樁到測試伺服器上,暴露TCP IP和埠,剩餘提取代碼執行數據、生成覆蓋率報告,就可以統一方式執行。
  3. Jacoco官方提供了Maven插件方式、Ant的XML方式,均有對應的mp和report進行覆蓋率數據的mp和報告生成。

三、項目梳理

公司是個老牌公司,項目雜亂無章,技術五花八門,至今仍有使用JDK6的項目。影響Jacoco使用過程的因素可能包括:

  1. JDK版本:公司使用JDK6、7、8,JDK6是個分水嶺,其他版本基本可用JDK8適配。
  2. 構建方式:Maven構建、ANT構建,也有使用Gradle的可能。
  3. 啟動方式:Java -jar啟動、通過命令行啟動、使用Tomcat啟動WAR包(打包方式靈活)。
  4. 部署場景:線上部署、測試部署、開發部署可能採用不同方式,開發者多傾向於使用插件方式啟動,因為快速且集成IDE。

四、Jacoco插樁的本質

Jacoco介入部署過程的本質是插樁,可以是編譯時插樁或運行時插樁。選擇on-the-fly模式。

本質在於,在應用啟動過程中,讓Jacoco相關工具介入部署過程,即介入class文件的載入,在載入class時動態改變位元組碼結構,插入Jacoco的探針。以TCPserver方式進行插樁,應用啟動時在埠上開啟TCP服務,接收執行覆蓋率信息並保存。提供API連接TCP服務,進行覆蓋率數據的mp操作。

五、不同形式的插樁配置

介入啟動過程需要一個jar包:Jacocoagent.jar。配置需要介入的jar包路徑、過濾class文件、TCPserver埠號、訪問地址等。針對不同啟動方式,需要在相應的啟動參數中加入配置,如在java命令、war包啟動、Maven命令、ANT構建、Java -jar啟動時加入相應的配置參數。

六、注意事項匯總

在配置過程中,需注意埠管理、變數作用域、代碼適配性等問題,確保配置的正確性和兼容性。

七、說給想做平台的你

對於想做增量覆蓋率的平台,需要自動化配置,集成devops平台,規劃埠,使用API進行數據收集,確保不同啟動方式的兼容性。

八、一些坑

在配置Ant構建時,確保compile階段配置正確,避免數據無法注入。在多伺服器部署負載均衡時,需要循環連接不同伺服器的IP:port進行數據收集。確保編譯環境的一致性,可以使用sftp下載代碼。注意數據的及時保存和收集,防止覆蓋率數據丟失或不準確。

九、補充API相關代碼覆蓋率數據的獲取

可以封裝覆蓋率數據生成報告時所需的屬性,如數據文件、源碼、class文件等,生成報告時自動獲取這些信息。若需要具體實現代碼示例或獲取更多代碼,請參閱GitHub倉庫。

十、總結

本文是對Java端覆蓋率探索的細化總結,參考了相關資料和課程。期待與大家分享和探討,共同進步。

『貳』 Java Web開發實戰—Listener詳解—Listener簡介、Listener開發、Listener的API、Listener應用

深入探索Java Web開發實戰:Listener的奧秘



在Java Web開發的世界裡,Listener扮演著至關重要的角色,它如同後台的觀察者,默默地監聽並響應Web應用程序中的各種關鍵事件。本篇文章將帶你走進Listener的世界,從基礎概念、開發實踐到API應用,一一詳解。



Listener基礎與機制


Listener的核心在於其監聽機制,它通過8種介面監聽Web應用中的ServletContext、HttpSession和ServletRequest事件。在Eclipse中,只需選擇對應的介面,如默認的javax.servlet.ServletContextListener,即可創建Listener,如TestListener01,它將自動配置到web.xml中,確保監聽器的執行順序。



創建Listener實戰

  • 在Eclipse中,選擇Listener介面,如TestListener01,勾選後自動生成相應的類,Eclipse會自動在web.xml中添加和元素,支持多Listener配置



Listener介面詳解


Java EE提供了一系列強大的Listener介面,如ServletContextListener關注ServletContext的生命周期,而則關注屬性的增刪改。重點掌握這兩大介面,如contextInitialized和contextDestroyed,分別在ServletContext創建和銷毀時觸發。



示例代碼展示

  • contextInitialized(ServletContextEvent): 當ServletContext創建時,執行TestListener01的初始化邏輯,控制台輸出"ServletContext對象被創建了"。

  • contextDestroyed(ServletContextEvent): ServletContext銷毀時,執行銷毀邏輯,控制台輸出"ServletContext對象被銷毀了"。



後續的Listener介面如HttpSessionListener和ServletRequestListener同樣具有類似的生命周期方法,如sessionCreated(HttpSessionEvent)和requestInitialized(ServletRequestEvent),它們各自負責監聽和操作相應的生命周期事件。



Listener應用實戰


例如,我們可以創建一個名為TestListener09的類,繼承HttpSessionBindingListener,用於存儲用戶信息。結合UserInfo單例模式,實現在線用戶的管理。在Servlet中,監聽用戶登錄和登出事件,實時更新顯示信息。



小結與提升

通過理解Listener的原理和使用方法,你能靈活地編寫程序實現Web應用的特殊功能,如用戶登錄狀態管理、會話統計等。在Context的jsp目錄中,實踐這些Listener的應用,例如,jsp01.jsp通過JSTL展示用戶信息,Servlet08的刪除操作則觸發TestListener09中的清理邏輯。重啟Tomcat,一步步見證Listener的力量。



總而言之,掌握Listener是Java Web開發不可或缺的一部分,它能讓你的應用更為智能,更加靈活。深入理解Listener的介面、機制和應用,將為你的Web開發之路增添無限可能。

熱點內容
樂斯教育用戶名和密碼是什麼 發布:2025-06-26 22:59:13 瀏覽:564
mc如何進末地要密碼 發布:2025-06-26 22:30:57 瀏覽:79
美超微電腦支持什麼伺服器 發布:2025-06-26 22:27:33 瀏覽:464
手機怎麼去掉鎖屏密碼鎖 發布:2025-06-26 22:27:25 瀏覽:41
sqlplus的調用存儲過程 發布:2025-06-26 22:19:43 瀏覽:917
linux系統vmware 發布:2025-06-26 22:02:06 瀏覽:983
操作系統伺服器如何調試 發布:2025-06-26 21:55:41 瀏覽:960
算日子演算法 發布:2025-06-26 21:36:27 瀏覽:549
負4怎麼存儲 發布:2025-06-26 21:31:08 瀏覽:124
sql去掉重復欄位 發布:2025-06-26 21:18:18 瀏覽:766