为 java 开发者设计的性能测试框架,用于压测+测试报告生成

junitperf

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

为什么使用?

  • 可以和 Junit5 完美契合。

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

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

特性

  • 支持 I18N

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

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

快速开始

项目依赖

  • jdk1.8 及其以上版本

  • Junit5 及其以上版本

maven 导入

 

xml

复制代码

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

入门案例

入门案例地址

  • 使用例子
 

java

复制代码

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

配置说明

测试注解指定

@JunitPerfConfig

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

属性说明类型默认值备注
threads执行时使用多少线程执行int1
warmUp准备时间long0单位:毫秒
duration执行时间long60_000(1分钟)单位:毫秒
latencyStatistics统计实现StatisticsCalculatorDefaultStatisticsCalculator
reporter报告实现ReporterConsoleReporter

使用如下:

 

java

复制代码

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
HTMLHtmlReporterTest
组合方式MultiReporterTest
自定义方式DefineReporterTest

@JunitPerfRequire

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

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

使用如下:

 

java

复制代码

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); } }

报告方式

命令行方式

大致如下:

 

less

复制代码

[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 方式

页面如下:

后期会进行样式调整。

HTML 形式

指定方法执行顺序

说明

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

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

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

示例代码

参考 OrderedHtmlTest

对于 junit4 的支持

引入 jar

 

xml

复制代码

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值