測試覆蓋範圍
測試統計
當前測試狀態 (2025年11月):
- 總測試數: 607 個
- 通過率: 100%
- 執行時間: ~55 秒
測試組織架構
測試分類
PETsARD 測試套件按功能模組組織,使用 pytest markers 進行分類:
unit: 單元測試,測試獨立組件功能integration: 整合測試,測試模組間互動stress: 壓力測試,測試大型資料集和極端情況excel: Excel 檔案測試,需要 openpyxl 套件
測試目錄結構
tests/
├── test_petsard.py # 端到端工作流程測試
├── test_executor.py # Executor 配置與日誌測試
├── test_adapter.py # 配置適配器測試
├── loader/ # 資料載入模組
├── processor/ # 資料處理模組
├── metadater/ # 詮釋資料管理模組
├── synthesizer/ # 合成器模組
├── constrainer/ # 約束器模組
├── evaluator/ # 評估器模組
├── describer/ # 描述器模組
└── reporter/ # 報告器模組核心功能測試
端到端測試 (test_petsard.py)
測試完整的 PETsARD 工作流程:
- 基本工作流程: 資料載入 → 預處理 → 合成 → 後處理
- 資料預處理: 缺失值處理、編碼、標準化
- 約束應用: 數值範圍、欄位比例控制
- 評估指標: 品質報告、統計比較
- 最小管道: 僅載入和報告
- 錯誤處理: 無效配置檢測
執行器 (test_executor.py)
測試 Executor 配置和執行管理:
- 配置驗證(日誌等級、輸出類型)
- 日誌系統初始化和重新配置
- YAML 配置載入
- 預設值處理
資料載入測試
Loader (loader/test_loader.py)
基礎功能:
- CSV/Excel 檔案載入
- 自定義空值和標題處理
- 資料-Schema 自動協調(欄位對齊、型別推斷)
邏輯型態系統:
- 文字型態:email, url, uuid, categorical, ip_address
- 數值型態:percentage, currency, latitude, longitude
- 識別碼型態:primary_key
- 型態相容性驗證和衝突解決
Schema 參數系統:
- 全域參數:compute_stats, optimize_dtypes, sample_size
- 欄位參數:logical_type, leading_zeros
- 參數衝突檢測
壓力測試 (標記為 stress):
- 100MB - 5GB 檔案處理測試
- 記憶體使用監控
- 型別推斷邊界情況
Benchmarker (loader/test_benchmarker.py)
測試基準資料集管理:
- 資料集下載和快取
- SHA-256 完整性驗證(不匹配時警告)
- benchmark:// 協議處理
- LoaderAdapter 整合
Splitter (loader/test_splitter.py)
測試資料分割功能:
- 訓練/測試分割
- 多樣本生成
- 分層抽樣
- 隨機種子控制
資料處理測試
Processor (processor/)
缺失值處理 (test_missing.py):
- MissingMean, MissingMedian, MissingSimple, MissingDrop
- pandas 可空整數型別支援
- 銀行家舍入法處理
異常值處理:
- IQR、Z-score、Isolation Forest 方法
- 異常值削減或移除
- pandas 陣列相容性
編碼器:
- Label、OneHot、Target 編碼
- 自動類型推斷
標準化器:
- Standard、MinMax、Robust 標準化
- 數值特徵處理
Metadater (metadater/)
測試三層架構詮釋資料系統:
三層架構:
- Metadata 層:多表格管理
- Schema 層:欄位定義
- Attribute 層:欄位屬性
核心功能:
- 從資料/配置建立詮釋資料
- 差異比較 (diff)
- 資料對齊 (align)
- 統計計算
- YAML 往返相容性
評估與報告測試
Describer (describer/)
DescriberDescribe (test_describer_describe.py):
- 統計方法:basic, percentile, na, cardinality
- 粒度:全域、欄位級
- 資料類型:數值、類別、混合
- 邊界情況:空資料、極端值、高基數
DescriberCompare (test_describer_compare.py):
- JS Divergence 計算
- 代碼重用架構(重用 DescriberDescribe)
- NA 值處理
- base/target 參數命名
Evaluator (evaluator/)
SDMetrics 整合 (test_sdmetrics.py):
- 品質報告評估
- 診斷報告生成
- 單表格和多表格場景
- 粒度控制(global/columnwise/pairwise)
MPUCCS 隱私評估 (test_mpuccs.py):
- 成員推論攻擊評估
- 隱私風險指標
- 多類別分類支援
自定義評估器 (test_custom_evaluator.py):
- 評估器註冊機制
- 自定義評估邏輯
- 工廠模式整合
Constrainer (constrainer/)
約束類型:
- NaN 群組約束 (
test_nan_group_constrainer.py):- Delete, Erase, Copy 動作
- 多欄位處理
- 欄位約束 (
test_field_constrainer.py):- 數值範圍、條件表達式
- 複雜邏輯組合
- 字串字面值處理(含運算符)
- 欄位比例 (
test_constrainer.py):- 類別分佈維護
- 缺失值比例控制
- 重新採樣機制
Reporter (reporter/)
ReporterSaveData:
- CSV/Excel/Pickle 輸出
- 多格式同時儲存
- 自訂輸出路徑
ReporterSaveSchema (test_reporter_save_schema.py):
- Schema CSV 摘要生成
- YAML 詳細輸出
- 多來源模組支援
- Schema 攤平和結構化
配置適配器測試
Adapter (test_adapter.py)
測試 YAML 配置處理:
三層 YAML 架構:
- Module 層:模組類型和名稱
- Experiment 層:實驗配置
- Parameters 層:參數細節
功能測試:
- benchmark:// 協議處理
- 後處理器精度和四捨五入
- 多重後處理序列
- 管道式資料流驗證