栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboot单元测试和指标监控

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot单元测试和指标监控

单元测试

单元测试

JUnit5=JUnit Platform + JUnit Jupiter + JUnit Vintage

JUnit Platform 是在jvm上启动测试框架的基础

JUnit Jupiter 提供Junit5的新的编程模型,包含了 测试引擎,用于在Junit Platform上运行

JUnit Vintage 兼容JUnit4 ,JUnit3

使用

    org.springframework.boot
    spring-boot-starter-test
    test

import org.junit.jupiter.api.Test;

@SpringBootTest
public class A {
	@Test
	public void test() {
		
	}
}
常用注解
@SpringBootTest
@DisplayName("JUnit5功能测试类")
public class JUnit5Test {
    
	@RepeatedTest(5) // 重复测试5次
    @DisplayName("测试displayName注解")
    @Test
    void testDisplayName() {
        System.out.println("aaa");
    }
    
    // 超过0.5s则报错
    @Timeout(value = 500, unit = TimeUnit.MICROSECONDS)
    @Test
    void test2() {
        System.out.println("2");
    }

    @BeforeEach
    void testBeforeEach() {
        System.out.println("start");
    }

    @AfterEach
     void testAfterEach() {
        System.out.println("end");
    }

    @BeforeAll
    static void testBeforeAll() {
        System.out.println("所有测试开始了");
    }
	
    @Disabled // 不会运行
    @AfterAll
    static void testAfterAll() {
        System.out.println("所有测试结束了");
    }
}
断言机制

assertions 断言,是满足条件的

所有测试运行结束后,会有一个详细的测试报告

import static org.junit.jupiter.api.Assertions.*;
@DisplayName("JUnit5功能测试类")
public class JUnit5Test {


    @DisplayName("简单断言测试")
    @Test
    void testAssertions() {
        int cal = cal(1, 2);
        // 第一个参数是期望值,第二个参数是实际值
        assertEquals(5, cal, "计算");
        // 前面失败,后面不执行
        // 比较值
        assertArrayEquals(new int[]{1, 1}, new int[]{1, 1}, "数组");
        Object o = new Object();
        Object o2 = new Object();
        // 比较引用地址
        assertSame(o,o2); 
        assertAll("text",
                    () -> assertTrue(true && true, "结果不为true"),
                    () -> assertEquals(1,2,"结果不是1"));
       // () -> 是创建了 Executable 抽象类的匿名内部类
       fail("快速失败");
    }

    int cal(int i, int j) {
        return i + j;
    }
}

idea右侧 maven-》项目 -》clean-》test,运行所有单元测试,生成报告

int i = 1;
assert i < 0 : "aaa";
System.out.println("a");
// 如果报错,则返回 aaa,正确 则往下执行,打印a

还有一个Assert 是spring框架的工具类

Assert.isNull isTrue … …

前置条件

方法执行的前置条件,不满足则不执行

@DisplayName("前置条件")
    @Test
    public void testAssumptions1() {
        Assumptions.assumeTrue(false, "结果不是true");
        System.out.println("a");
    }
嵌套测试
@BeforeEach
@Test
void T {
	
}

@Nested
@DisplayName("嵌套测试")
class Test () {
	@Test
	void isEmpty() {
		
	}
	
	@Nested
	void Test2() {
		
	}
}

外层的测试不能让 内层的@BeforeEach (After),@BeforeAll(After)运行

内部的嵌套测试会先执行外部的@Before/after ,在执行自己的@Before/after

参数化测试

不同的参数多次运行测试

@SpringBootTest
public class JUnit5Test {

    @ParameterizedTest
    @DisplayName("参数化测试")
    @ValueSource(ints = {1, 2, 3, 4})
    void test(int i) {
        System.out.println(i);
    }

    @ParameterizedTest
    @MethodSource("s")
    void testMethod(String string) {
        System.out.println(string);
    }

    static Stream s() {
        return Stream.of("a", "b", "c");
    }
}
指标监控 SpringBoot Actuator

用于监控,追踪,审计… …

1.x与2.x的对比

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MPGzWuSi-1633334693480)(SpringBoot.assets/image-20210831120424089.png)]

导包

    org.springframework.boot
    spring-boot-starter-actuator

里面还有mrcrometer-core

yml

暴露所有端点

# actuator配置
management:
  endpoints:
    web:
      exposure:
        include: "*" # 暴露所有监控端点
    enabled-by-default: true # 开启所有监控端点(默认)
访问
http://localhost:8060/actuator
http://localhost:8060/actuator/health
http://localhost:8060/actuator/info
... ...
// 只要在actuator/ 后面加上endpoint 即可
endpoints

有jmx 和web的形式

jconsole

auditevent显示应用暴露的审计事件(比如认证进入、订单失败)
beans显示在您的应用程序的所有的Spring bean的完整列表。
caches公开可用的高速缓存
conditions显示了配置和自动配置类,为什么他们没有或不匹配的原因进行评估的条件。
configprops显示所有@ConfigurationProperties的词整理表。
env显示当前的环境特性
flyway显示数据库迁移路径的详细信息
health显示应用的健康状态
httptrace显示HTTP足迹,最近100个HTTP request/reponse
info显示应用的基本信息
integrationgraph显示Spring集成图形。需要在弹簧集成核心的依赖
loggers显示和修改配置的loggers
liquibase显示已应用于任何Liquibase数据库迁移
metrics显示应用多样的指标信息
mappings显示所有的@RequestMapping路径
scheduledtasks显示应用中的调度任务
sessions允许从支持Spring会话的会话存储中检索和删除用户会话。需要使用Spring会话的基于Servlet的web应用程序。
shutdown优雅地逐步关闭应用
threaddump执行一个线程dump

Web 应用程序特有的Endpoints

如果你的应用程序是一个web应用程序(Spring MVC、Spring WebFlux或Jersey),你可以使用以下附加端点:

Endpoint IDDescription
heapdump返回一个GZip压缩的JVM堆dump
jolokiaExposes JMX beans over HTTP
logfile返回log file中的内容(如果logging.file或者logging.path被设置)
prometheus公开指标,该格式可以被Prometheus服务器采集
显示详细信息
management:
 endpoint:
  health: # 显示健康 详细信息
   show-details: always
开启与禁用endpoint
management:
 endpoint:
  beans: 
   enabled: true
metrics endpoint

提供详细的,层级的,空间指标信息,这些信息可以被pull或者push

  • 通过metrics对接多种监控系统
  • 简化核心metrics开发
  • 添加自定义metrics或者扩展已有的metrics
定制endpoint

。。。

springboot admin server 服务端

新建一个springboot项目

导包

    de.codecentric
    spring-boot-admin-starter-server
    2.1.5

主启动类

加上

@EnableAdminServer

地址栏直接输入 localhost:服务端端口号即可

客户端 导包

    de.codecentric
    spring-boot-admin-starter-client
    2.1.4

yml
# actuator配置
management:
  endpoints:
    web:
      exposure:
        include: "*"
# springboot配置
spring:
  boot:
    admin:
      client:
        url: http://localhost:8061 # 这个地址是admin server的地址
        instance:
          prefer-ip: true # 使用ip注册进去
  application:
    name: demo-8060 # 客户端应用名称
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/292872.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号