name: 测试环境管理 description: “测试环境配置、测试的基础设施即代码、Docker/Kubernetes用于测试环境、服务虚拟化和成本优化。在管理测试基础设施、确保环境一致性或优化测试成本时使用。” category: 专业化测试 priority: medium tokenEstimate: 900 agents: [qe-test-executor, qe-performance-tester, qe-chaos-engineer] implementation_status: 优化 optimization_version: 1.0 last_optimized: 2025-12-02 dependencies: [] quick_reference_card: true tags: [环境, docker, kubernetes, 基础设施, 一致性, 成本优化] trust_tier: 1 validation: schema_path: schemas/output.json
测试环境管理
<default_to_action> 当管理测试环境时:
- 定义环境类型(本地、CI、暂存、生产)
- 使用Docker容器化以确保一致性
- 确保与生产环境一致(相同版本、配置)
- 模拟外部服务(服务虚拟化)
- 优化成本(自动关机、竞价实例)
快速环境检查清单:
- 与生产相同的操作系统/版本
- 相同的数据类型和版本
- 相同的配置结构
- 容器用于可重复性
- 工作时间后自动关机
关键成功因素:
- “在我机器上工作” = 环境不一致性
- 基础设施即代码 = 可重复环境
- 服务虚拟化 = 无需外部依赖的测试 </default_to_action>
快速参考卡
何时使用
- 设置测试基础设施
- 调试环境特定故障
- 减少测试基础设施成本
- 确保开发/生产一致性
环境类型
| 类型 | 目的 | 生命周期 |
|---|---|---|
| 本地 | 快速反馈 | 开发者会话 |
| CI | 自动化测试 | 每次构建(短暂) |
| 暂存 | 预生产验证 | 持久 |
| 生产 | 金丝雀/综合 | 持续 |
开发/生产一致性检查清单
| 项目 | 必须匹配 |
|---|---|
| 操作系统 | 相同版本 |
| 数据库 | 相同类型 + 版本 |
| 依赖项 | 相同版本 |
| 配置 | 相同结构 |
| 环境变量 | 相同名称 |
Docker用于测试环境
# docker-compose.test.yml
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
environment:
NODE_ENV: test
DATABASE_URL: postgres://postgres:password@db:5432/test
depends_on:
- db
- redis
db:
image: postgres:15
environment:
POSTGRES_DB: test
POSTGRES_PASSWORD: password
redis:
image: redis:7
在容器中运行测试:
docker-compose -f docker-compose.test.yml up -d
docker-compose -f docker-compose.test.yml exec app npm test
docker-compose -f docker-compose.test.yml down
基础设施即代码
# test-environment.tf
resource "aws_instance" "test_server" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t3.medium"
tags = {
Name = "test-environment"
Environment = "test"
AutoShutdown = "20:00" # 成本优化
}
}
resource "aws_rds_instance" "test_db" {
engine = "postgres"
engine_version = "15"
instance_class = "db.t3.micro"
backup_retention_period = 0 # 测试无需备份
skip_final_snapshot = true
}
服务虚拟化
// 使用WireMock模拟外部服务
import { WireMock } from 'wiremock-captain';
const wiremock = new WireMock('http://localhost:8080');
// 模拟支付网关
await wiremock.register({
request: {
method: 'POST',
url: '/charge'
},
response: {
status: 200,
jsonBody: { transactionId: '12345', status: 'approved' }
}
});
// 测试使用模拟而非真实网关
成本优化
# 工作时间后自动关闭测试环境
0 20 * * * aws ec2 stop-instances --instance-ids $(aws ec2 describe-instances \
--filters "Name=tag:Environment,Values=test" \
--query "Reservations[].Instances[].InstanceId" --output text)
# 工作日前启动
0 7 * * 1-5 aws ec2 start-instances --instance-ids $(aws ec2 describe-instances \
--filters "Name=tag:Environment,Values=test" \
--query "Reservations[].Instances[].InstanceId" --output text)
使用竞价实例(节省70%):
resource "aws_instance" "test_runner" {
instance_type = "c5.2xlarge"
instance_market_options {
market_type = "spot"
spot_options {
max_price = "0.10"
}
}
}
代理驱动环境管理
// 配置测试环境
await Task("Environment Provisioning", {
type: 'integration-testing',
services: ['app', 'db', 'redis', 'mocks'],
parity: 'production',
lifetime: '2h'
}, "qe-test-executor");
// 在隔离环境中进行混沌测试
await Task("Chaos Test Environment", {
baseline: 'staging',
isolate: true,
injectFaults: ['network-delay', 'pod-failure']
}, "qe-chaos-engineer");
代理协调提示
内存命名空间
aqe/environment-management/
├── configs/* - 环境配置
├── parity-checks/* - 开发/生产一致性结果
├── cost-reports/* - 基础设施成本报告
└── service-mocks/* - 服务虚拟化配置
团队协调
const envFleet = await FleetManager.coordinate({
strategy: 'environment-management',
agents: [
'qe-test-executor', // 配置环境
'qe-performance-tester', // 环境性能
'qe-chaos-engineer' // 韧性测试
],
topology: 'sequential'
});
相关技能
记住
环境不一致性 = 不稳定测试。 “在我机器上工作”问题源于:不同的操作系统/版本、缺失依赖、配置差异、数据差异。
基础设施即代码确保可重复性。 版本控制环境配置。按需创建相同环境。
使用代理: 代理自动配置与生产匹配的测试环境,确保一致性,模拟外部服务,并通过自动扩展和自动关机优化成本。