测试套件就像是把相关的测试用例打包成一个"套餐",让你可以一次性执行多个相关的测试。本文档将详细介绍如何在巧克力测试平台中管理测试套件。
测试套件是一组相关测试用例的集合,它们通常具有相同的测试目标、测试环境或业务场景。通过套件,你可以批量管理和执行测试用例。
interface TestSuite {
id: number;
suite_name: string; // 套件名称
describe: string; // 套件描述
project: { // 所属项目
id: number;
project_name: string;
};
case_sences: string[]; // 包含的测试场景
test_type: string; // 测试类型
test_env: string; // 测试环境
add_time: string; // 创建时间
update_time: string; // 更新时间
case_count: number; // 用例数量
last_execution?: { // 最后执行信息
time: string;
status: string;
pass_rate: number;
};
}导航路径: 接口测试 → 套件管理 → 新建套件
{
"suite_name": "用户模块核心功能测试套件",
"describe": "包含用户注册、登录、信息管理等核心功能的测试用例",
"project": 1,
"test_type": "接口测试",
"test_env": "test"
}有多种方式选择测试用例:
按模块选择
# 选择整个用户模块的所有用例
module: "user_module"
# 自动包含该模块下的所有测试用例按场景选择
# 选择特定测试场景
scenes: ["用户登录", "用户注册", "用户信息修改"]
# 包含这些场景相关的所有用例手动选择
# 手动勾选具体的测试用例
case_ids: "1,2,3,5,8,13,21"智能推荐
# 基于历史数据和关联性推荐相关用例
recommendation_type: "related_cases"
base_case_id: 1{
"execution_config": {
"mode": "parallel", // parallel | sequential
"max_workers": 3, // 并行执行的最大worker数
"timeout": 1800, // 超时时间(秒)
"retry_count": 2, // 失败重试次数
"retry_interval": 30, // 重试间隔(秒)
"stop_on_failure": false, // 遇到失败是否停止
"continue_on_error": true // 遇到错误是否继续
}
}{
"environment_config": {
"test_env": "test",
"base_url": "http://test-api.example.com",
"database": "test_database",
"variables": {
"api_key": "${TEST_API_KEY}",
"timeout": 30,
"debug": true
}
}
}{
"notification_config": {
"on_start": true,
"on_complete": true,
"on_failure": true,
"recipients": ["test-team@example.com"],
"channels": ["email", "dingtalk"]
}
}套件列表显示以下信息:
- 套件名称: 点击可查看详情
- 套件描述: 简要说明
- 所属项目: 归属的项目
- 用例数量: 包含的测试用例数
- 测试环境: 配置的测试环境
- 最后执行: 最近一次执行的时间和结果
- 创建时间: 套件创建时间
interface SuiteFilterParams {
project?: number; // 项目筛选
suite_name?: string; // 套件名称搜索
test_env?: string; // 环境筛选
test_type?: string; // 类型筛选
case_count_range?: [number, number]; // 用例数量范围
last_execution_status?: string; // 最后执行状态
date_range?: [string, string]; // 创建时间范围
}- 批量执行: 同时执行多个测试套件
- 批量删除: 删除选中的测试套件
- 批量复制: 复制套件到其他项目
- 批量导出: 导出套件配置信息
- 批量修改环境: 批量修改测试环境
- 🏃 立即执行: 立即执行测试套件
- 👁️ 查看详情: 查看套件详细信息
- ✏️ 编辑套件: 修改套件配置
- 📊 执行历史: 查看历史执行记录
- 📋 用例列表: 查看包含的测试用例
- 🗑️ 删除套件: 删除测试套件
- 快速复制: 基于现有套件创建新套件
- 同步用例: 同步最新的测试用例
- 导出配置: 导出套件配置文件
- 导入配置: 从配置文件导入套件
当测试用例发生变化时,相关的测试套件可以自动同步更新。
- 新增测试用例
- 删除测试用例
- 修改测试用例
- 模块结构变化
class SuiteSyncStrategy:
AUTO_ADD_NEW_CASES = True # 自动添加新用例
AUTO_REMOVE_DELETED_CASES = True # 自动移除已删除用例
NOTIFY_ON_CHANGES = True # 变更时通知
BACKUP_BEFORE_SYNC = True # 同步前备份
def sync_suite(self, suite_id, changes):
# 实现同步逻辑
pass# 根据用例场景同步套件
POST /api/auto_pytest/sync_suite_by_case_ids
{
"suite_id": 1,
"case_sences": ["用户登录", "用户注册", "用户信息修改"],
"sync_mode": "merge" # merge | replace | append
}# 立即执行测试套件
POST /api/auto_pytest/run_suite
{
"suite_id": 1,
"environment": "test",
"execution_config": {
"mode": "parallel",
"max_workers": 3,
"timeout": 1800
}
}通过测试计划实现定时执行:
{
"plan_name": "每日回归测试",
"suite_id": 1,
"cron": "0 2 * * *",
"environment": "test",
"is_enabled": true
}# 通过API触发执行(用于CI/CD集成)
curl -X POST "http://api.example.com/api/auto_pytest/run_suite" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"suite_id": 1,
"environment": "test",
"trigger_source": "jenkins",
"build_number": "123"
}'interface SuiteExecutionStatus {
suite_id: number;
execution_id: string;
status: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
progress: {
total_cases: number;
completed_cases: number;
passed_cases: number;
failed_cases: number;
skipped_cases: number;
progress_percentage: number;
};
start_time: string;
estimated_end_time?: string;
current_case?: {
case_id: number;
case_name: string;
start_time: string;
};
}- ⏸️ 暂停执行: 暂停正在执行的套件
▶️ 继续执行: 恢复暂停的执行- 🛑 停止执行: 强制停止执行
- 🔄 重新执行: 重新执行失败的用例
interface SuiteExecutionResult {
suite_id: number;
execution_id: string;
start_time: string;
end_time: string;
duration: number;
environment: string;
summary: {
total_cases: number;
passed_cases: number;
failed_cases: number;
skipped_cases: number;
pass_rate: number;
};
case_results: Array<{
case_id: number;
case_name: string;
status: string;
duration: number;
error_message?: string;
}>;
performance: {
avg_case_duration: number;
slowest_case: {
case_id: number;
duration: number;
};
fastest_case: {
case_id: number;
duration: number;
};
};
}interface SuiteTrend {
suite_id: number;
date_range: [string, string];
executions: Array<{
date: string;
execution_count: number;
pass_rate: number;
avg_duration: number;
failure_count: number;
}>;
trends: {
pass_rate_trend: 'improving' | 'declining' | 'stable';
duration_trend: 'faster' | 'slower' | 'stable';
stability_score: number;
};
}interface SuiteQuality {
suite_id: number;
quality_score: number; // 质量评分 (0-100)
metrics: {
stability: number; // 稳定性 (0-100)
performance: number; // 性能 (0-100)
coverage: number; // 覆盖率 (0-100)
maintainability: number; // 可维护性 (0-100)
};
issues: Array<{
type: 'flaky_test' | 'slow_test' | 'outdated_test';
case_id: number;
case_name: string;
severity: 'high' | 'medium' | 'low';
description: string;
}>;
}class SuiteOptimizer:
def optimize_execution_order(self, suite_id):
"""优化用例执行顺序"""
# 根据历史执行时间和依赖关系优化顺序
pass
def remove_redundant_cases(self, suite_id):
"""移除冗余用例"""
# 识别和移除功能重复的用例
pass
def balance_parallel_execution(self, suite_id):
"""平衡并行执行"""
# 优化并行执行的用例分配
passclass SuiteCaseManager:
def add_cases_by_pattern(self, suite_id, pattern):
"""按模式添加用例"""
# 根据命名模式或标签模式添加用例
pass
def remove_outdated_cases(self, suite_id):
"""移除过时用例"""
# 移除长期失败或不再维护的用例
pass
def update_case_priority(self, suite_id):
"""更新用例优先级"""
# 根据业务重要性调整用例执行优先级
passinterface SuiteVersion {
version: string; // 版本号
suite_id: number;
changes: {
added_cases: number[]; // 新增用例
removed_cases: number[]; // 移除用例
config_changes: object; // 配置变更
};
change_log: string; // 变更日志
author: string; // 修改人
create_time: string; // 创建时间
}class SuiteBackup:
def backup_suite(self, suite_id):
"""备份套件配置"""
suite_config = {
'suite_info': self.get_suite_info(suite_id),
'case_list': self.get_suite_cases(suite_id),
'execution_config': self.get_execution_config(suite_id),
'backup_time': datetime.now().isoformat()
}
return suite_config
def restore_suite(self, backup_data):
"""恢复套件配置"""
# 从备份数据恢复套件
pass用户管理套件
├── 用户注册相关用例
├── 用户登录相关用例
└── 用户信息管理用例
订单管理套件
├── 订单创建相关用例
├── 订单支付相关用例
└── 订单状态管理用例
冒烟测试套件
├── 核心功能验证用例
└── 基础接口可用性用例
回归测试套件
├── 全功能验证用例
└── 边界条件测试用例
性能测试套件
├── 响应时间测试用例
└── 并发压力测试用例
每日执行套件
├── 核心业务流程用例
└── 关键接口验证用例
每周执行套件
├── 完整功能回归用例
└── 兼容性测试用例
按需执行套件
├── 专项测试用例
└── 调试验证用例
- Fast: 执行速度快
- Independent: 用例间相互独立
- Repeatable: 可重复执行
- Self-Validating: 自动验证结果
- Timely: 及时反馈结果
- 合理规模: 套件大小适中,便于管理和执行
- 清晰分类: 按业务逻辑或技术特性分类
- 定期维护: 定期更新和优化套件内容
- 版本管理: 记录套件变更历史
- 性能监控: 监控套件执行性能
🎉 套件管理大师! 你已经掌握了测试套件管理的精髓。记住,好的套件设计能让测试工作事半功倍!