1.【idea实用系列1 】Gradle 构建任务常见命令详解
2.实战|Java 测试覆盖率 Jacoco 插桩的到源不同形式总结和踩坑记录
3.JaCoCo 助您毁灭线上僵尸代码 | 京东物流技术团队
4.关于代码覆盖率(Code Coverage)
5.SonarQube8.3中的Maven项目的测试覆盖率报告
【idea实用系列1 】Gradle 构建任务常见命令详解
在 IntelliJ IDEA 中,Gradle 构建任务的码j码分常用命令对项目开发至关重要。这篇文章将深入解析一些常见的到源Gradle命令,帮助你更好地管理和优化项目构建流程。码j码分1. 常见命令
build: 这是到源基础命令,用于构建项目,码j码分unity 仙侠源码包括编译源代码和运行测试。到源
help: 提供关于Gradle任务和选项的码j码分详细信息,帮助你了解可用的到源构建选项。
2. 验证任务
验证任务确保项目质量和正确性,码j码分包括检查代码风格、到源测试通过情况和代码覆盖率等:代码质量检查: gradle check
单元测试执行: gradle test
代码覆盖率报告: gradle jacocoTestReport
3. 其他常用命令
对于项目的码j码分编译、资源管理以及组件查看,到源还有以下任务:编译源代码: gradle compile
资源文件处理: gradle resources
查看组件依赖: gradle dependencies
通过熟练掌握这些Gradle命令,码j码分你可以更高效地管理和维护你的到源IDEA项目,提升开发效率。实战|Java 测试覆盖率 Jacoco 插桩的不同形式总结和踩坑记录
本文为霍格沃兹测试学院优秀学员对 Jacoco 的总结和对使用过程中可能遇到的坑点记录。测试开发进阶学习,文末加群。一、概述
测试覆盖率是老生常谈的话题。本文主要关注Java后端的测试覆盖率。由于历史原因,公司基本不做单元测试(UT),因此我们更关心手工执行、接口执行(人工使用Postman等)、接口自动化、WebUI自动化对应用系统的覆盖度。
尽管Jacoco已流行多年,7160图片站源码各种文档和帖子描述得很详细,但大多数文章都是针对特定形式的总结和使用方法。负责整个公司项目的覆盖率任务的人们需要一一研究和应对,经历多次入坑、出坑。
今年上半年负责公司不同类型的项目覆盖率统计技术的适配,对不同形式的项目有了一定的了解,记录下来,希望对他人有所帮助。本文由个人能力有限、表达能力有限所写,如有错误,欢迎指正。
二、投入覆盖率之前的思路
了解了Jacoco的部分机制,知道它提供了许多强大的功能,以满足不同形式的项目需求。Jacoco提供了API,可以屏蔽不同类型项目带来的困扰。
官方API示例地址:Jacoco.org/Jacoco/trunk...
使用API进行操作的好处包括:
屏蔽不同方式的构建部署。若想将此功能集成到平台中,API无疑是很好的方式。只需将Jacoco插桩到测试服务器上,暴露TCP IP和端口,剩余提取代码执行数据、生成覆盖率报告,就可以统一方式执行。Jacoco官方提供了Maven插件方式、追剧达人源码吾爱Ant的XML方式,均有对应的dump和report进行覆盖率数据的dump和报告生成。三、项目梳理
公司是个老牌公司,项目杂乱无章,技术五花八门,至今仍有使用JDK6的项目。影响Jacoco使用过程的因素可能包括:
JDK版本:公司使用JDK6、7、8,JDK6是个分水岭,其他版本基本可用JDK8适配。构建方式:Maven构建、ANT构建,也有使用Gradle的可能。启动方式:Java -jar启动、通过命令行启动、使用Tomcat启动WAR包(打包方式灵活)。部署场景:线上部署、测试部署、开发部署可能采用不同方式,开发者多倾向于使用插件方式启动,因为快速且集成IDE。四、Jacoco插桩的本质
Jacoco介入部署过程的本质是插桩,可以是编译时插桩或运行时插桩。选择on-the-fly模式。
本质在于,海第授权系统源码在应用启动过程中,让Jacoco相关工具介入部署过程,即介入class文件的加载,在加载class时动态改变字节码结构,插入Jacoco的探针。以TCPserver方式进行插桩,应用启动时在端口上开启TCP服务,接收执行覆盖率信息并保存。提供API连接TCP服务,进行覆盖率数据的dump操作。
五、不同形式的插桩配置
介入启动过程需要一个jar包:Jacocoagent.jar。配置需要介入的jar包路径、过滤class文件、TCPserver端口号、访问地址等。针对不同启动方式,需要在相应的启动参数中加入配置,如在java命令、war包启动、Maven命令、ANT构建、Java -jar启动时加入相应的配置参数。
六、注意事项汇总
在配置过程中,需注意端口管理、变量作用域、代码适配性等问题,线程池submit源码分析确保配置的正确性和兼容性。
七、说给想做平台的你
对于想做增量覆盖率的平台,需要自动化配置,集成devops平台,规划端口,使用API进行数据收集,确保不同启动方式的兼容性。
八、一些坑
在配置Ant构建时,确保compile阶段配置正确,避免数据无法注入。在多服务器部署负载均衡时,需要循环连接不同服务器的IP:port进行数据收集。确保编译环境的一致性,可以使用sftp下载代码。注意数据的及时保存和收集,防止覆盖率数据丢失或不准确。
九、补充API相关代码覆盖率数据的获取
可以封装覆盖率数据生成报告时所需的属性,如数据文件、源码、class文件等,生成报告时自动获取这些信息。若需要具体实现代码示例或获取更多代码,请参阅GitHub仓库。
十、总结
本文是对Java端覆盖率探索的细化总结,参考了相关资料和课程。期待与大家分享和探讨,共同进步。
JaCoCo 助您毁灭线上僵尸代码 | 京东物流技术团队
随着业务系统的快速迭代,代码量的产出虽高,但实际被线上用户使用的代码量却常常被忽视。过量的代码不仅增加维护成本,更可能成为系统中的“僵尸代码”,消耗资源而不产生实际价值。如何准确判断代码的使用情况,进而安全地进行代码下线,成为了系统优化的关键。
大部分业务系统中,线上僵尸代码的普遍存在是常态。面对这种情况,传统的方法如询问产品经理或观察接口流量,往往难以给出精确的答案。针对这一问题,引入测试覆盖率工具 Jacoco,通过代码分析来识别并优化系统代码,成为了一个有效策略。
Jacoco 是一个测试覆盖率工具,利用 ASM 字节码增强技术在源代码中加入探针,以获取代码覆盖率信息。它通过在 Java agent 的 premain 方法中实现 ClassFileTransformer 接口,对加载的 Class 文件进行修改以增强源代码。这为识别和分析线上代码的使用情况提供了一个自动化且准确的途径。
实现 Jacoco 的实践步骤包括引入 jar 依赖、赋能 Rest 请求、嵌入 jacocoagent、资源预留、下载覆盖文件以及分析代码等。通过这些步骤,团队可以有效识别出僵尸代码,进而进行安全的代码下线,优化系统结构。
采用 Jacoco 进行代码分析后,京东物流技术团队在实践过程中取得了显著的成效。需求交付效率提升,需求交付周期缩短,开发阶段时长显著降低,人均需求吞吐量增加,自动化 bug 数减少,单测覆盖率提升,系统整体质量得到改善。这些成果表明,通过引入和应用 Jacoco 这样的工具,不仅能够有效识别并优化系统中的僵尸代码,还能带来整体工作效率和质量的提升。
综上所述,Jacoco 作为一种强大的测试覆盖率工具,为识别和优化线上僵尸代码提供了可行的解决方案。通过其在京东物流技术团队中的实践,我们可以看到其在提升系统效率、减少维护成本、优化代码质量方面的巨大潜力。在不断迭代的业务场景中,Jacoco 成为了推动系统优化、提升技术团队效能的重要工具。
关于代码覆盖率(Code Coverage)
代码覆盖率:衡量测试有效性的关键指标
代码覆盖率,作为软件测试中的重要概念,它衡量的是在测试过程中实际执行的代码比例,有助于识别哪些代码已测试,哪些未被触及。测试的目的是提高软件质量,而代码覆盖率能帮助我们评估测试深度和广度。
为何要关注覆盖率?因为虽然测试是质量保证的关键,但我们需要确切了解我们的测试是否覆盖了所有关键代码。高覆盖率并不意味着完美,它只是表明未被充分测试的部分。测量覆盖率有助于设定合理的测试目标,确保代码在各个模块中得到均匀测试,而非盲目追求高数字。
理解覆盖率的种类:源代码检测、运行时收集和中间代码检测,如Gcov、JaCoCo和Coverage,各工具的工作原理有助于我们选择适合的工具。选择时,应考虑工具的开源性、活跃程度和易用性。
当今主流的覆盖率工具众多,如针对不同编程语言的开源工具,选择时应侧重实用性。同时,要明白高覆盖率不等同于高质量测试,%覆盖率并非目标,因为过度追求可能导致无意义测试的增加。
正如Martin Fowler所述,代码覆盖率是寻找未被测试部分的工具,但它作为衡量测试效果的数字工具价值有限。理解这一点,我们才能更明智地使用代码覆盖率这一指标,确保我们的测试策略既全面又有效。
参考来源:lambdatest.com/blog/cod... atlassian.com/continuou...
SonarQube8.3中的Maven项目的测试覆盖率报告
从SonarQube 6.2版本开始,测试报告整合为一份全面的报告,因此在Maven项目中,如果单元测试(由Maven Surefire插件执行)与集成测试(由Maven Failsafe插件执行)分开进行,如何配置JaCoCo Maven插件以生成涵盖这两种测试类型的报告?本文将指导你如何配置Maven项目结构、测试运行、测试报告生成以及在SonarQube中可视化测试报告。
首先,查看Maven项目的默认结构,通常包含生产源代码目录(src/main/java)和测试源代码目录(src/test/java)。为了将单元测试和集成测试分开,可添加一个名为src/it/java的新目录,并分别将它们放置于src/test/java和src/it/java中。
对于单元测试运行,Maven默认配置已包含在构建生命周期的测试阶段中。集成测试运行需手动完成,可通过Maven插件实现。确保在POM文件中配置BuildHelperMaven插件以将src/it/java目录添加到测试类路径中。同时,设置Maven安全插件的目标集成测试,自动绑定到集成测试阶段,以防集成测试失败导致构建取消。
使用JaCoCo Maven插件生成测试报告,它能为单元测试和集成测试生成合并报告。为此,需要配置两个代理并在测试运行期间生成报告。在POM文件中添加JaCoCo的目标prepare-agent和prepare-agent-integration,同时确保创建报告以供SonarQube读取。添加目标报告和报告集成到POM中,以便SonarQube识别报告位置。
在完成构建后,运行SonarMaven3插件(命令mvn sonar:sonar),告知Sonar Maven插件报告位置。在SonarQube仪表板中打开项目时,可查看总体测试覆盖率报告。
本文旨在为Maven项目在SonarQube中生成并可视化测试覆盖率报告提供详细指导,包括项目结构调整、测试运行配置、报告生成及SonarQube中报告的可视化。