• Stars
    star
    184
  • Rank 209,187 (Top 5 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created almost 7 years ago
  • Updated over 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

⛵️Junit performance rely on junit5 and jdk8+.(java 性能测试框架。性能测试。压测。测试报告生成。)

junitperf

README-ENGLISH

junitperf 是一款为 java 开发者设计的性能测试框架。

Maven Central Build Status Open Source Love

为什么使用?

  • 可以和 Junit5 完美契合。

  • 使用简单,便于项目开发过程中的测试实用。

  • 提供拓展,用户可进行自定义开发。

特性

  • 支持 I18N

  • 支持多种报告生成方式,支持自定义

  • Junt5 完美支持,便于 Java 开发者使用

变更记录

变更日志

v2.0.7 主要变更

  1. 升级 heaven 依赖

快速开始

项目依赖

  • jdk1.8 及其以上版本

  • Junit5 及其以上版本

maven 导入

<dependency>
    <groupId>com.github.houbb</groupId>
    <artifactId>junitperf</artifactId>
    <version>2.0.7</version>
</dependency>

入门案例

入门案例地址

  • 使用例子
public class HelloWorldTest {

    @JunitPerfConfig(duration = 1000)
    public void helloTest() throws InterruptedException {
        Thread.sleep(100);
        System.out.println("Hello Junit5");
    }

}

配置说明

测试注解指定

@JunitPerfConfig

指定测试时的属性配置。(必填项)

属性 说明 类型 默认值 备注
threads 执行时使用多少线程执行 int 1
warmUp 准备时间 long 0 单位:毫秒
duration 执行时间 long 60_000(1分钟) 单位:毫秒
latencyStatistics 统计实现 StatisticsCalculator DefaultStatisticsCalculator
reporter 报告实现 Reporter ConsoleReporter

使用如下:

public class JunitPerfConfigTest {

    /**
     * 2个线程运行。
     * 准备时间:1000ms
     * 运行时间: 2000ms
     * @throws InterruptedException if any
     */
    @JunitPerfConfig(threads = 2, warmUp = 1000, duration = 2000)
    public void junitPerfConfigTest() throws InterruptedException {
        System.out.println("junitPerfConfigTest");
        Thread.sleep(200);
    }

}

各种报告的实现

这里主要是对于性能测试统计的输出方式。 支持以下方式:

方式 案例
默认方式 DefaultReporterTest
命令行 ConsoleReporterTest
HTML HtmlReporterTest
组合方式 MultiReporterTest
自定义方式 DefineReporterTest

@JunitPerfRequire

指定测试时需要达到的要求。(选填项)

属性 说明 类型 默认值 备注
min 最佳的运行耗时 float -1 最快的运行耗时如果高于这个值,则视为失败。单位:毫秒
max 平均的运行耗时 float -1 最坏的运行耗时如果高于这个值,则视为失败。单位:毫秒
average 平均的运行耗时 float -1 平均的运行耗时如果高于这个值,则视为失败。单位:毫秒
timesPerSecond 每秒的最小执行次数 int 0 如果低于这个最小执行次数,则视为失败。
percentiles 对于执行耗时的限定 String[] {} percentiles={"20:220", "30:250"}。20% 的数据执行耗时不得超过 220ms;30% 的数据执行耗时不得超过 250ms;

使用如下:

public class JunitPerfRequireTest {
    /**
     * 配置:2个线程运行。准备时间:1000ms。运行时间: 2000ms。
     * 要求:最快不可低于 210ms, 最慢不得低于 250ms, 平均不得低于 225ms, 每秒运行次数不得低于 4 次。
     * 20% 的数据不低于 220ms, 50% 的数据不得低于 230ms;
     *
     * @throws InterruptedException if any
     */
    @JunitPerfConfig(threads = 2, warmUp = 1000, duration = 2000)
    @JunitPerfRequire(min = 210, max = 250, average = 225, timesPerSecond = 4, percentiles = {"20:220", "50:230"})
    public void junitPerfConfigTest() throws InterruptedException {
        System.out.println("junitPerfConfigTest");
        Thread.sleep(200);
    }

}

报告方式

命令行方式

大致如下:

[INFO] [2020-06-16 20:05:53.618] [c.g.h.j.e.HelloWorldTest.helloTest] - Started at:  2020-06-16 20:05:52.512
[INFO] [2020-06-16 20:05:53.619] [c.g.h.j.e.HelloWorldTest.helloTest] - Invocations:  9
[INFO] [2020-06-16 20:05:53.620] [c.g.h.j.e.HelloWorldTest.helloTest] - Success:  9
[INFO] [2020-06-16 20:05:53.620] [c.g.h.j.e.HelloWorldTest.helloTest] - Errors:  0
[INFO] [2020-06-16 20:05:53.621] [c.g.h.j.e.HelloWorldTest.helloTest] - Thread Count:  1
[INFO] [2020-06-16 20:05:53.623] [c.g.h.j.e.HelloWorldTest.helloTest] - Warm up:  0ms
[INFO] [2020-06-16 20:05:53.623] [c.g.h.j.e.HelloWorldTest.helloTest] - Execution time:  1000ms
[INFO] [2020-06-16 20:05:53.624] [c.g.h.j.e.HelloWorldTest.helloTest] - Throughput:  9/s (Required: -1/s) - PASSED
[INFO] [2020-06-16 20:05:53.625] [c.g.h.j.e.HelloWorldTest.helloTest] - Memory cost:  16byte
[INFO] [2020-06-16 20:05:53.635] [c.g.h.j.e.HelloWorldTest.helloTest] - Min latency:  100.191414ms (Required: -1.0ms) - PASSED
[INFO] [2020-06-16 20:05:53.635] [c.g.h.j.e.HelloWorldTest.helloTest] - Max latency:  105.2382ms (Required: -1.0ms) - PASSED
[INFO] [2020-06-16 20:05:53.636] [c.g.h.j.e.HelloWorldTest.helloTest] - Avg latency:  101.43268ms (Required: -1.0ms) - PASSED

HTML 方式

页面如下:

后期会进行样式调整。

junitperf-report-html.png

指定方法执行顺序

说明

方法的执行顺序会影响到最终的报告显示顺序。

如果你想严格指定同一个类方法的执行顺序,推荐使用 Test Execution Order 的方式。

@TestMethodOrder 需要 junit5 在 5.4 及其以后版本

示例代码

参考 OrderedHtmlTest

对于 junit4 的支持

引入 jar

<dependency>
    <groupId>com.github.houbb</groupId>
    <artifactId>junitperf</artifactId>
    <version>1.0.3</version>
</dependency>

相关文档

junit4 相关使用

友情提示

I18N 功能中的中文 properties 文件直接使用 UTF-8 格式。

如果你下载本项目进行测试,出现中文乱码。

IDEA

idea 用户请勾选上图中的选项

【Setting】=》【File Encoding】勾选上 ascii 转换

idea-proerties-ascii.png

关联开源框架

data-factory 自动生成测试数据

gen-test-plugin 自动生成测试案例的 maven 插件

后期 Road-MAP

  • 内存使用统计

  • 支持线程的 sync 同步执行

  • 优化 html 输出中的英文,支持 I18N

  • 优化 html 输出中的格式,所有格式对齐

拓展阅读

基于 junit4 分析 junitperf 源码

基于 junit5 实现 junitperf 源码分析

浅谈性能测试

More Repositories

1

sensitive-word

👮‍♂️The sensitive word tool for java.(敏感词/违禁词/违法词/脏词。基于 DFA 算法实现的高性能 java 敏感词过滤工具框架。请勿发布涉及政治、广告、营销、翻墙、违反国家法律法规等内容。高性能敏感词检测过滤组件,附带繁体简体互换,支持全角半角互换,汉字转拼音,模糊搜索等功能。)
Java
4,032
star
2

sensitive

🔐Sensitive log tool for java, based on java annotation. (基于注解的 java 日志脱敏工具框架,更加优雅的日志打印。支持自定义哈希、支持基于 log4j2 插件的统一脱敏、支持 logback 插件统一脱敏)
Java
566
star
3

opencc4j

🇨🇳Open Chinese Convert is an opensource project for conversion between Traditional Chinese and Simplified Chinese.(java 中文繁简体转换)
Java
465
star
4

cache

The basic cache tool for java.(java 手写实现渐进式 redis 缓存工具)
Shell
360
star
5

awesome-metaverse-zh

Awesome metaverse projects (元宇宙精选资源汇总)
Batchfile
348
star
6

pinyin

The high performance pinyin tool for java.(java 高性能中文转拼音工具。支持同音字。)
Java
230
star
7

word-checker

🇨🇳🇬🇧Chinese and English word spelling corrector.(中文易错别字检测,中文拼写检测纠正。英文单词拼写校验工具)
Java
229
star
8

nlp-hanzi-similar

The hanzi similar tool.(汉字相似度计算工具,中文形近字算法。可用于手写汉字识别纠正,文本混淆等。)
Java
215
star
9

sisyphus

The java retry framework.(支持注解的 java 重试框架)
Java
181
star
10

markdown-toc

🎄Generate toc for github markdown file.(为 markdown 文件生成 toc 目录)
Java
167
star
11

segment

The jieba-analysis tool for java.(基于结巴分词词库实现的更加灵活优雅易用,高性能的 java 分词实现。支持词性标注。)
Java
137
star
12

mq

The message queue in java.(java 简易版本 mq 实现)
Java
113
star
13

rpc

Java rpc framework based on netty4.(java 手写 dubbo rpc 框架)
Java
97
star
14

data-factory

🏭Auto generate mock data for java test.(便于 Java 测试自动生成对象信息)
Java
87
star
15

resubmit

The repeat submit tool for java.(java 防止重复提交框架,支持注解。支持 spring, springboot 整合。)
Java
78
star
16

iexcel

📚IExcel is a java tool for create and read excel easy.(excel 读取和写入,解决 excel OOM 问题。)
Java
53
star
17

idoc

🌾Generate doc for java maven project.(java 项目自动生成文档)
Java
50
star
18

auto-log

The auto log tool for java.(java 自动日志输出,基于字节码,兼容 spring)
Java
48
star
19

validator

🚥Fluent-validation framework for java extend from hibernate-validator.(java 对象属性流式验证框架,下一代校验框架。兼容实现 jakarta bean validation、jsr 303、hibernate-validator)
Java
45
star
20

lombok-ex

Java compile time annotation, lombok extension framework.(java 编译时注解框架,对 lombok 进行扩展)
Java
43
star
21

heaven

⭐Collect basic useful tools for java dev.(收集开发中常用的工具类)
Java
37
star
22

ioc

The java ioc framework(从零开始手写模拟 spring Ioc 框架)
Java
34
star
23

word-cloud

The word cloud tool for java.(java 好用的词云工具-云图)
Java
31
star
24

nginx4j

nginx4j 是 nginx 的java 版本。
Java
31
star
25

async

🦄The async tool for java.(Java 多线程异步并行框架,基于 java 字节码,支持注解。)
Java
28
star
26

houbb.github.io

🧀The blog for github pages.
JavaScript
28
star
27

mybatis

The simple mybatis.(手写简易版 mybatis)
Java
23
star
28

csv

The csv read/write tool based on java annotation.(基于 java 注解的 CSV 文件读写框架工具。)
Java
23
star
29

rate-limit

🎃Rate limit for java.(java 渐进式限流工具框架,支持 spring springboot 字节码)
Java
22
star
30

sensitive-word-admin

The sensitive tool admin.(敏感词工具对应的控台)
HTML
20
star
31

minicat

The mini tomcat.(手写从零实现简易版 tomcat。别称【嗅虎】心有猛虎,轻嗅蔷薇。)
Java
18
star
32

jdbc-pool

The jdbc pool for java.(java 手写 jdbc 数据库连接池实现)
Java
17
star
33

lock

The distributed lock tool for java.(java 实现开箱即用基于 redis 的分布式锁,支持可重入锁获取。内置整合 spring、springboot。)
Java
8
star
34

leetcode

The leetcode problem solutions.(力扣算法个人学习笔记) 查询、排序、五大算法汇总
Java
3
star
35

houbb

my readme
1
star
36

nlp-keyword

nlp-keyword based on segment.(基于分词的 NLP keyword 关键词)
Java
1
star
37

hibernate

The simple database orm hibernate.(java 从零实现简易版本 hibernate)
Java
1
star
38

mvc

High performance web mvc framework for java.(高性能 java web mvc 框架)
Java
1
star
39

logstash4j

log stash in java.(简易版 logstash 实现)
Java
1
star