记录自己开发一个自动化测试平台-(六:数据库结构)

自动化测试平台数据库接口设计文档

项目概述

我这个项目是一个基于Django框架的自动化测试平台,集成了测试用例管理、测试执行、缺陷管理、AI智能助手、RAG知识库等功能。系统采用前后端分离架构,提供RESTful API接口,支持测试自动化、智能分析和团队协作。

数据库设计总览

核心架构特点

  • ORM框架: Django ORM(这也是django项目的标准设计框架,性能比较好)
  • 数据库引擎: 支持MySQL、PostgreSQL等
  • 字符集: UTF-8
  • 时区处理: UTC+8 (Asia/Shanghai)–这块大家要注意了,时区一定要设置好,不然后期很麻烦
  • 索引策略: 单字段索引 + 复合索引优化–考虑到后期可能会有数据比较大的情况,所以加了索引,提前避免后期的数据问题,主要原因还是因为像测试用例、测试环境、测试套件、测试计划、测试报告这些模块的数据实际上都有比较强的关联
  • 数据完整性: 外键约束 + 软删除机制

数据库模块分类

  1. 用户与权限模块 - 用户管理、认证授权
  2. 项目管理模块 - 项目组织、环境配置
  3. 测试核心模块 - 用例、套件、执行、结果
  4. 质量管理模块 - 缺陷跟踪、统计分析
  5. AI智能模块 - 助手对话、知识库、文件解析
  6. 系统支撑模块 - 日志、配置、文件管理

详细数据库结构

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: 头像URL
  • last_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. 查询频率优先: 针对高频查询字段建立索引
  2. 复合索引优化: 多字段联合查询建立复合索引
  3. 覆盖索引策略: 避免回表查询,提升性能
  4. 索引选择性: 选择区分度高的字段建立索引

核心索引列表

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%
索引维护策略
  1. 定期分析: 使用EXPLAIN分析查询计划
  2. 索引监控: 监控索引使用率和查询性能
  3. 索引清理: 删除未使用的冗余索引
  4. 统计更新: 定期更新表统计信息

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智能补全

接口认证与权限

认证机制
  1. Session认证: 基于Django Session的认证机制
  2. Token认证: API Token认证支持
  3. 权限控制: 基于用户角色的权限管理
权限级别
  • 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接口设计等核心内容。整个系统采用了现代化的技术架构,具有以下特点:

设计亮点

  1. 完整的测试生命周期管理: 从用例创建、执行、结果分析到缺陷跟踪的完整闭环
  2. 智能化特性: 集成AI助手、智能分析、自动化建议等先进功能
  3. 高性能优化: 通过合理的索引设计和缓存策略,确保系统高性能运行
  4. 良好的扩展性: 模块化设计,支持功能扩展和微服务化改造
  5. 完善的监控体系: 全方位的性能监控和日志管理

技术特色

  • Django ORM: 充分利用Django ORM的优势,实现复杂的数据关系管理
  • RESTful API: 标准化的API设计,便于前后端分离和第三方集成
  • 索引优化: 针对性的索引设计,大幅提升查询性能
  • 异步处理: 使用Celery实现异步任务处理,提升用户体验
  • 安全设计: 多层次的安全防护,保障数据和系统安全

这个结构,大家可以复用,也可以自己优化使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值