代码覆盖率工具JaCoCo用法总结及示例

       JaCoCo 是一个用于计算 Java 代码覆盖率的工具,它可以测量单元测试覆盖了代码的哪些部分。JaCoCo官网:EclEmma - JaCoCo Java Code Coverage Library

目录

1. JaCoCo 基本用法

2.JaCoCo 集成到构建流程

3.设置 JaCoCo 覆盖率目标

4.集成到现有测试框架

5.生成详细的覆盖率报告

6.跨多个测试运行的覆盖率聚合

7.JaCoCo在词序集成(CI)中的应用

8.设置代码覆盖率的排除和包含规则

9.分布式测试覆盖率收集

10.代码覆盖率的增量分析

11.代码覆盖率的分支覆盖分析

12.在Maven中的详细配置示例


1. JaCoCo 基本用法
步骤描述命令
1添加 JaCoCo 插件到项目在 pom.xml 或 build.gradle 文件中添加 JaCoCo 插件
2配置 JaCoCo 插件设置 JaCoCo 插件的配置,如输出目录
3执行测试并生成报告使用 JaCoCo 插件执行测试,并生成覆盖率报告
4查看报告查看生成的 HTML 报告,了解代码覆盖率

代码示例:

Maven方式;在pom.xml文件中添加 JaCoCo 插件:

<build><plugins><plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.7</version><executions><execution><goals><goal>prepare-agent</goal></goals></execution><execution><id>report</id><phase>test</phase><goals><goal>report</goal></goals></execution></executions></plugin></plugins>
</build>

执行测试并生成报告:

mvn test jacoco:report

Gradle方式;

build.gradle 文件中添加 JaCoCo 插件:

plugins {id 'jacoco'
}jacoco {toolVersion = "0.8.7"
}test {useJUnitPlatform()
}tasks.test {finalizedBy jacocoTestReport
}

执行测试并生成报告:

gradle test jacocoTestReport

 查看报告:

打开生成的 index.html 文件

2.JaCoCo 集成到构建流程
步骤描述命令说明
1集成到构建脚本将 JaCoCo 集成到项目的构建脚本中,确保每次构建都运行测试并生成覆盖率报告Maven: <build>...</build> 或 Gradle: buildscript {...}
2自动化测试执行在持续集成(CI)服务器上配置自动化测试执行,使用 JaCoCo 插件CI 配置文件中添加 JaCoCo 插件配置
3报告的存档将生成的覆盖率报告存档,以便历史比较和分析使用 CI 工具的归档功能,如 archiveArtifacts
4报告的查看在 CI 服务器上查看覆盖率报告,或将报告部署到服务器供团队查看在 CI 服务器的 Web 界面查看或通过 Web 服务器访问

代码示例:

Maven中配置; 

pom.xml 中集成 JaCoCo 并配置 CI 插件(例如 Jenkins):

<build><plugins><!-- JaCoCo plugin configuration from previous example --><!-- ... --></plugins>
</build><reporting><plugins><plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.7</version></plugin></plugins>
</reporting>

gradle中;在 build.gradle 中集成 JaCoCo 并配置 CI 插件(例如 Jenkins):

// JaCoCo plugin configuration from previous example
// ...// Example of Jenkins pipeline configuration
task jacocoReport(type: JacocoReport, dependsOn: test) {executionData testreports {xml.enabled truehtml.enabled true}
}// Jenkins might automatically call this task as part of the pipeline

在CI服务器上,你可能需要配置一些步骤来确保JaCoCo报告被正确生成和存档。例如,在Jenkins中,你可以使用archiveArtifacts步骤:

pipeline {agent anystages {stage('Build') {steps {// Build and test stepssh 'mvn clean package jacoco:report'}}stage('Archive') {steps {// Archive JaCoCo reportsarchiveArtifacts artifacts: '**/jacoco.exec', fingerprint: true}}}post {always {// Clean up workspacecleanWs()}}
}

这只是一个基本的示例,实际的CI配置将取决于你使用的CI工具和你的具体需求。

3.设置 JaCoCo 覆盖率目标
步骤描述命令说明
1定义覆盖率目标为项目设置覆盖率目标,如至少80%的行覆盖率在 JaCoCo 插件配置中指定目标
2配置 JaCoCo 插件配置 JaCoCo 插件以检查覆盖率是否达到目标Maven: <configuration>...</configuration> 或 Gradle: jacoco {...}
3测试覆盖率检查在构建过程中执行覆盖率检查,确保测试覆盖率满足目标Maven: <goal>check</goal> 或 Gradle: tasks.check.dependsOn jacocoTestReport
4查看失败的构建如果覆盖率未达到目标,构建将失败,查看失败原因并改进测试查看构建日志中的 JaCoCo 报告部分

代码示例:

Maven中; 在 pom.xml 中配置 JaCoCo 插件以设置覆盖率目标:

<build><plugins><plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.7</version><executions><!-- ... --></executions><configuration><rules><rule><element>BUNDLE</element><limits><limit><counter>LINE</counter><value>COVEREDRATIO</value><minimum>0.80</minimum></limit></limits></rule></rules></configuration></plugin></plugins>
</build>

执行测试并检查覆盖率:

mvn test jacoco:check

在Gradle中; 在 build.gradle 中配置 JaCoCo 插件以设置覆盖率目标:

plugins {id 'jacoco'
}jacoco {toolVersion = "0.8.7"minimumCoverage = 0.80
}check.dependsOn jacocoTestReport

执行测试并检查覆盖率:

gradle check

 通过设置覆盖率目标,你可以确保项目在每次构建时都达到一定的质量标准。如果覆盖率未达到目标,构建将失败,从而提醒开发团队需要改进测试。

4.集成到现有测试框架
步骤描述命令说明
1选择测试框架确定项目中使用的测试框架,如 JUnit, TestNG-
2配置 JaCoCo 以支持测试框架确保 JaCoCo 插件与测试框架兼容Maven/Gradle 插件配置中通常自动兼容
3执行测试使用测试框架执行测试用例命令行或 IDE 中运行测试
4生成覆盖率报告测试完成后,使用 JaCoCo 生成覆盖率报告Maven: mvn jacoco:report 或 Gradle: gradle jacocoTestReport

代码示例

对于大多数流行的测试框架,JaCoCo 的集成通常是透明的,不需要特别的配置。以下是一些常见测试框架的集成示例。

如果你的项目使用 JUnit 或者TestNG作为测试框架,JaCoCo 将自动处理 JUnit和TestNG 测试的覆盖率。

执行测试和生成报告的 Maven 命令:

mvn test jacoco:report

 Gradle 命令:

gradle test jacocoTestReport

 在大多数情况下,JaCoCo 插件会自动检测到项目中使用的测试框架,并相应地生成覆盖率报告。如果需要对测试框架进行特别配置,官方文档会提供详细的指导。

5.生成详细的覆盖率报告
步骤描述命令说明
1配置 JaCoCo 插件设置 JaCoCo 插件以生成不同类型的覆盖率报告在构建脚本中配置 jacoco 插件
2执行测试运行测试用例,JaCoCo 会收集覆盖数据使用 Maven 或 Gradle 运行测试命令
3生成报告使用 JaCoCo 命令生成覆盖率报告Maven: mvn jacoco:report 或 Gradle: gradle jacocoTestReport
4查看报告分析生成的报告,了解代码的覆盖率情况打开生成的 HTML 报告文件

代码示例

Maven中;在 pom.xml 中配置 JaCoCo 插件以生成详细的覆盖率报告:

<build><plugins><plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.7</version><executions><!-- ... --></executions><configuration><!-- 配置覆盖率报告的输出目录 --><dataFile>target/jacoco.exec</dataFile><outputDirectory>target/jacoco-reports</outputDirectory></configuration></plugin></plugins>
</build>

 执行测试并生成报告:

mvn test jacoco:report

Gradle中; 在 build.gradle 中配置 JaCoCo 插件以生成详细的覆盖率报告:

plugins {id 'jacoco' // 确保已经添加了 JaCoCo 插件
}jacoco {toolVersion = "0.8.7"
}test {useJUnitPlatform()
}tasks.jacocoTestReport {reports {// 配置 HTML 和 XML 报告的输出html.enabled truexml.enabled true}
}// 将测试报告任务添加到构建生命周期中
check.dependsOn jacocoTestReport

JaCoCo 支持多种报告格式,包括 HTML、XML 和 CSV。HTML 报告通常用于可视化代码覆盖率,而 XML 报告可以用于自动化分析和集成到 CI 系统中。

6.跨多个测试运行的覆盖率聚合
步骤描述命令说明 
1执行多个测试运行执行多个测试套件或测试运行,以覆盖不同的代码路径使用测试框架执行测试
2收集覆盖率数据收集每次测试运行的覆盖率数据文件(.exec)JaCoCo 插件自动生成 .exec 文件
3聚合覆盖率数据使用 JaCoCo 命令行工具或 Maven/Gradle 插件聚合多个 .exec 文件JaCoCo CLI: java -jar jacococli.jar merge
4生成聚合报告从聚合后的覆盖率数据生成报告Maven: mvn jacoco:report-aggregate 或 JaCoCo CLI

代码示例使用JaCoCo CLI聚合覆盖率数据 

首先,确保你已经收集了多个 .exec 文件。然后使用 JaCoCo 的命令行工具进行聚合:

java -jar jacococli.jar merge *.exec merged.exec

这会将所有 .exec 文件合并成一个名为 merged.exec 的文件。

Maven生成集合报告

pom.xml 中配置 JaCoCo 插件以使用聚合的覆盖率数据生成报告:

<build><plugins><plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.7</version><executions><execution><id>default-merge</id><phase>verify</phase><goals><goal>merge</goal></goals><configuration><fileSets><fileSet><directory>${project.build.directory}</directory><includes><include>*.exec</include></includes></fileSet></fileSets><destFile>${project.build.directory}/jacoco-merged.exec</destFile></configuration></execution><execution><id>default-report</id><phase>verify</phase><goals><goal>report-aggregate</goal></goals></execution></executions></plugin></plugins>
</build>

 执行聚合和报告生成:

mvn jacoco:merge jacoco:report-aggregate

Gradle生成聚合报告

build.gradle 中配置 JaCoCo 插件以使用聚合的覆盖率数据生成报告:

plugins {id 'jacoco'
}tasks.register('mergeJacocoReports', JacocoMerge) {executionData files('build/jacoco/*.exec')destinationFile file("$buildDir/jacoco/merged.exec")
}tasks.jacocoTestReport.dependsOn 'mergeJacocoReports'

 通过聚合多个测试运行的覆盖率数据,你可以获得更全面的代码覆盖率视图,这对于大型项目或需要运行多个测试套件的场景非常有用。

7.JaCoCo在词序集成(CI)中的应用
步骤描述命令说明
1配置 CI 环境在 CI 服务器上安装 Java 和 JaCoCo 插件根据 CI 服务器的文档进行安装
2编写构建脚本创建或修改 CI 项目的构建脚本,以集成 JaCoCo 插件CI 项目的 .yml 或其他配置文件
3执行测试并生成报告在 CI 构建过程中执行测试,并使用 JaCoCo 生成覆盖率报告CI 构建脚本中的测试执行命令
4上传报告将 JaCoCo 生成的覆盖率报告上传到 CI 服务器或外部存储使用 CI 服务器的归档或上传功能
5分析报告在 CI 服务器上分析覆盖率报告,确保代码覆盖率达标查看 CI 服务器提供的报告链接

代码示例:

Jenkins中配置(使用Pipeline)

在 Jenkins 中,你可以使用 Pipeline 功能来集成 JaCoCo。以下是一个 Jenkinsfile 的示例:

pipeline {agent anystages {stage('Checkout') {steps {// 检出代码git 'https://gitlab_ip:port/your/repo.git'}}stage('Test') {steps {// 使用 Maven 或 Gradle 执行测试并生成 JaCoCo 报告sh 'mvn clean test jacoco:report'}}stage('Archive') {steps {// 归档 JaCoCo 报告archiveArtifacts artifacts: 'target/site/jacoco/*.html', fingerprint: true}}}post {always {// 无论构建成功与否,都执行清理操作cleanWs()}}
}

 在 CI 过程中集成 JaCoCo 可以帮助团队持续监控代码的测试覆盖率,确保代码质量,并在代码合并到主分支之前发现潜在的未测试覆盖的代码区域。

8.设置代码覆盖率的排除和包含规则
步骤描述命令说明
1确定覆盖率规则确定哪些代码应该被包含或排除在覆盖率报告之外-
2配置 JaCoCo 插件在构建脚本中配置 JaCoCo 插件以应用包含和排除规则Maven/Gradle 插件配置
3执行测试运行测试用例,JaCoCo 将根据规则收集覆盖数据Maven: mvn test 或 Gradle: gradle test
4生成报告使用 JaCoCo 生成覆盖率报告,报告将遵循配置的规则Maven: mvn jacoco:report 或 Gradle: gradle jacocoTestReport

代码示例:

pom.xml 中配置 JaCoCo 插件以设置包含和排除规则:

<build><plugins><plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.7</version><configuration><includes><include>com/mycompany/**</include></includes><excludes><exclude>com/mycompany/**/internal/*</exclude><exclude>com/mycompany/**/*Test</exclude></excludes></configuration></plugin></plugins>
</build>

在Gradle中;

build.gradle 中配置 JaCoCo 插件以设置包含和排除规则:

plugins {id 'jacoco'
}jacoco {// 配置包含规则include "**/com/mycompany/**/*.class"// 配置排除规则exclude "**/com/mycompany/**/internal/**/*.class"exclude "**/com/mycompany/**/*Test.class"
}test {// 确保测试任务完成后生成 JaCoCo 报告useJUnitPlatform()finalizedBy jacocoTestReport
}

通过设置包含和排除规则,你可以专注于对重要业务逻辑的测试覆盖率,同时忽略那些不需要或不值得测试的代码,如自动生成的代码、测试代码本身、内部工具类等。

9.分布式测试覆盖率收集
步骤描述命令说明
1配置分布式测试环境确保测试可以在多个分布式节点上执行CI/CD 配置或分布式测试工具配置
2收集单个节点的覆盖率数据每个测试节点独立运行测试并生成 .exec 文件使用 Maven 或 Gradle 在每个节点上执行测试
3合并分布式节点的覆盖率数据使用 JaCoCo 命令行工具或插件合并所有节点的 .exec 文件JaCoCo CLI: java -jar jacococli.jar merge
4生成合并后的覆盖率报告从合并后的覆盖率数据生成最终的覆盖率报告Maven: mvn jacoco:report-aggregate 或 JaCoCo CLI

代码示例

分布式测试环境配置

 在分布式测试环境中,每个测试节点通常会独立执行测试。确保每个节点的 JaCoCo .exec 文件都被保存并可以在之后被合并。

Maven合并分布式节点的覆盖率数据

在 Maven 中,你可以使用 JaCoCo 的 merge 目标来合并所有节点的 .exec 文件:

mvn jacoco:merge@merge-reports -Djacoco.merge.dataFile1=<node1-jacoco-exec-file-path>

其中 <node1-jacoco-exec-file-path> 是第一个节点生成的 .exec 文件的路径。如果有更多节点,可以使用 -Djacoco.merge.dataFile2-Djacoco.merge.dataFile3 等来指定。

JaCoCo CLI合并分布式节点的覆盖率数据

使用 JaCoCo 的命令行工具合并所有节点的 .exec 文件:

java -jar jacococli.jar merge node1.exec node2.exec merged.exec

这会生成一个名为 merged.exec 的文件,其中包含了所有测试节点的覆盖率数据。

生成合并后的覆盖率报告

一旦你有了合并后的 .exec 文件,就可以使用 JaCoCo 生成最终的覆盖率报告:

对于 Maven:

mvn jacoco:report-aggregate@aggregate-reports -Djacoco.report-aggregate.dataFile=merged.exec

对于 JaCoCo CLI,报告生成通常是通过 Maven 或 Gradle 插件完成的。

在分布式测试环境中,覆盖率数据的合并是确保获得整个应用代码覆盖率视图的关键步骤。

10.代码覆盖率的增量分析
步骤描述命令说明
1收集初始覆盖率数据运行测试用例并收集初始的代码覆盖率数据使用 Maven 或 Gradle 执行测试
2执行代码变更对代码进行修改或增加新功能修改源代码
3重新收集覆盖率数据在变更后再次运行测试并收集覆盖率数据使用 Maven 或 Gradle 执行测试
4进行增量分析比较两次测试运行的覆盖率数据,找出变更影响的范围使用 JaCoCo 的增量分析功能
5查看增量报告分析增量报告,了解新增或遗漏的覆盖区域查看 JaCoCo 生成的增量报告

代码示例

 在 Maven 中,你可以使用 JaCoCo 插件的 prepare-agent 阶段来配置初始的覆盖率数据收集:

<plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.7</version><executions><execution><goals><goal>prepare-agent</goal><goal>report</goal></goals></execution></executions>
</plugin>

然后,进行代码变更并再次运行测试:

mvn test jacoco:report

 在 Gradle 中,JaCoCo 插件会自动配置测试覆盖率的收集:

plugins {id 'jacoco'
}test {useJUnitPlatform()
}tasks.jacocoTestReport {dependsOn test
}

执行测试:

gradle test jacocoTestReport

增量分析

 aCoCo 支持增量分析,但需要手动比较不同测试运行生成的 .exec 文件。你可以使用 JaCoCo 的命令行工具或自定义脚本来比较这些文件,找出新增加的测试覆盖或遗漏的覆盖区域。

java -jar jacococli.jar diff old.exec new.exec

 增量分析有助于开发人员理解他们的代码变更如何影响测试覆盖率,从而更精确地评估变更对测试覆盖的影响。

11.代码覆盖率的分支覆盖分析
步骤描述命令说明
1配置 JaCoCo 插件确保 JaCoCo 插件配置为收集分支覆盖数据在构建脚本中设置 dataFormat 为 BINARY 或 XML
2执行测试运行测试用例,JaCoCo 将收集包括分支覆盖在内的覆盖数据使用 Maven 或 Gradle 执行测试命令
3生成分支覆盖报告使用 JaCoCo 命令或插件生成分支覆盖报告Maven: mvn jacoco:report 或 Gradle: gradle jacocoTestReport
4查看报告分析生成的报告,特别关注分支覆盖率打开 HTML 报告中的“Branches”部分

代码示例

pom.xml 中配置 JaCoCo 插件以收集分支覆盖数据:

<build><plugins><plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.7</version><configuration><dataFormat>XML</dataFormat></configuration><executions><!-- ... --></executions></plugin></plugins>
</build>

执行测试并生成报告:

mvn test jacoco:report

build.gradle 中配置 JaCoCo 插件以收集分支覆盖数据:

plugins {id 'jacoco'
}jacoco {toolVersion = "0.8.7"
}test {useJUnitPlatform()
}tasks.jacocoTestReport {reports {xml.enabled = truehtml.enabled = true}dependsOn test
}

执行测试并生成报告:

gradle test jacocoTestReport

分支覆盖率是衡量测试质量的一个重要指标,它显示了测试用例是否覆盖了所有的逻辑分支。JaCoCo 的分支覆盖报告可以帮助开发人员识别未被测试覆盖的代码路径,从而提高测试的全面性。

还有行覆盖率分析在html报告中的"Lines"部分;指令覆盖率分析在报告的“Instructions”部分;限定条件覆盖分析在报告的“Conditions”部分,还有类覆盖率和包覆盖率分析等。

12.在Maven中的详细配置示例

接下来给一个相对比较详细完整的JaCoCo在Maven中的配置;

<project><!-- ... other configurations ... --><build><plugins><!-- JaCoCo Maven Plugin Configuration --><plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.7</version><executions><!-- Prepare JaCoCo agent before integration-test phase --><execution><id>pre-unit-test</id><goals><goal>prepare-agent</goal></goals><configuration><!-- Sets the path to the file which will contain the execution data --><destFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</destFile><propertyName>surefireArgLine</propertyName></configuration></execution><!-- Generate coverage report after integration-test phase --><execution><id>post-unit-test</id><phase>test</phase><goals><goal>report</goal></goals><configuration><!-- Sets the path to the file which will contain the execution data --><dataFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</dataFile><!-- Output directory for the reports --><outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory></configuration></execution><!-- Example of integration test coverage --><execution><id>pre-integration-test</id><phase>pre-integration-test</phase><goals><goal>prepare-agent</goal></goals><configuration><!-- Pass the property to surefire via system property --><propertyName>failsafeArgLine</propertyName></configuration></execution><execution><id>post-integration-test</id><phase>post-integration-test</phase><goals><goal>report</goal></goals><configuration><dataFile>${project.build.directory}/coverage-reports/jacoco-it.exec</dataFile><outputDirectory>${project.reporting.outputDirectory}/jacoco-it</outputDirectory></configuration></execution></executions><configuration><!-- Specify the rules --><rules><rule><element>BUNDLE</element><limits><limit><counter>COMPLEXITY</counter><value>COVEREDRATIO</value><minimum>0.60</minimum></limit></limits></rule></rules></configuration></plugin></plugins></build><!-- ... other configurations ... -->
</project>

在这个配置中:

  • prepare-agent 用于在测试执行前准备 JaCoCo 代理。
  • report 用于在测试执行后生成覆盖率报告。
  • destFile 指定了 JaCoCo 代理生成的执行数据文件的位置。
  • propertyName 指定了包含 JaCoCo 配置的系统属性名称,这个属性会被传递给测试插件。
  • rules 部分定义了覆盖率规则,这里设置了一个复杂度覆盖率的最低阈值。
  • outputDirectory 指定了覆盖率报告的输出目录。

请注意,这个配置是一个示例,实际的配置可能需要根据项目的特定需求进行调整。此外,版本号 0.8.7 应该替换为 JaCoCo 插件的最新版本。在实际应用中,你可能还需要配置 surefire-pluginfailsafe-plugin 以确保它们使用 JaCoCo 提供的系统属性来执行测试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/19317.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CALayer-时钟练习-CADisplayLink Objective-C语言】

一、我们接着来看,这个CADisplayLink啊, 1.刚才我们说那个时间呢,差上1秒钟的样子,然后呢,我们现在呢,用这个叫做CADisplayLink的东西,来解决,用这个类,来解决啊, 我们说,NSTimer,是跑到这儿了以后,一秒钟以后, 它才会执行,这个timeChange方法,真正的时间,不…

docker mqqt 安装

安装 cd /data/mqqt/ 目录准备 mkdir /data/mqqt/mosquitto/config/ #vim Dockerfile # 使用官方Eclipse Mosquitto镜像作为基础镜像 FROM eclipse-mosquitto:latest # 复制配置文件到容器内 COPY mosquitto.conf /data/mqqt/mosquitto/config/mosquitto.conf# 暴露默认的M…

AWS 高防和阿里云高防深度对比

随着网络攻击的不断增加&#xff0c;企业对于网络安全的需求也越来越高。在这种情况下&#xff0c;高防护服务成为了企业网络安全的重要组成部分。AWS和阿里云作为全球领先的云计算服务提供商&#xff0c;都提供了高防护服务&#xff0c;但它们之间存在着一些差异。我们九河云一…

基于PTP实现主机与相机系统时钟同步功能

基于PTP实现主机与相机系统时钟同步功能 一、PTP简介二、工业相机PTP功能支持三、工业相机时间戳介绍3.1基本概念3.2海康工业相机时间戳介绍3.2.1相机参数时间戳3.2.2图像嵌入式时间戳3.2.3相机event事件时间戳3.2.4各种时间戳的时序关系3.2.5通过工业相机SDK获取相机时间戳 四…

JS实现彩色图片转换为黑白图片

1. 使用 Canvas 研究 canvas 时发现一个有趣的现象——将彩色图片巧妙地转换为黑白图片。以下是实现这一功能的简洁代码示例&#xff1a; <div style"display: flex"><img src"./panda.jpeg" /><button onclick"change()">转…

香港Web3媒体:Techub News

Techub News&#xff1a;香港领先&#xff0c;世界一流的科技媒体平台 在数字化时代&#xff0c;Web3技术的崛起为媒体行业注入了新的活力。作为香港领先的Web3媒体平台&#xff0c;Techub News凭借其专业的团队、丰富的资源和创新的业务模式&#xff0c;成为了行业内的佼佼者。…

Idea java.lang.RuntimeException: java.lang.OutOfMemoryError: Java heap space 解决

咱们平时的开发过程中一定会进行本地调试&#xff0c;今天我也是安装了新的idea之后拉了一个比较大的项目进行本地调试的时候报错。报错信息如下&#xff1a; java: java.lang.OutOfMemoryError: Java heap space java.lang.RuntimeException: java.lang.OutOfMemoryError: Ja…

浅谈网络安全态势感知

前言 网络空间环境日趋复杂&#xff0c;随着网络攻击种类和频次的增加&#xff0c;自建强有力的网络安全防御系统成为一个国家发展战略的一部分&#xff0c;而网络态势感知是实现网络安全主动防御的重要基础和前提。 什么是网络安全态势感知&#xff1f; 态势感知一词来源于对…

【NumPy】全面解析mean函数:高效计算数组平均值的方法

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

【class19】人工智能初步---语音识别(5)

【class19】 上节课&#xff0c;我们学习了&#xff1a;语音识别模型的结构和原理&#xff0c;同时调用创建好的AipSpeech客户端实现了语音转文字功能。 本节课&#xff0c;我们将初识字幕&#xff0c;学习这些知识点&#xff1a;1. srt字幕 2. 获取时间数据 …

Codeforces Round 800 (Div. 1) A. Directional Increase (贪心之结论题之根本想不出来)

我们有一个长度为 n n n 的数组。最初&#xff0c;每个元素都等于 0 0 0 &#xff0c;第一个元素上有一个指针。 我们可以按任意顺序执行以下两种操作任意次数(可能为零)&#xff1a; 如果指针不在最后一个元素上&#xff0c;则将指针当前所在的元素增加 1 1 1 。然后将其…

Java开发-面试题-0001-String、StringBuilder、StringBuffer的区别

Java开发-面试题-0001-String、StringBuilder、StringBuffer的区别 更多内容欢迎关注我&#xff08;持续更新中&#xff0c;欢迎Star✨&#xff09; Github&#xff1a;CodeZeng1998/Java-Developer-Work-Note 技术公众号&#xff1a;CodeZeng1998&#xff08;纯纯技术文&am…

【2024.5.29数据库MYSQL史上最详细基础学习汇总】

初识数据库 什么是数据库: DB的全称是database,即数据库的意思。数据库实际上就是一个文件集合,是一个存储数据的仓库,数据库是按照特定的格式把数据存储起来,用户可以对存储的数据进行增删改查操作; 什么是关系型数据库(SQL)? 关系型数据库是依据关系模型来创建的…

如何恢复被盗的加密货币?

本世纪&#xff0c;网络犯罪的首要目标是加密货币。 这要归功于加密货币的日益普及和价值&#xff0c;网络犯罪分子已经认识到经济收益的潜力&#xff0c;并将重点转向利用这种数字资产中的漏洞。 在今天的文章中&#xff0c;我们将讨论加密货币恢复和被盗加密货币恢复。 我们…

企业分公司利用SD-WAN搭建异地组网

随着业务的发展&#xff0c;公司开设多家分公司再也正常不过了&#xff0c;一般分公司都在异地设立&#xff0c;为了实现办公效率的最大化&#xff0c;同时加强企业对管理的便利性&#xff0c;分公司与总部两地业务数据要实现互通和共享&#xff0c;需要搭建异地组网来实现。 企…

IPFoxy Tips:海外代理IP适用的8个跨境出海业务

在当今数字化时代&#xff0c;互联网已经成为商业和个人生活不可或缺的一部分。IP代理作为出海业务的神器之一&#xff0c;备受跨境出海业务人员关注。IPFoxy动态、静态纯净代理IP也根据业务需求的不同&#xff0c;分为静态住宅、动态住宅、静态IPv4、静态IPv6四种类型代理。那…

【软件测试】LoadRunner参数化属性设置_单个参数

目录 为什么使用参数化属性详解Select next rowSequential&#xff08;顺序&#xff09;Random&#xff08;随机&#xff09;Unique&#xff08;唯一&#xff09;Same line as XXX&#xff08;和XXX属性的取值方式一样&#xff09; Update value onEach iteration&#xff08;每…

HDTune和CrystalDiskInfo硬盘检测S.M.A.R.T.参数当前值最差值阈值

高亮颜色说明&#xff1a;突出重点 个人觉得&#xff0c;&#xff1a;待核准个人观点是否有误 高亮颜色超链接 文章目录 S.M.A.R.T.监控技术磁盘健康状态监测,硬盘检测硬盘检测工具 HD Tune硬盘检测工具 CrystalDiskInfo 当前值最差值阈值原始值的含义二级标题待补充待补充 开头…

RedHat9 | 配置与管理DNS服务器

一、 知识预备 1、DNS服务器的分类 主DNS服务器 主DNS服务器复制维护所管辖域的域名服务信息&#xff0c;它从域管理员构造的本地磁盘文件中的加载域信息。该文件包含服务器具有管理权的的一部分域结构的精确信息&#xff0c;配置主域服务器需要一整套配置文件&#xff1a; …

《QT实用小工具·六十八》基于QMenu开发的炫酷菜单栏

1、概述 源码放在文章末尾 该项目基于QMenu实现了炫酷的菜单栏效果&#xff0c;包含了如下功能&#xff1a; 1、实现了类似word菜单栏的效果&#xff0c;可以在菜单栏中横向添加不同的菜单 2、鼠标点击菜单可以展开菜单栏&#xff0c;再次点击菜单可以收起菜单栏 3、鼠标点击笑…