Files
argon-theme/.kiro/specs/ai-spam-detection-optimization/design.md
nanhaoluo 28f0a1265e feat: 更新 Mermaid 到 v11 并优化错误处理
- 更新 Mermaid 库版本从 v10 升级到 v11.12.2
- 优化错误处理逻辑,避免重复嵌套错误容器
- 修复查看源代码时可能出现的嵌套报错问题
- 改进渲染前检查,跳过已处理的错误容器和已渲染的图表
- 优化重新渲染逻辑,只处理成功渲染的图表,排除错误容器
- 增强代码提取逻辑,优先使用传入的代码参数
- 添加主题切换时的智能判断,避免不必要的重新渲染
- 更新 functions.php 中的 CDN 地址到 v11
- 更新 settings.php 中的预览功能 CDN 地址到 v11
- 改进错误容器的 DOM 结构,使用独立元素而非 innerHTML
2026-01-24 22:46:00 +08:00

912 lines
25 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Design Document
## Overview
本设计文档描述了 Argon 主题 AI 垃圾评论检测优化功能的技术实现方案。系统采用模块化架构,将 Prompt 管理、置信度评分、上下文构建、学习机制等功能解耦,便于维护和扩展。
核心设计理念:
- **灵活性优先**:通过多级 Prompt 和可配置阈值适应不同场景
- **准确性保障**:引入置信度评分和上下文信息提升判断质量
- **成本可控**:提供不同模式平衡准确性和 API 费用
- **持续优化**:通过学习机制不断改进检测效果
## Architecture
系统采用分层架构设计:
```mermaid
graph TB
subgraph "表现层"
A[设置界面] --> B[评论列表界面]
end
subgraph "业务逻辑层"
C[AI_Detector 主控制器]
D[Prompt_Engine]
E[Context_Builder]
F[Learning_Module]
G[Threshold_Manager]
end
subgraph "数据访问层"
H[WordPress Options API]
I[WordPress Comments API]
J[Feedback Database]
end
subgraph "外部服务"
K[OpenAI API]
L[其他 AI Provider]
end
A --> C
B --> C
C --> D
C --> E
C --> F
C --> G
D --> K
D --> L
E --> I
F --> J
G --> H
C --> H
C --> I
```
### 核心组件职责
1. **AI_Detector**: 主控制器,协调各模块完成检测流程
2. **Prompt_Engine**: 管理不同模式的 Prompt 模板,生成检测请求
3. **Context_Builder**: 收集和构建评论上下文信息
4. **Learning_Module**: 记录反馈数据,分析误判率,提供优化建议
5. **Threshold_Manager**: 管理检测阈值和处理策略
## Components and Interfaces
### 1. Prompt_Engine
**职责**: 管理和生成不同模式的 Prompt
**接口**:
```php
class Argon_Spam_Prompt_Engine {
/**
* 获取指定模式的 Prompt
* @param string $mode 模式: minimal, standard, enhanced, custom
* @param array $context 评论上下文信息
* @return string 完整的 Prompt
*/
public function get_prompt($mode, $context);
/**
* 获取自定义 Prompt 模板
* @return string 自定义模板
*/
public function get_custom_template();
/**
* 保存自定义 Prompt 模板
* @param string $template 模板内容
* @return bool 是否成功
*/
public function save_custom_template($template);
/**
* 验证 Prompt 模板格式
* @param string $template 模板内容
* @return array ['valid' => bool, 'errors' => array]
*/
public function validate_template($template);
}
```
**Prompt 模板结构**:
极简模式minimal:
```
你是一个垃圾评论检测助手。请判断以下评论是否为垃圾评论。
评论内容: {content}
评论者: {author}
网站: {url}
请以 JSON 格式返回:
{
"is_spam": true/false,
"confidence": 0.0-1.0,
"reason": "简短理由"
}
```
标准模式standard:
```
你是一个专业的垃圾评论检测助手。请根据以下标准判断评论是否为垃圾:
1. 内容质量: 是否有实质性内容
2. 相关性: 是否与文章主题相关
3. 用户行为: 用户名、邮箱、网站是否可疑
4. 语言特征: 是否包含垃圾评论常见模式
评论信息:
- 内容: {content}
- 评论者: {author}
- 邮箱域名: {email_domain}
- 网站: {url}
- 文章标题: {post_title}
- 文章摘要: {post_excerpt}
用户历史:
- 历史评论数: {comment_count}
- 通过率: {approval_rate}
请以 JSON 格式返回:
{
"is_spam": true/false,
"confidence": 0.0-1.0,
"reason": "详细理由",
"suggestion": "auto/review/approve"
}
```
增强模式enhanced:
```
你是一个高级垃圾评论检测专家。请进行多维度深度分析:
1. 内容合规性分析
- 是否包含违规内容
- 是否包含广告推广
- 是否包含恶意链接
2. 内容质量分析
- 是否有实质性观点
- 语言表达是否自然
- 是否为复制粘贴内容
3. 用户行为分析
- 用户名是否可疑(随机字符、营销词汇)
- 邮箱域名是否可信
- 网站是否为垃圾站点
4. 上下文相关性分析
- 评论与文章主题的相关度
- 评论时间是否异常(批量发送)
- 用户历史行为是否正常
评论信息:
- 内容: {content}
- 评论者: {author}
- 邮箱域名: {email_domain}
- 网站: {url}
- IP 地址段: {ip_segment}
- 评论时间: {comment_time}
文章信息:
- 标题: {post_title}
- 摘要: {post_excerpt}
- 分类: {post_category}
用户历史:
- 历史评论数: {comment_count}
- 通过率: {approval_rate}
- 最近评论时间: {last_comment_time}
请以 JSON 格式返回:
{
"is_spam": true/false,
"confidence": 0.0-1.0,
"reason": "综合分析理由",
"suggestion": "auto/review/approve",
"analysis": {
"content_compliance": "分析结果",
"content_quality": "分析结果",
"user_behavior": "分析结果",
"context_relevance": "分析结果"
}
}
```
### 2. Context_Builder
**职责**: 收集和构建评论上下文信息
**接口**:
```php
class Argon_Spam_Context_Builder {
/**
* 构建评论上下文
* @param WP_Comment $comment 评论对象
* @param string $privacy_level 隐私级别: standard, strict
* @return array 上下文信息数组
*/
public function build_context($comment, $privacy_level = 'standard');
/**
* 获取文章信息
* @param int $post_id 文章 ID
* @return array ['title' => string, 'excerpt' => string, 'category' => string]
*/
private function get_post_info($post_id);
/**
* 获取用户历史统计
* @param string $email 用户邮箱
* @return array ['count' => int, 'approval_rate' => float, 'last_time' => string]
*/
private function get_user_stats($email);
/**
* 脱敏处理
* @param array $context 原始上下文
* @param string $privacy_level 隐私级别
* @return array 脱敏后的上下文
*/
private function sanitize_context($context, $privacy_level);
}
```
**上下文数据结构**:
```php
[
'content' => string, // 评论内容
'author' => string, // 评论者名称
'email_domain' => string, // 邮箱域名(脱敏)
'url' => string, // 网站 URL
'ip_segment' => string, // IP 地址段(脱敏)
'comment_time' => string, // 评论时间
'post_title' => string, // 文章标题
'post_excerpt' => string, // 文章摘要(截取 200 字符)
'post_category' => string, // 文章分类
'comment_count' => int, // 用户历史评论数
'approval_rate' => float, // 用户评论通过率
'last_comment_time' => string // 最近评论时间
]
```
### 3. AI_Detector
**职责**: 主控制器,协调检测流程
**接口**:
```php
class Argon_Spam_AI_Detector {
/**
* 检测评论是否为垃圾
* @param WP_Comment $comment 评论对象
* @param bool $async 是否异步检测
* @return array 检测结果
*/
public function detect($comment, $async = true);
/**
* 处理检测结果
* @param WP_Comment $comment 评论对象
* @param array $result 检测结果
* @return void
*/
public function process_result($comment, $result);
/**
* 批量检测评论
* @param array $comment_ids 评论 ID 数组
* @param callable $progress_callback 进度回调函数
* @return array 检测结果统计
*/
public function batch_detect($comment_ids, $progress_callback = null);
/**
* 测试 Prompt
* @param string $content 测试内容
* @param string $mode Prompt 模式
* @return array 检测结果
*/
public function test_prompt($content, $mode);
}
```
**检测结果数据结构**:
```php
[
'is_spam' => bool, // 是否垃圾评论
'confidence' => float, // 置信度 0-1
'reason' => string, // 判断理由
'suggestion' => string, // 处理建议: auto/review/approve
'analysis' => array, // 详细分析(仅增强模式)
'timestamp' => int, // 检测时间戳
'mode' => string, // 使用的 Prompt 模式
'api_provider' => string // API 提供商
]
```
### 4. Learning_Module
**职责**: 记录反馈数据,分析误判率
**接口**:
```php
class Argon_Spam_Learning_Module {
/**
* 记录反馈
* @param int $comment_id 评论 ID
* @param array $ai_result AI 检测结果
* @param string $admin_action 管理员操作: approve, spam, trash
* @return bool 是否成功
*/
public function record_feedback($comment_id, $ai_result, $admin_action);
/**
* 计算误判率
* @param int $days 统计天数
* @return array ['total' => int, 'false_positive' => int, 'false_negative' => int, 'rate' => float]
*/
public function calculate_error_rate($days = 30);
/**
* 获取优化建议
* @return array 建议列表
*/
public function get_optimization_suggestions();
/**
* 导出反馈数据
* @param int $days 导出天数
* @return string CSV 格式数据
*/
public function export_feedback($days = 30);
/**
* 获取统计数据
* @return array 统计信息
*/
public function get_statistics();
}
```
**反馈记录数据结构**:
```php
[
'comment_id' => int,
'ai_result' => array, // AI 检测结果
'admin_action' => string, // 管理员操作
'timestamp' => int,
'pattern_hash' => string, // 评论特征哈希
'is_error' => bool // 是否误判
]
```
### 5. Threshold_Manager
**职责**: 管理检测阈值和处理策略
**接口**:
```php
class Argon_Spam_Threshold_Manager {
/**
* 获取当前阈值
* @return float 阈值 0.5-1.0
*/
public function get_threshold();
/**
* 设置阈值
* @param float $threshold 阈值
* @return bool 是否成功
*/
public function set_threshold($threshold);
/**
* 判断是否应该自动处理
* @param array $result 检测结果
* @return bool 是否自动处理
*/
public function should_auto_process($result);
/**
* 获取推荐配置
* @param string $blog_size 博客规模: small, medium, large
* @return array 推荐配置
*/
public function get_recommended_config($blog_size);
}
```
## Data Models
### 1. 配置选项WordPress Options
```php
// Prompt 模式
'argon_spam_detection_prompt_mode' => 'standard' // minimal, standard, enhanced, custom
// 自定义 Prompt 模板
'argon_spam_detection_custom_prompt' => ''
// 检测阈值
'argon_spam_detection_threshold' => 0.85 // 0.5-1.0
// 智能抽查比例
'argon_spam_detection_sample_rate' => 30 // 0-100
// 隐私级别
'argon_spam_detection_privacy_level' => 'standard' // standard, strict
// API 配置
'argon_spam_detection_api_provider' => 'openai' // openai, custom
'argon_spam_detection_api_key' => ''
'argon_spam_detection_api_endpoint' => ''
// 实时检测开关
'argon_spam_detection_realtime_enabled' => true
// 自动禁用配置
'argon_spam_detection_auto_disable_after_errors' => 3
'argon_spam_detection_auto_disable_duration' => 3600 // 秒
// 统计数据
'argon_spam_detection_stats' => [
'total_detections' => 0,
'auto_processed' => 0,
'manual_reviewed' => 0,
'api_calls_this_month' => 0,
'last_reset_time' => 0
]
```
### 2. 评论元数据Comment Meta
```php
// AI 检测结果
'argon_spam_ai_result' => [
'is_spam' => bool,
'confidence' => float,
'reason' => string,
'suggestion' => string,
'analysis' => array,
'timestamp' => int,
'mode' => string,
'api_provider' => string
]
// 检测状态
'argon_spam_detection_status' => 'pending' // pending, completed, failed
// 重新检测次数
'argon_spam_redetection_count' => 0
```
### 3. 反馈数据库表
创建自定义表存储反馈数据:
```sql
CREATE TABLE {prefix}_argon_spam_feedback (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
comment_id BIGINT UNSIGNED NOT NULL,
ai_is_spam TINYINT(1) NOT NULL,
ai_confidence FLOAT NOT NULL,
ai_reason TEXT,
ai_suggestion VARCHAR(20),
admin_action VARCHAR(20) NOT NULL,
is_error TINYINT(1) NOT NULL,
pattern_hash VARCHAR(64),
created_at DATETIME NOT NULL,
PRIMARY KEY (id),
KEY comment_id (comment_id),
KEY created_at (created_at),
KEY is_error (is_error)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
## Correctness Properties
*属性是一个特征或行为,应该在系统的所有有效执行中保持为真——本质上是关于系统应该做什么的正式陈述。属性作为人类可读规范和机器可验证正确性保证之间的桥梁。*
### Property 1: Prompt 模式完整性
*对于任何* 上下文数据Prompt_Engine 应该能够为所有三种预设模式minimal、standard、enhanced生成有效的 Prompt且每个 Prompt 都包含 JSON 格式要求。
**Validates: Requirements 1.1, 1.6**
### Property 2: Token 消耗范围约束
*对于任何* 上下文数据和任何预设模式,生成的 Prompt 的 token 消耗应该在该模式指定的范围内极简100-150标准200-300增强300-500
**Validates: Requirements 1.2, 1.3, 1.4**
### Property 3: 自定义模板往返一致性
*对于任何* 有效的自定义 Prompt 模板字符串,保存后再读取应该得到相同的模板内容。
**Validates: Requirements 1.5**
### Property 4: 检测结果数据结构完整性
*对于任何* 评论AI_Detector 返回的结果应该包含 is_spam布尔值、confidence0-1 范围的浮点数、reason字符串、suggestion字符串四个必需字段。
**Validates: Requirements 2.1, 2.2, 3.1**
### Property 5: 置信度分类正确性
*对于任何* 置信度值,系统应该根据以下规则正确分类:>= 0.9 为"非常确定"0.7-0.9 为"比较确定"0.5-0.7 为"中等确定"< 0.5 为"不太确定"。
**Validates: Requirements 2.3, 2.4, 2.5, 2.6**
### Property 6: 处理建议逻辑正确性
*对于任何* 检测结果和阈值配置,当 confidence >= threshold 且 is_spam = true 时应返回 "auto",当 0.5 <= confidence < threshold 且 is_spam = true 时应返回 "review",其他情况应返回 "approve"。
**Validates: Requirements 3.2, 3.3, 3.4**
### Property 7: 阈值配置往返一致性
*对于任何* 有效的阈值值0.5-1.0),保存后再读取应该得到相同的阈值。
**Validates: Requirements 3.5**
### Property 8: 评论处理状态正确性
*对于任何* 评论和处理建议,当 suggestion = "auto" 时评论应被标记为垃圾,当 suggestion = "review" 时评论应被标记为待审核,当 suggestion = "approve" 时评论应被正常发布。
**Validates: Requirements 3.6, 3.7, 3.8**
### Property 9: 上下文数据完整性
*对于任何* 评论Context_Builder 构建的上下文应该包含文章标题、文章摘要、用户历史评论数、用户通过率、评论时间戳、IP 地址等所有必需字段。
**Validates: Requirements 4.1, 4.2, 4.3**
### Property 10: 上下文传递正确性
*对于任何* 构建的上下文,生成的 Prompt 应该包含该上下文中的关键信息(如文章标题、评论内容等)。
**Validates: Requirements 4.4**
### Property 11: 敏感信息脱敏正确性
*对于任何* 包含敏感信息的评论Context_Builder 返回的上下文中的邮箱应只保留域名IP 地址应只保留前两段。
**Validates: Requirements 4.5, 10.1, 10.2**
### Property 12: 摘要截取正确性
*对于任何* 超过 200 字符的文章摘要Context_Builder 返回的摘要应该被截取为 200 字符。
**Validates: Requirements 4.6**
### Property 13: 反馈记录完整性
*对于任何* 管理员审核操作Learning_Module 记录的反馈应该包含 AI 判断结果、管理员决策、时间戳、评论特征哈希等所有必需字段。
**Validates: Requirements 5.1, 5.2**
### Property 14: 误判率计算正确性
*对于任何* 反馈数据集Learning_Module 计算的误判率应该等于(误判数量 / 总检测数量)。
**Validates: Requirements 5.3**
### Property 15: 优化建议触发正确性
*对于任何* 反馈数据集,当某类型评论的误判率超过 30% 时Learning_Module 应该生成相应的优化建议。
**Validates: Requirements 5.4**
### Property 16: 反馈数据导出格式正确性
*对于任何* 反馈数据集,导出的 CSV 数据应该包含所有必需列comment_id、ai_result、admin_action、timestamp 等),且格式符合 CSV 标准。
**Validates: Requirements 5.5**
### Property 17: 统计数据准确性
*对于任何* 反馈数据集Learning_Module 返回的统计数据(总检测数、自动处理数、误判数)应该与实际数据一致。
**Validates: Requirements 5.6**
### Property 18: API 错误默认值正确性
*对于任何* API 错误响应AI_Detector 应该使用默认值is_spam=false, confidence=0, suggestion="approve")并允许评论正常发布。
**Validates: Requirements 8.1, 8.2**
### Property 19: 自动禁用机制正确性
*对于任何* API 调用序列,当连续失败次数达到配置的阈值(默认 3 次)时,系统应该自动禁用实时检测指定时长(默认 1 小时)。
**Validates: Requirements 8.3**
### Property 20: 错误日志容量限制
*对于任何* 错误日志序列,系统应该只保留最近的 N 条(默认 10 条)错误日志。
**Validates: Requirements 8.4**
### Property 21: 自动恢复机制正确性
*对于任何* 被禁用的检测系统,当 API 调用成功时,系统应该自动重新启用实时检测。
**Validates: Requirements 8.5**
### Property 22: 手动恢复功能正确性
*对于任何* 被禁用的检测系统,调用手动恢复功能后,系统应该立即重新启用实时检测并清除错误计数。
**Validates: Requirements 8.6**
### Property 23: 异步检测非阻塞性
*对于任何* 评论提交,当异步检测启用时,评论提交操作应该在 API 调用完成前就返回成功响应。
**Validates: Requirements 9.1**
### Property 24: 状态更新正确性
*对于任何* 评论和 API 响应,当 API 返回结果后评论的状态应该根据处理建议正确更新auto → 垃圾/回收站review → 待审核approve → 已发布)。
**Validates: Requirements 9.3**
### Property 25: 批量扫描完整性
*对于任何* 评论 ID 列表,批量扫描功能应该对列表中的每个评论都执行检测,且返回的结果数量应该等于输入的评论数量。
**Validates: Requirements 9.4**
### Property 26: 队列限速正确性
*对于任何* 批量扫描操作API 调用的频率应该不超过配置的速率限制(如每秒最多 N 次调用)。
**Validates: Requirements 9.5**
### Property 27: 缓存一致性
*对于任何* 用户邮箱,在缓存有效期内多次查询该用户的历史统计应该返回相同的结果,且只执行一次数据库查询。
**Validates: Requirements 9.6**
### Property 28: 隐私保护完整性
*对于任何* 评论和隐私级别配置,发送给 API 的数据不应包含用户的真实姓名、完整邮箱(标准模式)或任何用户标识信息(严格模式)。
**Validates: Requirements 10.3, 10.5**
### Property 29: 隐私级别配置往返一致性
*对于任何* 有效的隐私级别值standard 或 strict保存后再读取应该得到相同的配置。
**Validates: Requirements 10.4**
## Error Handling
### API 错误处理
1. **连接超时**
- 超时时间30 秒
- 处理:记录错误日志,使用默认值,允许评论发布
- 重试:不自动重试,由自动禁用机制控制
2. **API 返回错误状态码**
- 4xx 错误:记录错误,使用默认值,不计入连续失败
- 5xx 错误:记录错误,使用默认值,计入连续失败
- 速率限制429延迟重试不计入连续失败
3. **响应格式错误**
- JSON 解析失败:记录错误,使用默认值
- 缺少必需字段:记录警告,使用默认值填充
- 字段类型错误:记录警告,尝试类型转换
4. **自动禁用机制**
- 触发条件:连续失败 N 次(默认 3 次)
- 禁用时长M 分钟(默认 60 分钟)
- 恢复条件:时间到期或手动恢复或 API 调用成功
- 通知:在管理后台显示禁用状态和原因
### 数据验证错误
1. **评论数据不完整**
- 缺少必需字段:记录警告,跳过检测
- 字段格式错误:记录警告,尝试修复或跳过
2. **配置数据无效**
- 阈值超出范围:使用默认值 0.85
- 模式不存在:使用默认模式 standard
- 自定义模板格式错误:显示错误提示,不保存
3. **上下文构建失败**
- 文章不存在:使用空字符串
- 用户历史查询失败使用默认值count=0, rate=0
- 数据库错误:记录错误,使用最小上下文
### 数据库错误
1. **反馈记录失败**
- 记录错误日志
- 不影响评论处理流程
- 在管理后台显示警告
2. **统计查询失败**
- 返回空数据或默认值
- 在管理后台显示错误提示
3. **批量操作失败**
- 记录失败的评论 ID
- 继续处理剩余评论
- 在完成后显示失败列表
## Testing Strategy
### 测试方法
本项目采用双重测试策略:
1. **单元测试**:验证具体示例、边缘情况和错误条件
2. **属性测试**:验证通用属性在所有输入下的正确性
两种测试方法互补,共同保证系统的正确性和健壮性。
### 单元测试重点
单元测试应关注以下方面:
1. **具体示例**
- 典型的垃圾评论示例
- 典型的正常评论示例
- 边界值测试(置信度 0.5, 0.85, 0.9 等)
2. **边缘情况**
- 空评论内容
- 超长评论内容
- 特殊字符和 Unicode
- 文章不存在
- 用户无历史记录
3. **错误条件**
- API 超时
- API 返回错误
- 数据库连接失败
- 配置数据无效
4. **集成点**
- WordPress 钩子集成
- 评论状态更新
- 管理后台显示
### 属性测试配置
**测试库选择**
- PHP: PHPUnit + Eris (Property-Based Testing)
- 或使用 Pest + Pest Property Testing Plugin
**测试配置**
- 每个属性测试最少运行 100 次迭代
- 使用随机种子确保可重现性
- 失败时自动缩小shrinking到最小失败案例
**属性测试标签格式**
```php
/**
* @test
* Feature: ai-spam-detection-optimization, Property 1: Prompt 模式完整性
*/
public function test_prompt_mode_completeness() {
// 属性测试实现
}
```
### 测试数据生成
**生成器定义**
1. **评论生成器**
- 随机内容1-1000 字符)
- 随机作者名1-50 字符)
- 随机邮箱(有效格式)
- 随机 URL有效格式或空
- 随机 IP 地址
2. **上下文生成器**
- 随机文章标题1-200 字符)
- 随机文章摘要0-500 字符)
- 随机用户历史count: 0-1000, rate: 0-1
3. **配置生成器**
- 随机阈值0.5-1.0
- 随机模式minimal, standard, enhanced
- 随机隐私级别standard, strict
4. **API 响应生成器**
- 随机 is_spamtrue/false
- 随机 confidence0-1
- 随机 reason1-200 字符)
- 随机 suggestionauto/review/approve
### 测试覆盖率目标
- **代码覆盖率**> 80%
- **分支覆盖率**> 75%
- **属性测试覆盖**:所有 29 个正确性属性
- **单元测试覆盖**:所有核心函数和边缘情况
### 性能测试
1. **响应时间测试**
- 评论提交响应时间 < 100ms异步模式
- 同步检测响应时间 < 3s
- 批量扫描 100 条评论 < 5 分钟
2. **并发测试**
- 模拟 10 个并发评论提交
- 验证无数据竞争和死锁
3. **负载测试**
- 批量扫描 1000 条评论
- 验证内存使用 < 256MB
- 验证数据库查询次数合理
### 集成测试
1. **WordPress 集成**
- 测试评论提交钩子
- 测试评论状态更新
- 测试管理后台显示
2. **API 集成**
- 测试 OpenAI API 调用
- 测试自定义 API 端点
- 测试错误处理
3. **数据库集成**
- 测试反馈记录存储
- 测试统计数据查询
- 测试批量操作
### 测试环境
1. **本地开发环境**
- PHP 7.4+
- WordPress 5.8+
- MySQL 5.7+
- PHPUnit 9.5+
2. **CI/CD 环境**
- GitHub Actions 或类似 CI 工具
- 自动运行所有测试
- 代码覆盖率报告
3. **测试数据**
- 使用 WordPress Test Suite
- 创建测试数据库
- 使用 mock API 响应
### 测试执行顺序
1. **快速测试**< 1 分钟):
- 单元测试
- 快速属性测试10 次迭代)
2. **完整测试**< 10 分钟):
- 所有单元测试
- 完整属性测试100 次迭代)
- 集成测试
3. **性能测试**< 30 分钟):
- 响应时间测试
- 并发测试
- 负载测试
### 测试维护
1. **定期更新**
- 随着需求变化更新测试
- 添加新发现的边缘情况
- 优化慢速测试
2. **失败分析**
- 记录所有测试失败
- 分析失败原因
- 修复或更新测试
3. **覆盖率监控**
- 定期检查覆盖率报告
- 识别未覆盖的代码
- 添加缺失的测试