当前位置:首页 » 编程语言 » 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 21:11:36 浏览:106
php免费加密 发布:2025-06-26 21:03:07 浏览:997
rsac源码 发布:2025-06-26 21:02:34 浏览:289
hasp加密锁 发布:2025-06-26 20:35:09 浏览:528
ubuntu内核编译教程 发布:2025-06-26 20:25:49 浏览:350
android数据传输 发布:2025-06-26 20:02:04 浏览:495
海康威视摄像头出厂密码在哪里 发布:2025-06-26 19:47:30 浏览:744
怎么安装web服务器 发布:2025-06-26 19:42:50 浏览:962
算法字符串反转 发布:2025-06-26 19:39:35 浏览:484
常用的数据结构和算法 发布:2025-06-26 19:34:48 浏览:516