2. 环境准备:JDK、Maven/Gradle、Redis Server、Spring Boot 项目脚手架搭建

回归冒烟测试的执行依赖一套稳定、可复现的本地开发环境。本节将按照“运行时 → 构建工具 → 缓存中间件 → 项目骨架”的顺序,逐一完成环境安装与验证,确保后续所有测试用例能在统一基线之上运行。

2.1 环境清单与版本选型

为避免因版本差异导致的兼容性问题,下表列出本次课程推荐的最低版本及已验证的稳定组合。请严格参照此表进行安装。

组件 推荐版本 最低版本 验证目的
JDK 17 LTS 11 LTS Spring Boot 3.x 原生支持,Record、密封类等语法
Maven 3.9.6 3.6.3 依赖解析、插件执行、多模块构建
Gradle 8.5 7.5 增量编译、缓存任务、Kotlin DSL
Redis Server 7.2.4 6.2 缓存穿透/击穿/雪崩场景模拟、Lua 脚本支持
Spring Boot 3.2.2 3.0.0 自动配置、@Cacheable 注解、Actuator 健康检查
选型建议: 若团队仍在使用 JDK 11,可选用 Spring Boot 2.7.x 配合 Redis 6.x,但后续章节中部分基于虚拟线程和新的 Redis 客户端(Lettuce 6.3+)的优化示例将无法运行。建议优先升级至 JDK 17。

2.2 JDK 安装与验证

以 JDK 17(Eclipse Temurin 发行版)为例,安装后需在终端执行以下验证命令:

# 检查 Java 版本
java -version

# 输出示例(应包含 "17.0.10" 或更高)
openjdk version "17.0.10" 2024-01-16 LTS
OpenJDK Runtime Environment Temurin-17.0.10+7 (build 17.0.10+7)
OpenJDK 64-Bit Server VM Temurin-17.0.10+7 (build 17.0.10+7, mixed mode, sharing)

# 检查 javac 编译器
javac -version
# 输出示例:javac 17.0.10
常见陷阱: 确保 JAVA_HOME 环境变量指向 JDK 安装目录,而非 JRE。Spring Boot Maven/Gradle 插件在编译阶段依赖 JAVA_HOME 下的 lib/tools.jar(JDK 9+ 已移除该文件,但插件会自动适配)。若使用 IDE 内嵌 JDK,请在终端中单独验证一次。

2.3 构建工具配置:Maven 与 Gradle 二选一

本课程同时提供 Maven 和 Gradle 两种构建脚本。请根据团队技术栈选择其一,并确保本地已安装对应工具。

2.3.1 Maven 配置要点

# 验证 Maven 版本
mvn -version

# 输出示例
Apache Maven 3.9.6 (bc0240f3c744d6b6ff327b3b5f9a9e2f5f5f5f5f)
Maven home: /opt/homebrew/Cellar/maven/3.9.6/libexec
Java version: 17.0.10, vendor: Eclipse Adoptium, runtime: /Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home

在 ~/.m2/settings.xml 中建议添加阿里云镜像仓库,加速依赖下载:

<mirrors>
    <mirror>
        <id>aliyunmaven</id>
        <mirrorOf>central</mirrorOf>
        <name>阿里云公共仓库</name>
        <url>https://maven.aliyun.com/repository/central</url>
    </mirror>
</mirrors>

2.3.2 Gradle 配置要点

# 验证 Gradle 版本
gradle -version

# 输出示例
------------------------------------------------------------
Gradle 8.5
------------------------------------------------------------
Build time:   2024-01-30 16:58:16 UTC
Revision:     bd6b8c9b3c8b5c8b5c8b5c8b5c8b5c8b5c8b5c8b
Kotlin:       1.9.22
Groovy:       3.0.17
Ant:          Apache Ant 1.10.13
JVM:          17.0.10 (Eclipse Adoptium 17.0.10+7)
OS:           Mac OS X 14.3.1 aarch64

在 ~/.gradle/init.gradle 中配置阿里云仓库:

allprojects {
    repositories {
        maven { url 'https://maven.aliyun.com/repository/public' }
        mavenCentral()
    }
}

2.4 Redis Server 安装与启动

Redis 是缓存层的核心中间件。回归冒烟测试要求 Redis 在本地以非保护模式运行,并开启 AOF 持久化以便测试后数据清理。

2.4.1 安装方式对比

操作系统 推荐方式 命令/步骤
macOS Homebrew brew install redis && brew services start redis
Ubuntu/Debian apt sudo apt update && sudo apt install redis-server
Windows WSL2 或 Docker docker run -d --name redis -p 6379:6379 redis:7.2
Docker(通用) docker-compose 见下方 docker-compose.yml 示例

2.4.2 验证 Redis 可用性

# 启动后验证
redis-cli ping
# 应返回:PONG

# 检查基本读写
redis-cli set test:smoke "hello"
redis-cli get test:smoke
# 应返回:"hello"

# 清理测试数据
redis-cli del test:smoke
冒烟测试专用配置: 在 redis.conf 中设置 save "" 禁用自动 RDB 快照,避免测试期间磁盘 I/O 干扰;同时设置 appendonly yes 开启 AOF,便于测试后执行 FLUSHALL 重置状态。

2.5 Spring Boot 项目脚手架搭建

使用 Spring Initializr(start.spring.io)或 IDE 内置向导生成项目。以下为 Maven 项目的核心依赖配置:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.2</version>
        <relativePath/>
    </parent>

    <groupId>com.cache.smoke</groupId>
    <artifactId>redis-cache-smoke-test</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <name>Redis Cache Regression Smoke Test</name>

    <properties>
        <java.version>17</java.version>
    </properties>

    <dependencies>
        <!-- Web 支持,用于测试控制器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Redis 缓存与数据访问 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

        <!-- 缓存抽象层 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>

        <!-- 健康检查与指标 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!-- 测试框架 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

2.6 环境依赖关系总览

下图展示了各组件在回归冒烟测试执行过程中的调用链路与数据流向:

回归冒烟测试环境依赖关系 回归冒烟测试 Maven / Gradle Spring Boot 应用 JDK 17 运行时 Redis Server 7.2 端口 6379 | AOF 持久化 | 非保护模式 Spring Cache 抽象(@Cacheable / @CacheEvict) Lettuce 客户端连接池 | RedisTemplate 序列化 Actuator 健康检查 / RedisCli 手动验证

2.7 脚手架验证:启动与健康检查

完成上述配置后,执行以下命令验证项目能否正常启动并连接 Redis:

# Maven 启动
mvn spring-boot:run

# 或 Gradle 启动
gradle bootRun

启动成功后,访问 Actuator 健康端点确认 Redis 连接状态:

curl http://localhost:8080/actuator/health

# 预期返回(Redis 状态为 UP)
{
  "status": "UP",
  "components": {
    "redis": {
      "status": "UP",
      "details": {
        "version": "7.2.4"
      }
    }
  }
}
快速排障: 若 Redis 状态显示 DOWN,请依次检查:① Redis 进程是否运行(ps aux | grep redis);② 端口是否被占用(lsof -i :6379);③ Spring Boot 配置文件中 spring.data.redis.host 和 spring.data.redis.port 是否与本地 Redis 一致。

2.8 环境就绪检查清单

在进入下一章之前,请逐项确认以下条目全部通过:

  • JDK:java -version 输出 ≥ 17,且 JAVA_HOME 已正确设置。
  • 构建工具:mvn -version 或 gradle -version 输出正常,且阿里云镜像已配置。
  • Redis:redis-cli ping 返回 PONG,且 AOF 已开启。
  • Spring Boot 项目:mvn spring-boot:run 启动无报错,/actuator/health 返回 redis: UP。
  • 测试数据隔离:已确认测试用 Redis 实例不包含生产或其他环境数据。
基线锁定: 建议将上述验证步骤写入团队 CI 的“环境预检”阶段,确保每次运行回归冒烟测试前,环境状态与本章搭建的基线完全一致。后续所有缓存层测试用例都将基于此基线执行。