為了賬號安全,請及時綁定郵箱和手機立即綁定

Java 性能測試框架工具-JunitPerf 快速上手

2020.03.22 22:56 707瀏覽

一、背景

最近寫文章需要了解和對比一些函數的性能差異,因此在網上找到了一個簡單易用的 Java 性能測試框架 junitperf

官方介紹它的優勢是:

  • 可以和 Junit5 完美契合。
  • 使用簡單,便于項目開發過程中的測試實用。
  • 提供拓展,用戶可進行自定義開發。

二、范例

2.1 依賴

<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>5.6.0</version>
    <scope>test</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/com.github.houbb/junitperf -->
<dependency>
      <groupId>com.github.houbb</groupId>
      <artifactId>junitperf</artifactId>
      <version>2.0.3</version>
</dependency>

通過依賴就可以大致了解其原理:
https://mvnrepository.com/artifact/com.github.houbb/junitperf/2.0.3

圖片描述

大家可以使用本人在剖析《阿里巴巴 Java 開發手冊》專欄中講到的“先猜想后驗證” 的學習方法,這樣印象更深刻,學習效果更好

通過上圖,我們可以猜測,該框架使用 freemarkder 生成 HTML 報告,使用 commons-math3 進行性能計算,使用 junit-jupiter-engine 支持 Junit 5的特性等。

感興趣大家可以 clone 項目深入研究。

大家還可以通過查看單元測試的方式快速掌握用法:

圖片描述

2.2 示例

使用很簡單,建議直接進入 JunitPerfConfig 直接中看注釋即可明白每個屬性的含義。

希望大家平時學習新技術時,也可以嘗試通過這種方式,快速了解用法。

/**
 * 執行接口
 * 對于每一個測試方法的條件配置
 * @author bbhou
 * @version 1.0.0
 * @since 1.0.0
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD})
@Documented
@API(status = API.Status.MAINTAINED, since = VersionConstant.V2_0_0)
@ExtendWith(PerfConfigProvider.class)
@TestTemplate
public @interface JunitPerfConfig {

    /**
     * 執行時使用多少線程執行
     * @return int val
     */
    int threads() default 1;

    /**
     * 準備時間(單位:毫秒)
     * @return time in mills
     */
    long warmUp() default 0L;

    /**
     * 執行時間。(單位:毫秒)
     * 默認值:默認為 1min
     * 這里的執行時間不包含準備時間。
     * @return time in mills
     */
    long duration() default 60_000L;

    /**
     * 存放統計信息工具
     * @return 統計實現類
     */
    Class<? extends StatisticsCalculator> statistics() default DefaultStatisticsCalculator.class;

    /**
     * 存放報告信息類
     * @return 報告信息
     */
    Class<? extends Reporter>[] reporter() default {ConsoleReporter.class};

}

因此隨手寫個示例:

import com.github.houbb.junitperf.core.annotation.JunitPerfConfig;
import com.github.houbb.junitperf.core.report.impl.ConsoleReporter;
import com.github.houbb.junitperf.core.report.impl.HtmlReporter;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class PerfTest {

    @JunitPerfConfig(threads = 10, warmUp = 1_000, duration = 30_000
            , reporter = {HtmlReporter.class, ConsoleReporter.class})
    public void newStrTestStringBuilder() {
        StringBuilder stringBuilder = new StringBuilder("demo");
        for (int i = 0; i < 100; ++i) {
            stringBuilder.append(i);
        }
        log.info(stringBuilder.toString());
    }
}

通過 reporter 可以配置 HTML 方式和 控制臺方式的報告,下圖為 HTML 方式(在 target 目錄的 junitperf 文件夾對應的包名下):

圖片描述

三、總結

該框架雖然在國內不是特別出名,但是非常簡單易用,對于要求不高的朋友來說已經非常不錯了。
掌握學習的能力,快速上手一個新技術的能力非常重要,希望本文能夠給你帶來一些啟發。

更多詳細內容參見 github 項目說明,更多高級用法可以下載源碼去看下單元測試,也可以根據源碼自行探索。

點擊查看更多內容

本文首次發布于慕課網 ,轉載請注明出處,謝謝合作

5人點贊

若覺得本文不錯,就分享一下吧!

評論

相關文章推薦

正在加載中
意見反饋 幫助中心 APP下載
官方微信

舉報

0/150
提交
取消
TLC官网 <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>