关于java:Java代码性能测试实战之ContiPerf

43次阅读

共计 1641 个字符,预计需要花费 5 分钟才能阅读完成。

一、前言

  • 最近测试一个开源我的项目,发现生成的 全局 id 有反复,办法加上 synchronized 提交 PR 后,有些同行对性能有疑虑,就筹备做个 代码性能测试
  • Java 基准性能测试 个别用 JMH 比拟多,然而 官网倡议 性能测试独自一个我的项目,感觉麻烦了点
  • 前面发现了 ContiPerf,能够不便的设置 执行次数、时长、线程数、预热时长,还有 Html 格局报告,感觉还比拟适宜,基于 Junit

二、ContiPerf

1. 装置

  • 有 2 个仓库,这里抉择 javatlacati 二开当前的
  • 抉择 2.4.3 版本,基于 Junit4,更好的反对 @After
  • 另最新 2.4.4-SNAPSHOT 版本,基于 Junit5

      <dependencies>
          <!-- 引入 ContiPerf 测试工具,参考 https://gitee.com/yu120/sequence -->
          <dependency>
              <groupId>com.github.javatlacati</groupId>
              <artifactId>contiperf</artifactId>
              <version>2.4.3</version>
              <scope>test</scope>
          </dependency>
      </dependencies>

2. 应用

  • 首先,单元测试类 减少属性 ContiPerfRule
  • 测试方法减少 Junit4 的 @Test 注解
  • 减少 @PerfTest,配置 invocations 次数,或 duration 毫秒时长,threads 线程数
  • 性能测试嘛,最好配置 预热时长 warmUp,单位也是 毫秒
  • 多种不同线程数的测试,能够 多个办法加 @PerfTest 注解哦 (这种状况倡议把 线程数加到 测试方法名开端,线程数小于 10 的 补 0,同时测试类减少 @FixMethodOrder(MethodSorters.NAME_ASCENDING),生成的 报告就按 线程数排序了 )
  • 还能够配置 @Required 后果校验哦,如下示例:每秒吞吐量要 大于等于 100 万

      @org.junit.Rule
      public ContiPerfRule contiPerfRule = new ContiPerfRule();
    
      @org.junit.Test
      @com.github.javatlacati.contiperf.Required(throughput = 100_0000)
      @PerfTest(duration = 3300, threads = 4, warmUp = 300)
      public void generateId04Threads() {generateIdThreads();
      }

3. 性能测试成果

  • 所有的 PerfTest 后果都输入到 target/contiperf-report/index.html

4. 示例 2:多线程生成 id,有无反复校验

  • ids 要应用 反对并发的容器,不然多线程 会报错
  • @AfterClass 做后果校验

      private static final Set<Long> ids = new ConcurrentHashSet<>((int) (INVOCATIONS / 0.7));
      @AfterClass
      public static void tearDown() {Assert.assertEquals("generateId duplicated", INVOCATIONS, ids.size());
      }
    
      @Test @PerfTest(invocations = INVOCATIONS, threads = 4)
      public void generateId() {ids.add(UniqueIdGenerator.generateId());
      }

三、总结

  • ContiPerf,能够不便的设置 执行次数、时长、线程数、预热时长,还有 Html 格局报告,是个比拟便捷的 代码性能测试工具
  • 更业余的 Java 微基准性能测试,也能够思考 JMH 哦

本文恪守【CC BY-NC】协定,转载请保留原文出处及本版权申明,否则将查究法律责任。
本文首先公布于 https://www.890808.xyz/,其余平台须要审核更新慢一些。

正文完
 0