Task #34
進行中PID測試腳本-PID模組
0%
localhost
DELLPrecision 5820 Tower intel(R)Xeon(R)w-2233 CPU,3.6GHz, RAM:128G Windows 11專業版工作站。x64位元
概述
PID 控制優化系統測試 TODO 清單
測試環境準備
- 建立測試資料庫和 Redis 連線
- 準備測試用戶(具 PID 優化權限)
- 設定測試環境變數(LLM API Keys, 資料庫配置)
- 初始化 pytest fixtures 和測試客戶端
- 準備標準 CSV 測試資料集
一、基礎 API 端點測試 (POST /api/v1/pid/optimize)
✅ 認證與授權測試
- PID-001: 使用有效 Token 成功訪問 PID 優化端點
- PID-002: 無 Token 時訪問失敗(401)
- PID-003: 無效 Token 時訪問失敗(401)
- PID-004: 一般用戶權限訪問測試
- PID-005: 工程師權限訪問測試
- PID-006: 管理員權限訪問測試
二、請求資料驗證測試
📝 PID 參數驗證(PIDParamsRequest)
- PID-007: 有效的基本 PID 參數請求成功
{
"sp": 50.0,
"kp": 1.0,
"ti": 100.0,
"td": 0.0,
"u_min": 0.0,
"u_max": 100.0,
"dt": 1.0,
"pid_form": "time_constant"
} - PID-008: sp (設定點) 驗證
- sp > 0 成功
- sp = 0 失敗(422)
- sp < 0 失敗(422)
- PID-009: kp (比例增益) 驗證
- kp > 0 成功
- kp = 0 失敗(422)
- kp < 0 失敗(422)
- PID-010: ti (積分時間) 驗證
- ti > 0 成功
- ti = 0 失敗(422)
- ti < 0 失敗(422)
- PID-011: td (微分時間) 驗證
- td >= 0 成功
- td < 0 失敗(422)
- PID-012: 控制範圍驗證
- u_max > u_min 成功
- u_max = u_min 失敗(422)
- u_max < u_min 失敗(422)
- PID-013: 採樣時間驗證
- dt > 0 成功
- dt = 0 失敗(422)
- dt < 0 失敗(422)
📝 物理限制參數驗證
- PID-014: 有效物理限制設定
{
"u_phys_min": 10.0,
"u_phys_max": 90.0
} - PID-015: u_phys_max > u_phys_min 驗證
- PID-016: 物理限制自動調整測試
- u_min < u_phys_min 時自動調整
- u_max > u_phys_max 時自動調整
- 日誌記錄調整過程
- PID-017: 物理限制範圍太窄的處理
- u_phys_max - u_phys_min < 1.0 的情況
📝 PID 參數形式轉換測試
- PID-018: time_constant 形式參數測試
- PID-019: gain 形式參數測試
{
"kp": 1.0,
"ti": 0.1, // 實際為 Ki
"td": 0.0, // 實際為 Kd
"pid_form": "gain"
} - PID-020: gain 轉 time_constant 轉換驗證
- PID-021: 轉換後參數邊界檢查
📊 歷史資料驗證(HistoryDataPoint)
- PID-022: 最少資料量驗證(10 筆)
- 9 筆資料失敗(422)
- 10 筆資料成功
- 50 筆資料成功
- 200+ 筆資料成功
- PID-023: 資料點格式驗證
{
"process_variable": 23.5,
"control_variable": 67.8
} - PID-024: control_variable 範圍驗證
- CV 在 [0, 100] 範圍內成功
- CV < 0 失敗(422)
- CV > 100 失敗(422)
- PID-025: 空值和異常值檢測
- null 值處理
- NaN 值處理
- Infinity 值處理
三、步階控制策略測試
🔧 策略驗證
- PID-026: "none" 策略測試
- 無步長限制
- 返回理論最佳解
- 單層優化結果格式
- PID-027: "conservative" 策略測試
- 2% 步長限制
- 漸進式調整
- 雙層優化結果格式
- PID-028: "balanced" 策略測試
- 3% 步長限制
- 平衡調整策略
- PID-029: "aggressive" 策略測試
- 5% 步長限制
- 快速調整策略
- PID-030: 無效策略名稱失敗
- "invalid_strategy" → 422 錯誤
🔧 步長計算驗證
- PID-031: PID 參數步長計算
- kp_step = |kp| * step_ratio
- ti_step = |ti| * step_ratio
- td_step = |td| * step_ratio
- PID-032: 零值參數步長處理
- kp = 0 時使用最小步長 0.001
- td = 0 時使用最小步長 0.001
- PID-033: 步階約束應用
- 目標值在步長範圍內直接使用
- 超出範圍時按步長調整
四、優化模式測試
🤖 自動模式(auto)
- PID-034: 自動選擇手動調諧
- CV 變化 < 2% → 手動調諧
- 靜態數據 → 手動調諧
- PID-035: 自動選擇 FOPDT
- 有明顯階躍響應 → FOPDT
- 線性系統特徵 → FOPDT
- PID-036: 自動選擇差分演化
- CV 變化 > 5% → 差分演化
- 複雜動態系統 → 差分演化
🔬 強制模式測試
- PID-037: "manual" 模式強制手動調諧
- PID-038: "fopdt" 模式強制 FOPDT 分析
- PID-039: "differential_evolution" 模式強制 AI 優化
- PID-040: 無效優化模式失敗(422)
五、響應格式驗證測試
📄 ManualTuningResponse 格式(無物理限制)
- PID-041: 基本響應結構驗證
{
"success": true,
"message": "智能參數調諧分析完成",
"static_analysis": {...},
"recommended_params": {...},
"analysis_summary": "...",
"analysis_warnings": [...],
"analysis_predictions": "..."
} - PID-042: StaticAnalysisData 完整性
- steady_state_error
- process_variable_stability
- control_variable_utilization
- data_quality
- noise_level
- trend_direction
- improvement_potential
- PID-043: recommended_params 不包含物理限制
📄 PIDOptimizationResponse 格式(有物理限制)
- PID-044: 雙層優化結構驗證
{
"success": true,
"message": "...",
"raw_input_params": {...},
"suggested_params": {...},
"best_params": {...},
"step_limited": true,
"step_strategy": "conservative",
"step_progress_ratio": 0.5,
"prediction_data": {...}
} - PID-045: raw_input_params 與用戶輸入一致
- PID-046: best_params 不包含物理限制
- PID-047: suggested_params 包含物理限制
- PID-048: step_progress_ratio 在 [0, 1] 範圍
📊 預測數據驗證
- PID-049: prediction_data 結構完整性
{
"historical": [...],
"suggested_prediction": [...],
"best_prediction": [...]
} - PID-050: 預測曲線數據點數量一致
- PID-051: 時間序列連續性驗證
六、AI 分析內容測試
🧠 分析摘要測試
- PID-052: analysis_summary 非空且有意義
- PID-053: 關鍵字替換驗證
- "手動調諧" → "智能參數調諧"
- "差分演化" → "AI演化式全域最佳化"
- "FOPDT" → "模型參考式參數優化"
🧠 警告與建議測試
- PID-054: analysis_warnings 根據數據品質生成
- 低品質數據 → 警告訊息
- 異常趨勢 → 警告訊息
- 不穩定系統 → 警告訊息
- PID-055: analysis_predictions 包含效果預測
- 穩態誤差改善預測
- 響應時間變化預測
- 系統穩定性評估
七、數據品質分析測試
📊 品質等級驗證
- PID-056: HIGH 品質數據處理
- CV 變化 > 5%
- 數據完整無異常
- 明顯動態特徵
- PID-057: MEDIUM 品質數據處理
- CV 變化 2-5%
- 輕微雜訊
- 部分動態特徵
- PID-058: LOW 品質數據處理
- CV 變化 < 2%
- 靜態或高雜訊數據
- 觸發手動調諧模式
📊 異常檢測測試
- PID-059: 數據噪音水平檢測
- PID-060: 趨勢方向分析
- "increasing" / "decreasing" / "stable"
- PID-061: 改善潛力評估
- 基於穩態誤差和變異性
八、錯誤處理測試
⚠️ 請求格式錯誤
- PID-062: 缺少必填欄位
- 缺少 pid_params → 422
- 缺少 history_data → 422
- PID-063: Content-Type 錯誤
- non-JSON 請求 → 422
- PID-064: 超大請求體處理
10MB 歷史資料
⚠️ 業務邏輯錯誤
- PID-065: PID 參數計算失敗
- 數學運算錯誤處理
- 收斂失敗處理
- PID-066: AI 服務不可用
- LLM API 錯誤處理
- 降級到基本分析
- PID-067: 內存不足處理
- 大量數據處理限制
⚠️ 系統錯誤
- PID-068: 數據庫連線失敗
- 返回 500 錯誤
- 不洩漏系統資訊
- PID-069: Redis 快取錯誤
- 優雅降級處理
九、效能與並發測試
⚡ 響應時間測試
- PID-070: 手動調諧模式 < 2秒
- PID-071: FOPDT 模式 < 5秒
- PID-072: 差分演化模式 < 10秒
⚡ 並發測試
- PID-073: 5 個用戶同時優化
- PID-074: 相同用戶多次請求處理
- PID-075: 內存使用監控
📊 大數據測試
- PID-076: 1000 筆歷史數據處理
- PID-077: 複雜參數組合優化
- PID-078: 多種步階策略並行
十、整合流程測試
🔄 完整優化流程
- PID-079: 登入 → 上傳數據 → 選擇策略 → 獲取結果
- PID-080: 不同策略結果比較
- PID-081: 多輪優化迭代測試
🔄 邊界情況組合
- PID-082: 物理限制 + 步階策略組合
- PID-083: 最小數據 + 最大物理限制
- PID-084: 所有參數邊界值組合
測試數據準備
標準測試數據集
TEST_DATASETS = {
"static_data": [
{"process_variable": 50.0 + random.uniform(-0.5, 0.5),
"control_variable": 60.0 + random.uniform(-1.0, 1.0)}
for i in range(50)
],
"dynamic_data": [
{"process_variable": 50.0 + 10sin(i0.1),
"control_variable": 60.0 + 5cos(i0.1)}
for i in range(100)
],
"step_response": [
# 階躍響應數據
],
"noisy_data": [
# 高雜訊數據
]
}
PID 參數組合
TEST_PID_PARAMS = {
"typical": {"sp": 50, "kp": 1.0, "ti": 100, "td": 0, "u_min": 0, "u_max": 100},
"aggressive": {"sp": 45, "kp": 2.0, "ti": 50, "td": 10, "u_min": 0, "u_max": 100},
"conservative": {"sp": 55, "kp": 0.5, "ti": 200, "td": 0, "u_min": 10, "u_max": 90},
"with_physical": {"sp": 50, "kp": 1.0, "ti": 100, "td": 0, "u_min": 0, "u_max": 100, "u_phys_min": 5, "u_phys_max": 85}
}
測試執行計畫
執行順序
- 環境與認證(PID-001 ~ PID-006)
- 參數驗證(PID-007 ~ PID-025)
- 策略與模式(PID-026 ~ PID-040)
- 響應格式(PID-041 ~ PID-051)
- AI 分析(PID-052 ~ PID-055)
- 品質分析(PID-056 ~ PID-061)
- 錯誤處理(PID-062 ~ PID-069)
- 效能測試(PID-070 ~ PID-078)
- 整合測試(PID-079 ~ PID-084)
測試指標
- 功能覆蓋率:100%
- API 端點覆蓋率:100%
- 代碼覆蓋率:> 85%
- 所有錯誤場景測試通過
- 效能基準全部達標
沒有任何資料可供顯示