单元测试
单元测试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 ID | Description |
|---|---|
| heapdump | 返回一个GZip压缩的JVM堆dump |
| jolokia | Exposes JMX beans over HTTP |
| logfile | 返回log file中的内容(如果logging.file或者logging.path被设置) |
| prometheus | 公开指标,该格式可以被Prometheus服务器采集 |
management: endpoint: health: # 显示健康 详细信息 show-details: always开启与禁用endpoint
management: endpoint: beans: enabled: truemetrics endpoint
提供详细的,层级的,空间指标信息,这些信息可以被pull或者push
- 通过metrics对接多种监控系统
- 简化核心metrics开发
- 添加自定义metrics或者扩展已有的metrics
。。。
springboot admin server 服务端新建一个springboot项目
导包主启动类de.codecentric spring-boot-admin-starter-server 2.1.5
加上
@EnableAdminServer
地址栏直接输入 localhost:服务端端口号即可
客户端 导包ymlde.codecentric spring-boot-admin-starter-client 2.1.4
# 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 # 客户端应用名称



