自动化测试平台数据库接口设计文档
项目概述
我这个项目是一个基于Django框架的自动化测试平台,集成了测试用例管理、测试执行、缺陷管理、AI智能助手、RAG知识库等功能。系统采用前后端分离架构,提供RESTful API接口,支持测试自动化、智能分析和团队协作。
数据库设计总览
核心架构特点
- ORM框架: Django ORM(这也是django项目的标准设计框架,性能比较好)
- 数据库引擎: 支持MySQL、PostgreSQL等
- 字符集: UTF-8
- 时区处理: UTC+8 (Asia/Shanghai)–这块大家要注意了,时区一定要设置好,不然后期很麻烦
- 索引策略: 单字段索引 + 复合索引优化–考虑到后期可能会有数据比较大的情况,所以加了索引,提前避免后期的数据问题,主要原因还是因为像测试用例、测试环境、测试套件、测试计划、测试报告这些模块的数据实际上都有比较强的关联
- 数据完整性: 外键约束 + 软删除机制
数据库模块分类
- 用户与权限模块 - 用户管理、认证授权
- 项目管理模块 - 项目组织、环境配置
- 测试核心模块 - 用例、套件、执行、结果
- 质量管理模块 - 缺陷跟踪、统计分析
- AI智能模块 - 助手对话、知识库、文件解析
- 系统支撑模块 - 日志、配置、文件管理
详细数据库结构
1. 用户与权限模块
1.1 UserProfile - 用户扩展信息
CREATE TABLE test_platform_userprofile (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
phone VARCHAR(20),
department VARCHAR(100),
position VARCHAR(100),
avatar VARCHAR(255),
last_login_ip VARCHAR(50),
user_id INT UNIQUE NOT NULL,
FOREIGN KEY (user_id) REFERENCES auth_user(id)
);
字段说明:
user_id
: 关联Django内置用户表phone
: 手机号码department
: 部门信息position
: 职位信息avatar
: 头像URLlast_login_ip
: 最后登录IP
2. 项目管理模块
2.1 Project - 项目管理
CREATE TABLE test_platform_project (
project_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
description TEXT NOT NULL,
created_at DATETIME(6) NOT NULL,
updated_at DATETIME(6) NOT NULL,
is_deleted BOOLEAN DEFAULT FALSE,
is_active INT DEFAULT 0,
user_id INT,
FOREIGN KEY (user_id) REFERENCES auth_user(id)
);
2.2 TestEnvironment - 测试环境
CREATE TABLE test_platform_testenvironment (
environment_id INT AUTO_INCREMENT PRIMARY KEY,
host VARCHAR(255) NOT NULL,
port INT NOT NULL,
base_url VARCHAR(255) NOT NULL,
protocol VARCHAR(50) NOT NULL,
token VARCHAR(255) NOT NULL,
db_host VARCHAR(255) NOT NULL,
db_port INT NOT NULL,
db_name VARCHAR(255) NOT NULL,
db_user VARCHAR(50) NOT NULL,
db_password VARCHAR(50) NOT NULL,
time_out INT NOT NULL,
description TEXT NOT NULL,
content_type VARCHAR(50) NOT NULL,
charset VARCHAR(50) NOT NULL,
env_name VARCHAR(50) NOT NULL,
version VARCHAR(50) NOT NULL,
headers TEXT,
project_id INT NOT NULL,
environment_cover_id INT,
FOREIGN KEY (project_id) REFERENCES test_platform_project(project_id),
FOREIGN KEY (environment_cover_id) REFERENCES test_platform_testenvironmentcover(environment_cover_id)
);
2.3 TestEnvironmentCover - 环境套管理
CREATE TABLE test_platform_testenvironmentcover (
environment_cover_id INT AUTO_INCREMENT PRIMARY KEY,
environment_name VARCHAR(255) NOT NULL,
environment_description TEXT NOT NULL,
create_time DATETIME(6) NOT NULL,
update_time DATETIME(6) NOT NULL,
project_id INT NOT NULL,
creat_user_id INT,
FOREIGN KEY (project_id) REFERENCES test_platform_project(project_id),
FOREIGN KEY (creat_user_id) REFERENCES auth_user(id)
);
3. 测试核心模块
3.1 TestCase - 测试用例
CREATE TABLE test_platform_testcase (
test_case_id INT AUTO_INCREMENT PRIMARY KEY,
case_name VARCHAR(255) NOT NULL,
case_description TEXT NOT NULL,
case_path VARCHAR(255) NOT NULL,
case_request_method VARCHAR(255) NOT NULL,
case_priority INT DEFAULT 0,
case_status INT DEFAULT 0,
case_params TEXT NOT NULL,
case_precondition TEXT NOT NULL,
case_request_headers TEXT NOT NULL,
case_requests_body TEXT NOT NULL,
case_expect_result TEXT NOT NULL,
case_assert_type VARCHAR(50),
case_assert_contents TEXT NOT NULL,
case_extractors TEXT,
case_tests TEXT,
last_assertion_results TEXT,
body_type VARCHAR(50) DEFAULT 'raw',
raw_content_type VARCHAR(100) DEFAULT 'application/json',
form_data TEXT,
create_time DATETIME(6) NOT NULL,
update_time DATETIME(6) NOT NULL,
last_executed_at DATETIME(6),
last_execution_result VARCHAR(20) DEFAULT 'not_run',
execution_count INT DEFAULT 0,
success_count INT DEFAULT 0,
success_rate DOUBLE DEFAULT 0.0,
creator_id INT,
project_id INT NOT NULL,
environment_cover_id INT,
FOREIGN KEY (creator_id) REFERENCES auth_user(id),
FOREIGN KEY (project_id) REFERENCES test_platform_project(project_id)
);
字段详解:
case_request_method
: HTTP方法(GET/POST/PUT/DELETE等)case_priority
: 优先级(0-低,1-中,2-高)case_status
: 执行状态(0-未执行,1-已执行)case_extractors
: JSON格式的变量提取器配置case_tests
: JSON格式的断言配置body_type
: 请求体类型(raw/form-data/x-www-form-urlencoded/binary)execution_count
: 总执行次数success_count
: 成功执行次数success_rate
: 成功率(0-1)
3.2 TestSuite - 测试套件
CREATE TABLE test_platform_testsuite (
suite_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
description TEXT,
create_time DATETIME(6) NOT NULL,
update_time DATETIME(6) NOT NULL,
last_executed_at DATETIME(6),
last_execution_status VARCHAR(20) DEFAULT 'not_run',
project_id INT NOT NULL,
environment_cover_id INT,
environment_id INT,
creator_id INT,
FOREIGN KEY (project_id) REFERENCES test_platform_project(project_id),
FOREIGN KEY (environment_cover_id) REFERENCES test_platform_testenvironmentcover(environment_cover_id),
FOREIGN KEY (environment_id) REFERENCES test_platform_testenvironment(environment_id),
FOREIGN KEY (creator_id) REFERENCES auth_user(id)
);
3.3 TestSuiteCase - 套件用例关联
CREATE TABLE test_platform_testsuitecase (
id INT AUTO_INCREMENT PRIMARY KEY,
original_case_id INT NOT NULL,
case_data TEXT NOT NULL,
order INT DEFAULT 0,
create_time DATETIME(6) NOT NULL,
update_time DATETIME(6) NOT NULL,
suite_id INT NOT NULL,
FOREIGN KEY (suite_id) REFERENCES test_platform_testsuite(suite_id),
UNIQUE KEY unique_suite_case (suite_id, original_case_id)
);
3.4 TestResult - 测试结果
CREATE TABLE test_platform_testresult (
test_result_id INT AUTO_INCREMENT PRIMARY KEY,
execution_time DATETIME(6) NOT NULL,
status VARCHAR(20) NOT NULL,
result_data TEXT NOT NULL,
create_time DATETIME(6) NOT NULL,
update_time DATETIME(6) NOT NULL,
error_message TEXT,
duration DOUBLE DEFAULT 0,
case_id INT NOT NULL,
environment_id INT,
FOREIGN KEY (case_id) REFERENCES test_platform_testcase(test_case_id),
FOREIGN KEY (environment_id) REFERENCES test_platform_testenvironment(environment_id)
);
3.5 TestSuiteResult - 套件执行结果
CREATE TABLE test_platform_testsuiteresult (
result_id INT AUTO_INCREMENT PRIMARY KEY,
execution_time DATETIME(6) NOT NULL,
status VARCHAR(20) NOT NULL,
duration DOUBLE DEFAULT 0,
total_cases INT DEFAULT 0,
passed_cases INT DEFAULT 0,
failed_cases INT DEFAULT 0,
error_cases INT DEFAULT 0,
skipped_cases INT DEFAULT 0,
pass_rate DOUBLE DEFAULT 0,
result_data TEXT NOT NULL,
create_time DATETIME(6) NOT NULL,
update_time DATETIME(6) NOT NULL,
suite_id INT NOT NULL,
environment_id INT,
creator_id INT,
FOREIGN KEY (suite_id) REFERENCES test_platform_testsuite(suite_id),
FOREIGN KEY (environment_id) REFERENCES test_platform_testenvironment(environment_id),
FOREIGN KEY (creator_id) REFERENCES auth_user(id)
);
3.6 TestExecutionLog - 执行日志
CREATE TABLE test_platform_testexecutionlog (
log_id INT AUTO_INCREMENT PRIMARY KEY,
execution_time DATETIME(6) NOT NULL,
status VARCHAR(20) NOT NULL,
duration DOUBLE DEFAULT 0,
request_url TEXT,
request_method VARCHAR(20),
request_headers TEXT,
request_body TEXT,
response_status_code INT,
response_headers TEXT,
response_body TEXT,
log_detail TEXT,
error_message TEXT,
extracted_variables TEXT,
assertion_results TEXT,
case_id INT,
suite_id INT,
suite_result_id INT,
executor_id INT,
environment_id INT,
environment_cover_id INT,
FOREIGN KEY (case_id) REFERENCES test_platform_testcase(test_case_id),
FOREIGN KEY (suite_id) REFERENCES test_platform_testsuite(suite_id),
FOREIGN KEY (suite_result_id) REFERENCES test_platform_testsuiteresult(result_id),
FOREIGN KEY (executor_id) REFERENCES auth_user(id),
FOREIGN KEY (environment_id) REFERENCES test_platform_testenvironment(environment_id),
FOREIGN KEY (environment_cover_id) REFERENCES test_platform_testenvironmentcover(environment_cover_id)
);
4. 测试计划模块
4.1 TestPlan - 测试计划
CREATE TABLE test_platform_testplan (
plan_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
description TEXT,
schedule_type VARCHAR(20) DEFAULT 'once',
execute_time DATETIME(6),
cron_expression VARCHAR(100),
retry_times INT DEFAULT 0,
notify_types VARCHAR(255),
auto_create_defects BOOLEAN DEFAULT TRUE,
status VARCHAR(20) DEFAULT 'pending',
create_time DATETIME(6) NOT NULL,
update_time DATETIME(6) NOT NULL,
last_executed_at DATETIME(6),
project_id INT NOT NULL,
creator_id INT,
FOREIGN KEY (project_id) REFERENCES test_platform_project(project_id),
FOREIGN KEY (creator_id) REFERENCES auth_user(id)
);
调度类型:
once
: 一次性执行daily
: 每日执行weekly
: 每周执行cron
: 自定义Cron表达式
4.2 TestPlanSuite - 计划套件关联
CREATE TABLE test_platform_testplansuite (
id INT AUTO_INCREMENT PRIMARY KEY,
order INT DEFAULT 0,
create_time DATETIME(6) NOT NULL,
update_time DATETIME(6) NOT NULL,
plan_id INT NOT NULL,
suite_id INT NOT NULL,
environment_id INT,
environment_cover_id INT,
FOREIGN KEY (plan_id) REFERENCES test_platform_testplan(plan_id),
FOREIGN KEY (suite_id) REFERENCES test_platform_testsuite(suite_id),
FOREIGN KEY (environment_id) REFERENCES test_platform_testenvironment(environment_id),
FOREIGN KEY (environment_cover_id) REFERENCES test_platform_testenvironmentcover(environment_cover_id),
UNIQUE KEY unique_plan_suite (plan_id, suite_id)
);
4.3 TestPlanResult - 计划执行结果
CREATE TABLE test_platform_testplanresult (
result_id INT AUTO_INCREMENT PRIMARY KEY,
execution_time DATETIME(6) NOT NULL,
status VARCHAR(20) NOT NULL,
duration DOUBLE DEFAULT 0,
total_suites INT DEFAULT 0,
passed_suites INT DEFAULT 0,
failed_suites INT DEFAULT 0,
error_suites INT DEFAULT 0,
total_cases INT DEFAULT 0,
passed_cases INT DEFAULT 0,
failed_cases INT DEFAULT 0,
error_cases INT DEFAULT 0,
skipped_cases INT DEFAULT 0,
pass_rate DOUBLE DEFAULT 0,
result_data TEXT NOT NULL,
error_message TEXT,
create_time DATETIME(6) NOT NULL,
update_time DATETIME(6) NOT NULL,
plan_id INT NOT NULL,
executor_id INT,
FOREIGN KEY (plan_id) REFERENCES test_platform_testplan(plan_id),
FOREIGN KEY (executor_id) REFERENCES auth_user(id)
);
5. 缺陷管理模块
5.1 Defect - 缺陷主表
CREATE TABLE test_platform_defect (
defect_id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
description TEXT NOT NULL,
steps TEXT NOT NULL,
status VARCHAR(20) DEFAULT 'new',
severity VARCHAR(20) DEFAULT 'major',
priority VARCHAR(20) DEFAULT 'medium',
priority_level INT DEFAULT 2,
version VARCHAR(50),
resolution TEXT,
create_time DATETIME(6) NOT NULL,
update_time DATETIME(6) NOT NULL,
project_id INT NOT NULL,
test_plan_id INT,
creator_id INT,
assignee_id INT,
FOREIGN KEY (project_id) REFERENCES test_platform_project(project_id),
FOREIGN KEY (test_plan_id) REFERENCES test_platform_testplan(plan_id),
FOREIGN KEY (creator_id) REFERENCES auth_user(id),
FOREIGN KEY (assignee_id) REFERENCES auth_user(id)
);
缺陷状态枚举:
new
: 新建processing
: 处理中resolved
: 已解决closed
: 已关闭rejected
: 已拒绝
严重程度枚举:
blocker
: 阻塞critical
: 严重major
: 主要minor
: 次要trivial
: 轻微
优先级枚举:
critical
: 紧急(0)high
: 高(1)medium
: 中(2)low
: 低(3)
5.2 DefectAttachment - 缺陷附件
CREATE TABLE test_platform_defectattachment (
attachment_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
url VARCHAR(500) NOT NULL,
type VARCHAR(50) NOT NULL,
size INT DEFAULT 0,
upload_time DATETIME(6) NOT NULL,
defect_id INT NOT NULL,
uploader_id INT,
FOREIGN KEY (defect_id) REFERENCES test_platform_defect(defect_id),
FOREIGN KEY (uploader_id) REFERENCES auth_user(id)
);
5.3 DefectComment - 缺陷评论
CREATE TABLE test_platform_defectcomment (
comment_id INT AUTO_INCREMENT PRIMARY KEY,
content TEXT NOT NULL,
create_time DATETIME(6) NOT NULL,
defect_id INT NOT NULL,
user_id INT,
FOREIGN KEY (defect_id) REFERENCES test_platform_defect(defect_id),
FOREIGN KEY (user_id) REFERENCES auth_user(id)
);
5.4 DefectActivity - 缺陷活动记录
CREATE TABLE test_platform_defectactivity (
activity_id INT AUTO_INCREMENT PRIMARY KEY,
content VARCHAR(255) NOT NULL,
type VARCHAR(20) DEFAULT 'primary',
create_time DATETIME(6) NOT NULL,
defect_id INT NOT NULL,
user_id INT,
FOREIGN KEY (defect_id) REFERENCES test_platform_defect(defect_id),
FOREIGN KEY (user_id) REFERENCES auth_user(id)
);
5.5 DefectTestCase - 缺陷用例关联
CREATE TABLE test_platform_defecttestcase (
id INT AUTO_INCREMENT PRIMARY KEY,
create_time DATETIME(6) NOT NULL,
defect_id INT NOT NULL,
test_case_id INT NOT NULL,
FOREIGN KEY (defect_id) REFERENCES test_platform_defect(defect_id),
FOREIGN KEY (test_case_id) REFERENCES test_platform_testcase(test_case_id),
UNIQUE KEY unique_defect_testcase (defect_id, test_case_id)
);
6. AI智能模块
6.1 ConversationSession - 对话会话
CREATE TABLE test_platform_conversationsession (
session_id CHAR(32) PRIMARY KEY,
title VARCHAR(255),
context_enabled BOOLEAN DEFAULT TRUE,
max_history_length INT DEFAULT 10,
message_count INT DEFAULT 0,
total_tokens INT DEFAULT 0,
create_time DATETIME(6) NOT NULL,
update_time DATETIME(6) NOT NULL,
last_message_time DATETIME(6),
is_active BOOLEAN DEFAULT TRUE,
user_id INT NOT NULL,
project_id INT,
FOREIGN KEY (user_id) REFERENCES auth_user(id),
FOREIGN KEY (project_id) REFERENCES test_platform_project(project_id)
);
6.2 ConversationMessage - 对话消息
CREATE TABLE test_platform_conversationmessage (
message_id CHAR(32) PRIMARY KEY,
role VARCHAR(20) NOT NULL,
content TEXT NOT NULL,
raw_content TEXT,
metadata TEXT,
tool_calls TEXT,
function_results TEXT,
input_tokens INT DEFAULT 0,
output_tokens INT DEFAULT 0,
total_tokens INT DEFAULT 0,
status VARCHAR(20) DEFAULT 'completed',
error_message TEXT,
create_time DATETIME(6) NOT NULL,
update_time DATETIME(6) NOT NULL,
order INT DEFAULT 0,
session_id CHAR(32) NOT NULL,
FOREIGN KEY (session_id) REFERENCES test_platform_conversationsession(session_id)
);
角色类型:
user
: 用户消息assistant
: AI助手回复system
: 系统消息tool
: 工具调用结果
6.3 RAGKnowledgeBase - RAG知识库
CREATE TABLE test_platform_ragknowledgebase (
rag_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
space_id VARCHAR(100) NOT NULL,
format_type INT DEFAULT 0,
description TEXT,
file_id VARCHAR(100),
api_key VARCHAR(500) NOT NULL,
api_base VARCHAR(200) DEFAULT 'https://api.coze.cn',
status VARCHAR(20) DEFAULT 'creating',
error_message TEXT,
external_dataset_id VARCHAR(100),
create_time DATETIME(6) NOT NULL,
update_time DATETIME(6) NOT NULL,
project_id INT NOT NULL,
creator_id INT,
FOREIGN KEY (project_id) REFERENCES test_platform_project(project_id),
FOREIGN KEY (creator_id) REFERENCES auth_user(id)
);
6.4 RAGFile - 知识库文件
CREATE TABLE test_platform_ragfile (
file_id INT AUTO_INCREMENT PRIMARY KEY,
file_name VARCHAR(255) NOT NULL,
file_size INT DEFAULT 0,
file_type VARCHAR(50) NOT NULL,
file_url TEXT NOT NULL,
external_file_id VARCHAR(100),
status VARCHAR(20) DEFAULT 'uploading',
error_message TEXT,
upload_time DATETIME(6) NOT NULL,
update_time DATETIME(6) NOT NULL,
knowledge_base_id INT NOT NULL,
uploader_id INT,
FOREIGN KEY (knowledge_base_id) REFERENCES test_platform_ragknowledgebase(rag_id),
FOREIGN KEY (uploader_id) REFERENCES auth_user(id)
);
6.5 RAGQuery - RAG查询记录
CREATE TABLE test_platform_ragquery (
query_id INT AUTO_INCREMENT PRIMARY KEY,
query_text TEXT NOT NULL,
response_text TEXT NOT NULL,
temperature DOUBLE DEFAULT 0.7,
max_tokens INT DEFAULT 2048,
token_count INT DEFAULT 0,
response_time DOUBLE DEFAULT 0,
referenced_files TEXT,
query_time DATETIME(6) NOT NULL,
knowledge_base_id INT NOT NULL,
user_id INT,
FOREIGN KEY (knowledge_base_id) REFERENCES test_platform_ragknowledgebase(rag_id),
FOREIGN KEY (user_id) REFERENCES auth_user(id)
);
6.6 APIKey - API密钥管理
CREATE TABLE test_platform_apikey (
api_key_id INT AUTO_INCREMENT PRIMARY KEY,
key_name VARCHAR(100) NOT NULL,
api_key VARCHAR(500) NOT NULL,
api_base VARCHAR(200) DEFAULT 'https://api.coze.cn',
service_type VARCHAR(20) DEFAULT 'coze',
is_active BOOLEAN DEFAULT TRUE,
is_default BOOLEAN DEFAULT FALSE,
rate_limit INT DEFAULT 0,
token_limit INT DEFAULT 0,
usage_count INT DEFAULT 0,
last_used_at DATETIME(6),
config TEXT,
create_time DATETIME(6) NOT NULL,
update_time DATETIME(6) NOT NULL,
user_id INT NOT NULL,
project_id INT,
FOREIGN KEY (user_id) REFERENCES auth_user(id),
FOREIGN KEY (project_id) REFERENCES test_platform_project(project_id),
UNIQUE KEY unique_user_keyname (user_id, key_name)
);
7. 分析与辅助模块
7.1 AnalysisResult - AI分析结果
CREATE TABLE test_platform_analysisresult (
analysis_id INT AUTO_INCREMENT PRIMARY KEY,
file_name VARCHAR(255) NOT NULL,
file_type VARCHAR(50) NOT NULL,
deepseek_response TEXT,
sheets_data TEXT,
test_cases_data TEXT,
status VARCHAR(20) DEFAULT 'success',
create_time DATETIME(6) NOT NULL,
update_time DATETIME(6) NOT NULL,
creator_id INT,
project_id INT,
FOREIGN KEY (creator_id) REFERENCES auth_user(id),
FOREIGN KEY (project_id) REFERENCES test_platform_project(project_id)
);
7.2 TestMindMap - 测试脑图
CREATE TABLE test_platform_testmindmap (
mindmap_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
description TEXT,
data TEXT NOT NULL,
layout TEXT,
settings TEXT,
version INT DEFAULT 1,
thumbnail TEXT,
node_count INT DEFAULT 0,
last_execution_time DATETIME(6),
create_time DATETIME(6) NOT NULL,
update_time DATETIME(6) NOT NULL,
project_id INT NOT NULL,
creator_id INT,
FOREIGN KEY (project_id) REFERENCES test_platform_project(project_id),
FOREIGN KEY (creator_id) REFERENCES auth_user(id)
);
7.3 TestCaseEditSuggestion - 用例编辑建议
CREATE TABLE test_case_edit_suggestions (
suggestion_id INT AUTO_INCREMENT PRIMARY KEY,
suggestion_type VARCHAR(20) NOT NULL,
field_name VARCHAR(100) NOT NULL,
current_value TEXT,
suggested_value TEXT NOT NULL,
suggestion_reason TEXT NOT NULL,
confidence_score DOUBLE DEFAULT 0.0,
status VARCHAR(20) DEFAULT 'pending',
created_at DATETIME(6) NOT NULL,
applied_at DATETIME(6),
failure_analysis JSON,
suggestion_metadata JSON,
test_case_id INT NOT NULL,
execution_result_id INT,
created_by_id INT NOT NULL,
applied_by_id INT,
FOREIGN KEY (test_case_id) REFERENCES test_platform_testcase(test_case_id),
FOREIGN KEY (execution_result_id) REFERENCES test_platform_testresult(test_result_id),
FOREIGN KEY (created_by_id) REFERENCES auth_user(id),
FOREIGN KEY (applied_by_id) REFERENCES auth_user(id)
);
7.4 TestCaseEditHistory - 用例编辑历史
CREATE TABLE test_case_edit_history (
history_id INT AUTO_INCREMENT PRIMARY KEY,
field_name VARCHAR(100) NOT NULL,
old_value TEXT,
new_value TEXT NOT NULL,
change_reason TEXT NOT NULL,
is_ai_suggested BOOLEAN DEFAULT FALSE,
modified_at DATETIME(6) NOT NULL,
test_case_id INT NOT NULL,
suggestion_id INT,
modified_by_id INT NOT NULL,
FOREIGN KEY (test_case_id) REFERENCES test_platform_testcase(test_case_id),
FOREIGN KEY (suggestion_id) REFERENCES test_case_edit_suggestions(suggestion_id),
FOREIGN KEY (modified_by_id) REFERENCES auth_user(id)
);
数据库索引设计
索引设计原则
- 查询频率优先: 针对高频查询字段建立索引
- 复合索引优化: 多字段联合查询建立复合索引
- 覆盖索引策略: 避免回表查询,提升性能
- 索引选择性: 选择区分度高的字段建立索引
核心索引列表
1. 缺陷管理模块索引
-- 单字段索引 (基础查询)
CREATE INDEX defect_status_idx ON test_platform_defect(status);
CREATE INDEX defect_priority_idx ON test_platform_defect(priority);
CREATE INDEX defect_severity_idx ON test_platform_defect(severity);
CREATE INDEX defect_project_idx ON test_platform_defect(project_id);
CREATE INDEX defect_creator_idx ON test_platform_defect(creator_id);
CREATE INDEX defect_assignee_idx ON test_platform_defect(assignee_id);
CREATE INDEX defect_create_time_idx ON test_platform_defect(create_time);
CREATE INDEX defect_title_idx ON test_platform_defect(title);
-- 复合索引 (联合查询优化)
CREATE INDEX defect_project_status_idx ON test_platform_defect(project_id, status);
CREATE INDEX defect_project_create_time_idx ON test_platform_defect(project_id, create_time);
CREATE INDEX defect_project_priority_idx ON test_platform_defect(project_id, priority);
CREATE INDEX defect_project_severity_idx ON test_platform_defect(project_id, severity);
CREATE INDEX defect_status_create_time_idx ON test_platform_defect(status, create_time);
CREATE INDEX defect_assignee_status_idx ON test_platform_defect(assignee_id, status);
CREATE INDEX defect_creator_create_time_idx ON test_platform_defect(creator_id, create_time);
-- 时间范围查询优化
CREATE INDEX defect_create_time_status_idx ON test_platform_defect(create_time, status);
CREATE INDEX defect_update_time_status_idx ON test_platform_defect(update_time, status);
2. 对话系统模块索引
-- 会话表索引
CREATE INDEX conv_session_user_idx ON test_platform_conversationsession(user_id);
CREATE INDEX conv_session_project_idx ON test_platform_conversationsession(project_id);
CREATE INDEX conv_session_create_idx ON test_platform_conversationsession(create_time);
CREATE INDEX conv_session_last_msg_idx ON test_platform_conversationsession(last_message_time);
CREATE INDEX conv_session_user_active_idx ON test_platform_conversationsession(user_id, is_active);
-- 主查询覆盖索引 (用户会话列表查询优化)
CREATE INDEX conv_session_main_query_idx ON test_platform_conversationsession(
user_id, is_active, last_message_time DESC, update_time DESC
);
-- 消息表索引
CREATE INDEX conv_msg_session_idx ON test_platform_conversationmessage(session_id);
CREATE INDEX conv_msg_role_idx ON test_platform_conversationmessage(role);
CREATE INDEX conv_msg_create_idx ON test_platform_conversationmessage(create_time);
CREATE INDEX conv_msg_order_idx ON test_platform_conversationmessage(order);
-- 会话消息查询优化
CREATE INDEX conv_msg_session_order_idx ON test_platform_conversationmessage(
session_id, order, create_time
);
CREATE INDEX conv_msg_session_role_time_idx ON test_platform_conversationmessage(
session_id, role, create_time DESC
);
-- 令牌统计优化索引
CREATE INDEX conv_msg_tokens_covering_idx ON test_platform_conversationmessage(
session_id, total_tokens
);
3. 测试执行模块索引
-- 测试用例索引
CREATE INDEX testcase_project_idx ON test_platform_testcase(project_id);
CREATE INDEX testcase_creator_idx ON test_platform_testcase(creator_id);
CREATE INDEX testcase_status_idx ON test_platform_testcase(case_status);
CREATE INDEX testcase_priority_idx ON test_platform_testcase(case_priority);
CREATE INDEX testcase_executed_at_idx ON test_platform_testcase(last_executed_at);
-- 测试结果索引
CREATE INDEX testresult_case_idx ON test_platform_testresult(case_id);
CREATE INDEX testresult_status_idx ON test_platform_testresult(status);
CREATE INDEX testresult_execution_time_idx ON test_platform_testresult(execution_time);
-- 执行日志索引
CREATE INDEX testlog_case_idx ON test_platform_testexecutionlog(case_id);
CREATE INDEX testlog_suite_idx ON test_platform_testexecutionlog(suite_id);
CREATE INDEX testlog_execution_time_idx ON test_platform_testexecutionlog(execution_time);
CREATE INDEX testlog_status_idx ON test_platform_testexecutionlog(status);
索引性能分析
查询性能指标
索引类型 | 查询场景 | 性能提升 | 维护成本 |
---|---|---|---|
单字段索引 | 基础过滤查询 | 80-90% | 低 |
复合索引 | 多条件联合查询 | 90-95% | 中 |
覆盖索引 | 避免回表查询 | 95-99% | 高 |
部分索引 | 条件过滤索引 | 85-92% | 中 |
索引维护策略
- 定期分析: 使用
EXPLAIN
分析查询计划 - 索引监控: 监控索引使用率和查询性能
- 索引清理: 删除未使用的冗余索引
- 统计更新: 定期更新表统计信息
API接口设计
接口架构设计
RESTful API规范
- URL设计:
/api/{module}/{resource}/{id}/{action}
- HTTP方法: GET(查询), POST(创建), PUT(更新), DELETE(删除)
- 状态码: 200(成功), 201(创建), 400(请求错误), 401(未授权), 404(不存在), 500(服务器错误)
- 响应格式: 统一JSON格式
- 错误处理: 标准化错误码和错误信息
接口响应格式
{
"code": 200,
"message": "success",
"data": {
// 具体数据
}
}
核心接口分类
1. 用户认证接口
POST /api/login/ # 用户登录
POST /api/register/ # 用户注册
GET /api/user/info/ # 获取用户信息
2. 项目管理接口
GET /api/project/ # 获取项目列表
GET /api/project/{project_id} # 获取项目详情
POST /api/project/create/ # 创建项目
PUT /api/project/edit/ # 编辑项目
DELETE /api/project/delete/ # 删除项目
3. 测试用例接口
GET /api/testcase/list/{project_id} # 获取用例列表
GET /api/testcase/list # 查询用例(支持过滤)
POST /api/testcase/create/ # 创建测试用例
PUT /api/testcase/update/{case_id}/ # 更新测试用例
DELETE /api/testcases/{case_id} # 删除测试用例
PUT /api/testcase/status/{case_id} # 更新用例状态
POST /api/testcase/import/ # 批量导入用例
POST /api/testcase/batch # 批量创建用例
4. 测试执行接口
POST /api/testcase/execute # 执行单个用例
POST /api/testcase/execute/{case_id} # 执行指定用例
POST /api/testcase/execute_direct # 直接执行(不保存)
POST /api/testcase/run # 调试执行
POST /api/testcase/batch-execute # 批量执行用例
5. 测试套件接口
GET /api/suite/list/{project_id} # 获取套件列表
GET /api/suite/{suite_id} # 获取套件详情
POST /api/suite/create # 创建测试套件
PUT /api/suite/update/{suite_id} # 更新测试套件
DELETE /api/suite/delete/{suite_id} # 删除测试套件
POST /api/suite/execute/{suite_id} # 执行测试套件
GET /api/suite/detail/{suite_id} # 获取套件详细信息
6. 测试环境接口
GET /api/env/list/{project_id} # 获取环境列表
POST /api/env/create # 创建测试环境
PUT /api/env/variable/{env_id} # 更新环境变量
DELETE /api/env/variable/{env_id}/{var_key} # 删除环境变量
GET /api/env-suite/list/{project_id} # 获取环境套列表
POST /api/env-suite/create # 创建环境套
DELETE /api/env-suite/delete/{env_cover_id} # 删除环境套
GET /api/environment/current/ # 获取当前环境
POST /api/environment/current/ # 切换当前环境
7. 测试报告接口
GET /api/report/latest/{suite_id} # 获取最新报告
GET /api/report/list/{project_id} # 获取报告列表
GET /api/report/detail/{result_id} # 获取报告详情
DELETE /api/report/delete/{result_id} # 删除测试报告
GET /api/report/response/{result_id} # 获取响应详情
8. 测试计划接口
GET /api/test-plan/list/{project_id} # 获取计划列表
GET /api/test-plan/{plan_id} # 获取计划详情
POST /api/test-plan/ # 创建测试计划
PUT /api/test-plan/update/{plan_id} # 更新测试计划
DELETE /api/test-plan/delete/{plan_id} # 删除测试计划
POST /api/test-plan/execute/{plan_id} # 执行测试计划
GET /api/test-plan/{plan_id}/executions # 获取执行历史
PUT /api/test-plan/reset/{plan_id} # 重置计划状态
PUT /api/test-plan/reset-all # 重置所有计划
9. 缺陷管理接口
GET /api/defects # 获取缺陷列表
GET /api/defects/{defect_id} # 获取缺陷详情
POST /api/defects/create # 创建缺陷
PUT /api/defects/{defect_id}/update # 更新缺陷
PUT /api/defects/{defect_id}/status # 更新缺陷状态
PUT /api/defects/{defect_id}/assign # 指派缺陷
POST /api/defects/{defect_id}/comments # 添加评论
GET /api/defects/{defect_id}/comments # 获取评论列表
POST /api/defects/{defect_id}/attachments # 上传附件
GET /api/defects/{defect_id}/attachments # 获取附件列表
POST /api/defects/{defect_id}/testcases # 关联测试用例
GET /api/defects/options # 获取缺陷选项
POST /api/defects/upload-image # 上传图片
GET /api/defects/export # 导出缺陷
POST /api/defects/batch-delete # 批量删除
10. 缺陷统计接口
GET /api/defects/statistics/overview # 缺陷概览统计
GET /api/defects/statistics/status-distribution # 状态分布统计
GET /api/defects/statistics/priority-distribution # 优先级分布统计
GET /api/defects/statistics/severity-distribution # 严重程度分布统计
GET /api/defects/statistics/trend # 缺陷趋势统计
GET /api/defects/statistics/assignee # 指派人统计
GET /api/defects/statistics/project-distribution # 项目分布统计
GET /api/defects/statistics/resolve-time # 解决时间统计
GET /api/defects/statistics/creator # 创建者统计
GET /api/defects/statistics/quality-metrics # 质量指标统计
11. RAG知识库接口
GET /api/rag/list/{project_id} # 获取知识库列表
GET /api/rag/{rag_id} # 获取知识库详情
POST /api/rag/ # 创建知识库
PATCH /api/rag/update_key/{rag_id} # 更新API密钥
GET /api/rag/external-datasets # 获取外部数据集
POST /api/rag/config # 创建API配置
GET /api/rag/workspaces # 获取工作空间
POST /api/rag/upload # 上传文档
GET /api/rag/progress # 获取上传进度
GET /api/rag/documents # 获取文档列表
POST /api/rag/file/upload # 上传文件
12. AI助手接口
POST /api/assistant/chat # 智能助手对话
POST /api/intelligent-agent/chat # 智能Agent对话
POST /api/agent/file/parse # 文件解析
POST /api/agent/create-test-case # AI创建用例
POST /api/agent/edit-test-case # AI编辑用例
POST /api/agent/batch-edit-test-cases # AI批量编辑用例
POST /api/agent/export-test-case # 导出测试用例
13. 对话管理接口
GET /api/conversations # 获取会话列表
POST /api/conversations # 创建会话
GET /api/conversations/{session_id} # 获取会话详情
PUT /api/conversations/{session_id} # 更新会话
DELETE /api/conversations/{session_id} # 删除会话
GET /api/conversations/{session_id}/messages # 获取消息列表
POST /api/conversations/{session_id}/messages # 发送消息
GET /api/conversations/tool-calls # 获取工具调用记录
GET /api/conversations/tool-calls/statistics # 工具调用统计
14. 智能编辑建议接口
POST /api/test-case/analyze-failure/ # 分析失败用例
GET /api/test-case/{test_case_id}/suggestions/ # 获取编辑建议
POST /api/test-case/suggestions/apply/ # 应用编辑建议
POST /api/test-case/suggestions/reject/ # 拒绝编辑建议
GET /api/test-case/{test_case_id}/edit-history/ # 获取编辑历史
15. 统计分析接口
GET /api/statistics/trend # 测试趋势统计
GET /api/statistics/test-case-distribution # 用例分布统计
GET /api/project/statistics # 项目统计概览
GET /api/project/execution-trend # 执行趋势分析
GET /api/project/defect-distribution # 缺陷分布分析
GET /api/project/pass-rate-trend # 通过率趋势分析
GET /api/project/duration-distribution # 执行时长分布
GET /api/project/recent-executions # 最近执行记录
16. 脑图管理接口
GET /api/mindmap/list # 获取脑图列表
GET /api/mindmap/{mindmap_id} # 获取脑图详情
POST /api/mindmap/save # 保存脑图
DELETE /api/mindmap/delete/{mindmap_id} # 删除脑图
POST /api/mindmap/execute/{mindmap_id} # 执行脑图测试
17. 日志管理接口
GET /api/log # 获取执行日志列表
GET /api/log/{result_id} # 获取日志详情
GET /api/system/logs # 获取系统日志
GET /api/system/logs/download # 下载系统日志
18. 系统配置接口
GET /api/system/deepseek-config # 获取DeepSeek配置
POST /api/system/deepseek-config # 保存DeepSeek配置
POST /api/fim/completion # FIM智能补全
接口认证与权限
认证机制
- Session认证: 基于Django Session的认证机制
- Token认证: API Token认证支持
- 权限控制: 基于用户角色的权限管理
权限级别
- Public: 公开接口,无需认证
- User: 需要用户登录
- Project: 需要项目权限
- Admin: 需要管理员权限
性能优化策略
1. 数据库层优化
查询优化
- 索引优化: 建立合适的单字段和复合索引
- 查询重写: 避免N+1查询,使用select_related和prefetch_related
- 分页查询: 大数据量查询使用分页机制
- 查询缓存: 使用Redis缓存频繁查询结果
连接池优化
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
'charset': 'utf8mb4',
},
'CONN_MAX_AGE': 3600, # 连接复用时间
}
}
2. 应用层优化
缓存策略
# Redis缓存配置
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://127.0.0.1:6379/1',
'OPTIONS': {
'CLIENT_CLASS': 'django_redis.client.DefaultClient',
}
}
}
# 缓存使用示例
@cache_page(60 * 15) # 缓存15分钟
def get_project_statistics(request, project_id):
pass
异步处理
# Celery异步任务配置
CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
# 异步执行测试套件
@shared_task
def execute_test_suite_async(suite_id, environment_id):
pass
3. 接口层优化
请求响应优化
- 数据压缩: 启用GZIP压缩
- 字段选择: 支持字段筛选,减少数据传输
- 批量操作: 提供批量接口,减少请求次数
- 异步响应: 长时间任务使用异步处理
限流与熔断
# API限流配置
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_CLASSES': [
'rest_framework.throttling.AnonRateThrottle',
'rest_framework.throttling.UserRateThrottle'
],
'DEFAULT_THROTTLE_RATES': {
'anon': '100/hour',
'user': '1000/hour'
}
}
监控与运维
1. 性能监控
数据库监控
- 慢查询日志: 监控执行时间超过阈值的SQL
- 连接数监控: 监控数据库连接池使用情况
- 锁等待监控: 监控死锁和锁等待情况
- 存储空间监控: 监控表空间和索引大小
应用监控
- 响应时间监控: 监控API接口响应时间
- 错误率监控: 监控接口错误率和异常
- 并发量监控: 监控同时在线用户数和并发请求
- 资源使用监控: 监控CPU、内存、磁盘使用率
2. 日志管理
日志分类
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'django.log',
'maxBytes': 15728640, # 15MB
'backupCount': 10,
},
'database': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'database.log',
'maxBytes': 15728640,
'backupCount': 5,
},
},
'loggers': {
'django.db.backends': {
'handlers': ['database'],
'level': 'DEBUG',
'propagate': False,
},
},
}
3. 备份策略
数据备份
- 全量备份: 每日凌晨进行全量数据备份
- 增量备份: 每小时进行增量备份
- 异地备份: 重要数据同步到异地存储
- 恢复测试: 定期进行数据恢复测试
配置备份
- 代码备份: Git版本控制管理代码
- 配置备份: 配置文件版本化管理
- 环境备份: Docker镜像和环境配置备份
安全设计
1. 数据安全
敏感数据保护
- 密码加密: 使用Django内置的密码哈希机制
- API密钥加密: 对第三方API密钥进行加密存储
- 数据脱敏: 在日志中对敏感数据进行脱敏处理
权限控制
- 角色权限: 基于角色的访问控制(RBAC)
- 资源权限: 基于资源的细粒度权限控制
- 操作审计: 记录敏感操作的审计日志
2. 接口安全
认证授权
- 登录认证: 支持用户名密码和第三方登录
- 会话管理: 安全的会话管理机制
- 权限验证: 接口级别的权限验证
输入验证
- 参数验证: 严格的输入参数验证
- SQL注入防护: 使用ORM防止SQL注入
- XSS防护: 对用户输入进行XSS过滤
- CSRF防护: 启用CSRF防护机制
扩展性设计
1. 架构扩展
微服务化
- 服务拆分: 可按业务模块拆分为微服务
- 接口标准化: 统一的接口规范和数据格式
- 服务发现: 支持服务注册和发现机制
容器化部署
# Dockerfile示例
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "djangoProject4.wsgi:application"]
2. 功能扩展
插件机制
- 测试协议扩展: 支持新的测试协议
- 报告格式扩展: 支持多种报告格式
- 通知方式扩展: 支持多种通知渠道
API版本管理
# URL版本控制
urlpatterns = [
path('api/v1/', include('api.v1.urls')),
path('api/v2/', include('api.v2.urls')),
]
# 版本兼容性处理
class APIVersionMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
version = request.META.get('HTTP_API_VERSION', 'v1')
request.api_version = version
return self.get_response(request)
总结
本测试平台数据库接口设计文档详细介绍了系统的数据库架构、表结构、索引设计、API接口设计等核心内容。整个系统采用了现代化的技术架构,具有以下特点:
设计亮点
- 完整的测试生命周期管理: 从用例创建、执行、结果分析到缺陷跟踪的完整闭环
- 智能化特性: 集成AI助手、智能分析、自动化建议等先进功能
- 高性能优化: 通过合理的索引设计和缓存策略,确保系统高性能运行
- 良好的扩展性: 模块化设计,支持功能扩展和微服务化改造
- 完善的监控体系: 全方位的性能监控和日志管理
技术特色
- Django ORM: 充分利用Django ORM的优势,实现复杂的数据关系管理
- RESTful API: 标准化的API设计,便于前后端分离和第三方集成
- 索引优化: 针对性的索引设计,大幅提升查询性能
- 异步处理: 使用Celery实现异步任务处理,提升用户体验
- 安全设计: 多层次的安全防护,保障数据和系统安全
这个结构,大家可以复用,也可以自己优化使用。