首页 > 编程语言 >为 java 开发者设计的性能测试框架,用于压测+测试报告生成

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

时间:2024-03-18 21:45:49浏览次数:35  
标签:06 20 测试报告 HelloWorldTest 16 压测 2020 java helloTest

拓展阅读

junit5 系列教程

基于 junit5 实现 junitperf 源码分析

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

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

junitperf

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

为什么使用?

  • 可以和 Junit5 完美契合。

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

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

特性

  • 支持 I18N

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

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

快速开始

项目依赖

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

页面如下:

后期会进行样式调整。

HTML 形式

指定方法执行顺序

说明

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

如果你想严格指定同一个类方法的执行顺序,推荐使用 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 相关使用

标签:06,20,测试报告,HelloWorldTest,16,压测,2020,java,helloTest
From: https://www.cnblogs.com/houbbBlogs/p/18081502

相关文章

  • Java 入门 - 常用的dos命令
    切换盘符盘符名:->回车查看当前路径下的文件或者文件夹dir进入指定文件夹下cd文件夹名字进入到多级文件夹下cd文件夹名字\文件夹名字退到上一级目录cd..或者cd..直接退到磁盘位置(退至根目录)cd\或者cd\清屏cls 退出黑窗口 exit......
  • java软考网络工程师在线练习平台(ssm框架毕业设计)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在当今信息化社会,网络技术已经渗透到了我们生活和工作的方方面面。随着互联网的普及和发展,网络工程师成为了企业、政府及各类组织不可或缺的重要岗位。为......
  • java睿道教育平台在线考试子系统(ssm框架毕业设计)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在信息技术日新月异的今天,传统的考试方式正逐渐被在线考试系统所取代。随着互联网技术的不断发展和普及,越来越多的教育机构开始采用在线考试子系统来进行......
  • java三方融资租赁线上管理(ssm框架毕业设计)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的不断发展和普及,各行各业都开始逐渐转向线上运营,以提高效率并降低成本。在金融领域,特别是融资租赁行业,线上管理已经成为一种趋势。三方融......
  • java三味书屋图书借阅与售卖系统(ssm框架毕业设计)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在数字化和信息化快速发展的当代社会,图书作为知识传播的重要媒介之一,其流通方式也在不断进化。传统的图书馆或书店面临着数字化转型的挑战与机遇,而新兴的......
  • 亲子游戏【华为OD机试JAVA&Python&C++&JS题解】
    题目描述宝宝和妈妈参加亲子游戏,在一个二维矩阵(NN)的格子地图上,宝宝和妈妈抽签决定各自的位置,地图上每个格子有不同的糖果数量,部分格子有障碍物。游戏规则是妈妈必须在最短的时间(每个单位时间只能走一步)到达宝宝的位置,路上的所有糖果都可以拿走,不能走障碍物的格子,只能上下......
  • JavaScript学习笔记6: 对象 - 字符串Stirng
    JS对象-字符串String字符串的创建方式<script>//字符串创建方式1varstr1=newString("str1");//字符串创建方式2varstr2="str2";</script>字符串属性&方法length属性<script>console.log("获取字符串的length属性");    con......
  • JavaScript学习笔记7: 对象 - 自定义对象&JSON
    JS对象-自定义对象&JSON自定义对象类似java的类Json的所有属性(key)需要用双引号包围,本质是字符串<script>    varuser={    name:"tom",    age:10,    gender:"male",    //eat:function(){}    //可以简写为    eat(){//自......
  • CSSE2002 java项目描述
    大型编程(CSSE2002)课业1-学期1,2024EEC学校昆士兰州大学必须通过做事来学习;因为你认为您知道,直到尝试之前,您都无法确定。-Sophocles不要打扰。修订1.1.0概述此任务提供了基于一个基于一个Java项目的实用经验提供的规格。该规范以Javadocs的形式提供,该规范描述了您的课......
  • Java 文件处理完全指南:创建、读取、写入和删除文件详细解析
    Java文件操作文件处理简介文件处理是任何应用程序的重要部分。Java提供了许多用于创建、读取、更新和删除文件的方法。Java文件处理Java中的文件处理主要通过java.io包中的File类完成。该类允许我们处理文件,包括创建、读取、写入和删除文件。创建File对象要使用F......