我刚到公司的时候做过一阵子测试环境搭建,很多新同事都在同一个问题上卡住:面试题里 Redis、MySQL、禅道都背过,但真到了工位上,Leader 丢来一台电脑说“把测试环境搭一下”,人直接愣住。
登录态放在 Redis,业务数据存 MySQL,Bug 和用例管在禅道。这三样东西不是开发专属,而是测试人员每天都会接触的基础设施。你不必像 DBA 那样精通 MySQL 调优,也不一定要深入 Redis 源码,但你至少要在自己的电脑上把这三个工具装好、跑起来、验证通,并且知道它们在测试工作中扮演什么角色。
这篇文章要解决的就是这个问题:从零开始,手把手带你完成 Redis、MySQL、禅道的安装部署,并且用一个登录场景把三者串起来。读完你就能独立搭出一套本地测试环境,也能理解测试数据是怎么流动的。
1. 为什么软件测试人员要学这三件套
很多测试新人有一个误区,觉得安装软件是运维或者开发的事,自己只需要会点按钮、写用例、提 Bug 就行了。但真实项目里,测试人员经常需要自己准备测试数据、验证缓存逻辑、排查环境问题。
举几个实际场景。
你测一个登录模块,发现用户第一次登录很慢,第二次就快了。产品说这是因为加了缓存,那你需要验证缓存到底生效没有。怎么验证?你得连上 Redis,看看里面有没有对应的 key,TTL 是多少,过期后是否回源数据库。如果不会 Redis,你只能干瞪眼。
你负责订单模块的测试,需要构造一批测试订单。简单的方式是直接连 MySQL,往订单表里插入几条数据,然后去页面验证列表、详情、状态流转。如果不会 MySQL,你得求开发帮你造数据,效率很低。
项目里的缺陷管理、测试用例、需求跟踪都在禅道上。提 Bug 不是简单的填个标题,你需要知道缺陷的状态流转、严重级别、关联用例这些基础操作。学会了禅道,你的测试工作才算进入了正规流程。
所以结论很明确:Redis、MySQL、禅道是测试人员的“环境三件套”。装好它们,你才能独立做测试验证,而不是处处求人。
2. 三件套的核心概念与在测试中的位置
在动手安装之前,先用最直白的话理解一下这三个东西分别是什么,否则装完也不知道自己在干什么。
2.1 Redis:内存里的“临时数据仓库”
Redis 是一个基于内存的键值数据库,读写速度非常快,所以经常被用来做缓存、会话存储、分布式锁等。
被测系统里,Redis 最常见的两个使用场景:
- 登录令牌存储:用户登录成功后,后端生成一个 token,存到 Redis 里,并设置过期时间。用户每次请求都带着 token,后端先查 Redis,查到了就放行,查不到就要求重新登录。
- 热点数据缓存:商品信息、配置信息这种读多写少的数据,第一次从数据库查出后放进 Redis,后续请求直接走缓存,减轻数据库压力。
你在简历上写“熟悉 Redis”,其实面试官考察的不只是命令,而是你是否理解缓存穿透、缓存击穿、缓存雪崩这些异常场景。要理解它们,至少得先把 Redis 跑起来,亲手操作一遍。
2.2 MySQL:数据持久化的大本营
MySQL 是关系型数据库,用来持久化存储业务数据。用户表、订单表、商品表、日志表,绝大部分数据最终都落在 MySQL 里。
测试人员跟 MySQL 打交道的方式主要是三种:
- 构造测试数据:用 INSERT 语句往表里插入数据,方便测试各种业务场景。
- 验证数据结果:执行完某个操作后,用 SELECT 语句确认数据是否写入正确、状态是否更新。
- 清理测试数据:测试完成后,把产生的脏数据删掉,避免影响后续测试。
你不需要掌握复杂的索引优化和主从复制,但增删改查、条件查询、排序、连接查询这些基础 SQL 必须熟练。这些能力在面试中也是必考的。
2.3 禅道:测试流程管理平台
禅道是一款开源的项目管理软件,在国内软件公司中使用率很高。它覆盖了产品管理、项目管理、测试管理三个核心领域。
对测试人员来说,禅道用得最多的功能是:
- 测试用例管理:编写、维护、组织用例。
- 缺陷管理:提交 Bug、跟踪缺陷状态、统计缺陷趋势。
- 测试任务:把用例关联到测试单,记录执行结果。
一个规范的测试流程通常是:在禅道里建测试用例,执行用例,发现问题就提交 Bug,Bug 由开发修复后回归验证,验证通过后关闭。全程留痕,可追溯。
2.4 三者在一套系统中的关系
用一句话概括:
禅道管的是测试工作流,Redis 和 MySQL 管的是被测系统的数据存储。
从技术架构看,一个典型系统的数据链路是:
客户端请求 → 应用服务 → 先查 Redis(缓存) ↓ 未命中 查 MySQL(数据库)从测试工作流看:
编写测试用例(禅道) → 执行测试 → 发现缺陷 → 提交 Bug(禅道) → 开发修复 → 回归验证| 工具 | 定位 | 测试人员关注点 |
|---|---|---|
| Redis | 内存缓存/会话存储 | 缓存是否生效、过期策略、数据类型、缓存一致性 |
| MySQL | 关系型数据库 | 数据准备、数据验证、数据清理、SQL 编写 |
| 禅道 | 项目管理/测试管理 | 用例管理、缺陷提交、流程跟踪 |
理解了这三者的定位,下面开始动手安装。
3. 环境准备与下载原则
安装之前,先明确几个通用原则,避免走弯路。
3.1 操作系统选择
本文会同时覆盖 Windows 和 Linux 的安装方式,因为这两类环境在实际工作中都会遇到。
- 本地练习:Windows 最方便,下载即用。
- 测试服务器部署:Linux(Ubuntu/CentOS)最常见,生产环境基本都是 Linux。
如果你用的是 Mac,Redi、MySQL 的安装方式跟 Linux 类似,可以参照 Linux 部分。
3.2 版本选择原则
版本选择记住两条:
- 优先选择官方最新稳定版,不要追最新的 beta 版。
- 如果项目有明确指定的版本,以项目要求为准。
细节:安装工具时会遇到版本号变化,本文重点演示通用流程,不锁定具体版本。
3.3 目录规划
建议在本地磁盘建一个专门的测试环境目录,把下载的安装包集中放好,比如:
D:\dev-env\ ├── redis\ ├── mysql\ └── zentao\目录清晰的好处是:环境出问题时,容易定位和清理。不要把安装包下载到桌面或者下载文件夹里,时间一长文件就找不到了。
4. Redis 安装、启动与验证
Redis 官方并不直接提供 Windows 安装包,Windows 下通常使用社区维护的版本。Linux 下则直接用系统包管理器安装即可。
4.1 Windows 安装 Redis
第一步,从 Redis 官方或可信的社区渠道下载 Windows 版本压缩包。
第二步,解压到D:\dev-env\redis,解压后目录内容大致如下:
redis-server.exe redis-cli.exe redis.windows.conf redis.windows-service.conf第三步,打开命令提示符,进入 Redis 目录,启动服务:
cd D:\dev-env\redis redis-server.exe redis.windows.conf看到类似下面的输出,说明启动成功:
[12608] 01 Jan 00:00:00.000 * Ready to accept connections tcp注意:这个窗口不要关闭,关闭窗口就相当于关闭 Redis 服务。
第四步,另开一个命令提示符窗口,验证连接:
cd D:\dev-env\redis redis-cli ping如果返回PONG,说明 Redis 已就绪。
4.2 Linux 安装 Redis
在 Ubuntu/Debian 系系统中:
sudo apt update sudo apt install redis-server在 CentOS/RHEL 系系统中:
sudo yum install redis启动服务并设置开机自启:
sudo systemctl start redis-server sudo systemctl enable redis-server验证是否启动:
redis-cli ping同样会返回PONG。
4.3 Redis 常用命令与测试验证
安装成功后,测试人员最常用的命令有哪些?我整理了一张表:
| 命令 | 作用 | 测试场景 |
|---|---|---|
| SET key value | 设置一个键值 | 模拟登录后写入 token |
| GET key | 获取键对应的值 | 验证缓存是否已写入 |
| EXPIRE key seconds | 设置过期时间 | 验证缓存是否按预期过期 |
| TTL key | 查看剩余过期时间 | 验证过期策略 |
| DEL key | 删除键 | 模拟缓存清理、验证降级逻辑 |
| FLUSHDB | 清空当前库所有数据 | 测试前清理缓存数据 |
| TYPE key | 查看数据类型 | 确认数据存储类型 |
实际测试一下缓存过期逻辑:
redis-cli进入交互模式后依次执行:
SET user:1001 zhangsan EXPIRE user:1001 60 TTL user:1001TTL会返回剩余秒数。等待 60 秒后再次执行:
GET user:1001返回(nil),说明键已过期。这个简单的操作,就是验证“登录态过期”的底层逻辑。
4.4 Redis 安装后必须确认的三件事
- 端口号默认是 6379,确认没有被占用。
- 本地练习时不需要配置密码;但如果部署到服务器,必须设置 requirepass,否则会暴露在公网被爆破。
- 如果需要后台运行,Linux 下可以修改配置文件把 daemonize 设为 yes,或者使用 systemd 管理。
5. MySQL 安装、建库与验证
MySQL 是数据持久化的核心,测试人员必须掌握安装和基本的 SQL 操作。
5.1 Windows 安装 MySQL
推荐使用官方 MySQL Installer,安装过程比较友好。
第一步,从 MySQL 官网下载 MySQL Installer。
第二步,运行安装程序,选择安装类型。测试环境建议选择 “Server only”,只安装数据库服务端,避免安装一堆用不到的功能。
第三步,在配置阶段注意几个关键项:
- 端口:默认 3306。
- 认证方式:如果本地练习,建议选择 “Use Legacy Authentication”(兼容旧版客户端),否则用默认项也可以。
- Root 密码:设置一个你自己记得住的强密码,比如
Root@123456,并妥善记录。
第四步,安装完成后,在 Windows 服务中找到 MySQL 服务,确认状态为“正在运行”。也可以手动启动:
net start mysql5.2 Linux 安装 MySQL
Ubuntu/Debian 系:
sudo apt update sudo apt install mysql-serverCentOS/RHEL 系:
sudo yum install mysql-server启动服务:
sudo systemctl start mysqld sudo systemctl enable mysqldUbuntu 安装完成后,root 默认使用 auth_socket 认证,直接运行sudo mysql就能进入 MySQL 客户端,无需密码。
CentOS 安装后,初始密码会写入日志文件:
sudo grep 'temporary password' /var/log/mysqld.log拿到初始密码后,登录并修改密码。
5.3 MySQL 安全初始化
在 Linux 上,MySQL 安装完成后通常建议运行安全初始化脚本:
sudo mysql_secure_installation这个脚本会引导你设置密码强度、移除匿名用户、禁止 root 远程登录、删除测试数据库。测试环境跟着提示选 Y 即可。
5.4 建库、建表、创建测试账号
进入 MySQL 客户端:
mysql -u root -p输入密码后,执行下面的 SQL 脚本,创建一个测试库和测试账号:
-- 创建测试数据库,指定 utf8mb4 字符集 CREATE DATABASE IF NOT EXISTS test_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; -- 创建测试账号,密码按需修改 CREATE USER IF NOT EXISTS 'tester'@'localhost' IDENTIFIED BY 'Test@123456'; -- 授予 tester 对 test_db 的增删改查权限 GRANT SELECT, INSERT, UPDATE, DELETE ON test_db.* TO 'tester'@'localhost'; -- 刷新权限 FLUSH PRIVILEGES; -- 切换到测试库 USE test_db; -- 创建一张用户表,模拟业务数据 CREATE TABLE sys_user ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL, password VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 插入一条测试数据 INSERT INTO sys_user(username, password) VALUES ('zhangsan', '123456'); -- 查询验证 SELECT * FROM sys_user;这里要特别提醒:在实际项目中,不要在测试库之外随意创建账号和授权。即使是测试环境,也要遵循最小权限原则,只给必要的权限。
5.5 验证 MySQL 连接
用命令行验证刚才创建的测试账号:
mysql -u tester -pTest@123456 test_db登录成功后执行:
SHOW TABLES;能看到sys_user表,说明 test 账号可以正常连接测试库。
5.6 字符集问题
如果插入中文后查询乱码,大概率是字符集设置不正确。建议在建库时统一使用utf8mb4,并在连接参数中指定charset=utf8mb4。
在 MySQL 8.0 中,默认字符集已经是 utf8mb4,但历史版本或手动创建的库仍可能使用 latin1,需要单独确认。
6. 禅道安装、启动与初始配置
禅道安装有几种方式:一键安装包、源码安装、Docker 安装。对测试人员来说,一键安装包最省心,它内部已经集成了 Apache、MySQL、PHP,不需要你额外配置 Web 环境。
6.1 下载一键安装包
从禅道官网下载对应操作系统的一键安装包。Windows 和 Linux 分别下载对应版本。
注意:禅道一键包自带一套 MySQL,这是给禅道自己用的,和你第 5 节装的 MySQL 是两码事。不要把两者搞混。
6.2 Windows 部署禅道
第一步,解压安装包到D:\dev-env\zentao。
第二步,进入解压目录,找到start.exe,双击运行。
程序会自动检测端口占用情况,并启动 Apache 和 MySQL 服务。
第三步,启动成功后,浏览器访问:
http://127.0.0.1如果默认 80 端口被占用,可以修改配置文件更换端口,比如改成 8081。
修改方式:在禅道安装目录中找到 Apache 的配置文件,将Listen 80改为Listen 8081,然后重启禅道。
6.3 Linux 部署禅道
下载 Linux 一键安装包后,上传到服务器,执行:
cd /opt tar -zxvf zbox-*.tar.gz解压后会生成zbox目录,启动禅道:
cd /opt/zbox ./zbox start启动后浏览器访问:
http://服务器IP同样,如果默认端口被占用,可以修改配置文件后重启。
6.4 浏览器访问与初始化
第一次访问会进入初始化引导,按提示操作即可:
- 设置管理员账号和密码(或者使用默认 admin 账号,按页面提示设置)。
- 选择部署模式,测试环境一般选“开源版”。
- 填写系统名称、公司信息等基础配置。
初始化完成后,进入禅道主界面。
6.5 测试人员在禅道中的核心操作
禅道的主导航栏中有“产品”、“项目”、“测试”等模块。测试人员最常用的路径:
- 进入“测试”模块,点击“用例”,可以新建测试用例。
- 点击“Bug”,可以提交缺陷。
- 执行测试单时,可以将用例关联到测试单,填写执行结果。
提 Bug 时注意三点:
- 标题要清晰,能一句话说明问题。
- 步骤要完整,让开发能复现。
- 预期结果和实际结果要分开写,不要混在一起。
7. 三件套联动:一个登录场景的测试模拟
工具都装好了,现在把它们串起来,模拟一个最经典的被测场景:用户登录。
7.1 场景逻辑
假设被测系统的登录逻辑是这样的:
- 用户提交用户名和密码。
- 后端校验 MySQL 中的用户表。
- 校验通过后,生成一个 token,写入 Redis,并设置 60 秒过期时间。
- 用户后续请求带着 token,后端先查 Redis,Redis 有值则放行;Redis 没有值则要求重新登录。
测试人员要验证的点包括:
- 登录成功后,Redis 里是否生成了 token?
- 60 秒后,token 是否自动失效?
- 手动删除 Redis 中的 token 后,再次访问是否被拦截?
7.2 准备测试环境
确认 Redis 和 MySQL 都在运行。
在 MySQL 的test_db库中,执行前面建好的sys_user表,并插入一条测试用户:
INSERT INTO sys_user(username, password) VALUES ('zhangsan', '123456');7.3 用 Python 模拟“先查缓存,再查数据库”
下面这段代码模拟了倒置的缓存访问逻辑。实际被测系统是 Java 或 Go 写的,但原理相同,测试人员用 Python 模拟足够看清流程。
# 文件路径:demo/login_flow.py # 演示被测系统中常见的“缓存优先”读取逻辑 import redis import pymysql CACHE_KEY = "login_token:1001" # 连接 Redis cache = redis.Redis( host="127.0.0.1", port=6379, db=0, decode_responses=True ) # 第一步:先查 Redis,看 token 是否存在 token = cache.get(CACHE_KEY) if token: print("命中缓存:token =", token) else: print("缓存未命中,查询 MySQL 用户信息") # 第二步:连接 MySQL,查用户 conn = pymysql.connect( host="127.0.0.1", port=3306, user="tester", password="Test@123456", database="test_db", charset="utf8mb4" ) cursor = conn.cursor() cursor.execute( "SELECT id, username FROM sys_user WHERE id = %s", (1001,) ) row = cursor.fetchone() cursor.close() conn.close() if row: user_id, username = row token = f"token_{user_id}_{username}" # 第三步:模拟登录成功后写入 Redis,60 秒过期 cache.set(CACHE_KEY, token, ex=60) print("从 MySQL 查询成功,已回填 Redis:token =", token) else: print("用户不存在,登录失败")运行前先安装依赖:
pip install redis pymysql运行:
python demo/login_flow.py第一次运行,因为 Redis 里没有 token,程序会查 MySQL 并回填缓存。第二次运行,直接命中缓存,不再查询数据库。
7.4 测试验证点
这个模拟脚本对应了三个明确的测试用例:
| 测试用例 | 操作 | 预期结果 |
|---|---|---|
| 验证登录后写入缓存 | 首次运行脚本 | MySQL 被查询,Redis 写入 token |
| 验证缓存命中 | 再次运行脚本 | 直接读 Redis,不再查询 MySQL |
| 验证缓存过期 | 等 60 秒再运行,或手动 DEL 后运行 | 重新查询 MySQL,再写一次 Redis |
用手动操作来验证“删除缓存后是否回源”:
redis-cli DEL login_token:1001然后再次运行 Python 脚本,会发现又走了 MySQL 查询流程。这个测试结论,和你测真实系统的缓存逻辑是完全一致的。
7.5 发现缺陷后在禅道中提交 Bug
假设你在执行第 4 步时发现:Redis 中的 token 明明删了,但页面仍然能访问。这是一个典型的“缓存清理失效”缺陷。此时应该去禅道提 Bug:
- 所属产品:选择当前项目。
- 模块:登录模块。
- 标题:删除 Redis token 后,旧 token 仍能访问接口。
- 严重程度:S2(严重)。
- 优先级:P2。
- 复现步骤:写清楚“先登录获取 token,再手动删除 Redis 键,最后携带旧 token 请求接口”。
- 预期结果:携带已删除的 token 访问接口,应该返回 401 或要求重新登录。
- 实际结果:接口返回 200,token 仍然有效。
这个操作流程,就是测试人员天天要做的事。
8. 常见问题与排查思路
安装过程中一定会遇到各种问题。我把最常踩的坑和排查方法整理成了表格,建议直接收藏。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| Redis 启动失败 | 端口 6379 被占用 | 执行netstat -ano | findstr 6379或lsof -i:6379 | 关闭占用进程,或修改 Redis 端口 |
| redis-cli 连接被拒 | Redis 服务未启动 | 检查是否有 redis-server 进程 | 启动 Redis 服务后重试 |
| MySQL 安装后无法启动 | 端口 3306 被占用 | 检查端口占用情况 | 释放端口或修改 MySQL 端口 |
| MySQL root 密码忘记 | 密码记录丢失 | 使用 skip-grant-tables 方式重置 | 参考官方文档重置密码,生产环境谨慎操作 |
| 禅道启动后页面打不开 | 80 端口被 IIS 或其他服务占用 | 查看启动日志,确认端口监听状态 | 修改禅道端口为 8081 等 |
| 禅道启动后显示 MySQL 连接失败 | 禅道自带 MySQL 未启动 | 查看 zbox 启动日志 | 手动启动 MySQL 服务,或检查端口冲突 |
| 中文字符乱码 | 字符集设置不一致 | 检查数据库、表、连接字符集 | 统一使用 utf8mb4 |
| 防火墙拦截 | 端口未放行 | 检查防火墙规则 | 测试环境可先关闭防火墙,生产环境按规则放行 |
常见问题中,重点提醒一句:如果是在服务器上安装禅道,一定要确认安全组和防火墙放行了对应端口,否则本地死活访问不通,但服务本身是正常的。
9. 最佳实践与工程建议
工具装好只是第一步,更重要的是一开始就养成好习惯。这里分享几条对测试人员最实用的建议。
9.1 环境隔离
不要在开发环境或生产环境上随便装工具做测试。最好用本地虚拟机或 Docker 搭一套独立的测试环境。
如果条件允许,优先推荐 Docker Compose 方式安装 Redis 和 MySQL:
# 文件路径:docker-compose.yml version: "3" services: redis: image: redis:7 container_name: local-redis ports: - "6379:6379" command: ["redis-server", "--appendonly", "yes"] mysql: image: mysql:8 container_name: local-mysql ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: Root@123456 MYSQL_DATABASE: test_db volumes: - ./mysql-data:/var/lib/mysql一键启动:
docker-compose up -d这种方式的好处是:环境随时可以销毁重建,不怕把本机搞乱。
9.2 密码与权限最小化
- 测试环境也尽量不要使用 root 远程连接数据库。
- 给测试人员单独创建账号,只授予测试库的权限。
- 密码不要写死在脚本里,建议使用环境变量:
export MYSQL_TEST_PASSWORD='Test@123456'在代码中读取环境变量:
import os password = os.environ.get("MYSQL_TEST_PASSWORD")9.3 学会看日志
遇到环境问题,第一反应不是重装,而是看日志。
- Redis 日志:启动时输出的窗口信息,或
logfile配置指定的文件。 - MySQL 日志:
/var/log/mysql/error.log(Ubuntu)或/var/log/mysqld.log(CentOS)。 - 禅道日志:
zbox目录下的日志文件。
看懂日志里的报错信息,比到处搜答案更高效。
9.4 测试数据管理
- 构造测试数据时加上明显的标记,比如用户名带
test_前缀。 - 测试完成后及时清理脏数据。
- 重要测试数据要备份,不要随意 DELETE 和 UPDATE。
- 涉及生产环境数据操作,必须有审批流程,先在测试环境验证。
9.5 服务管理
Windows 环境,Redis 和 MySQL 建议注册为系统服务,避免每次开机手动启动。
Linux 环境,统一使用 systemd 管理服务,并设置开机自启:
sudo systemctl enable redis-server sudo systemctl enable mysql禅道如果没有注册为服务,可以在启动脚本中配置开机自启,但考虑到禅道是测试管理工具,一般服务器部署一次后长期运行即可。
10. 总结与后续学习方向
到这,你已经完成了 Redis、MySQL、禅道的安装、验证和联动使用。回顾一下本次环境的完整流程:
- 安装并启动 Redis,用 redis-cli 完成了缓存写入、过期和删除操作。
- 安装并启动 MySQL,完成建库、建表、创建账号并插入测试数据。
- 部署禅道,完成初始化,并理解了测试人员在禅道中提 Bug 的流程。
- 用一段 Python 脚本模拟了登录场景,实际体验了“先查 Redis、未命中再查 MySQL”的缓存流程。
这套环境是你测试生涯的基础设施。建议花两天时间,把下面的内容练熟:
- Redis 的五种基本数据类型(String、Hash、List、Set、ZSet)以及对应的测试场景。
- MySQL 的子查询、连接查询、事务和索引的基本使用。
- 禅道从用例创建到缺陷关闭的完整流程。
一开始不用追求精通,先把流程跑通。环境能搭起来,命令能敲通,Bug 能提对,面试和工作的基本功就稳了。遇到报错不要慌,优先看日志,再针对关键词搜索解决方案。下次再看到“熟悉 Redis、MySQL、禅道”这类招聘要求,你就知道这三样东西不是简历上唬人的名词,而是实实在在每天要用的工具。