# Tool_OCR Testing Guide ## 測試架構 本專案包含完整的測試套件,包括單元測試和集成測試。 --- ## 後端測試 ### 安裝測試依賴 ```bash cd backend pip install pytest pytest-cov httpx ``` ### 運行所有測試 ```bash # 運行所有測試 pytest # 運行並顯示詳細輸出 pytest -v # 運行並生成覆蓋率報告 pytest --cov=app --cov-report=html ``` ### 運行特定測試 ```bash # 僅運行單元測試 pytest tests/test_auth.py pytest tests/test_tasks.py pytest tests/test_admin.py # 僅運行集成測試 pytest tests/test_integration.py # 運行特定測試類 pytest tests/test_tasks.py::TestTasks # 運行特定測試方法 pytest tests/test_tasks.py::TestTasks::test_create_task ``` ### 測試覆蓋 **單元測試** (`tests/test_*.py`): - `test_auth.py` - 認證端點測試 - 登入成功/失敗 - Token 驗證 - 登出功能 - `test_tasks.py` - 任務管理測試 - 任務 CRUD 操作 - 用戶隔離驗證 - 統計數據 - `test_admin.py` - 管理員功能測試 - 系統統計 - 用戶列表 - 審計日誌 **集成測試** (`tests/test_integration.py`): - 完整認證和任務流程 - 管理員工作流程 - 任務生命週期 --- ## 測試資料庫 測試使用 SQLite 記憶體資料庫,每次測試後自動清理: - 不影響開發或生產資料庫 - 快速執行 - 完全隔離 --- ## Fixtures (測試夾具) 在 `conftest.py` 中定義: - `db` - 測試資料庫 session - `client` - FastAPI 測試客戶端 - `test_user` - 一般測試用戶 - `admin_user` - 管理員測試用戶 - `auth_token` - 測試用戶的認證 token - `admin_token` - 管理員的認證 token - `test_task` - 測試任務 --- ## 測試範例 ### 編寫新的單元測試 ```python # tests/test_my_feature.py import pytest class TestMyFeature: """Test my new feature""" def test_feature_works(self, client, auth_token): """Test that feature works correctly""" response = client.get( '/api/v2/my-endpoint', headers={'Authorization': f'Bearer {auth_token}'} ) assert response.status_code == 200 data = response.json() assert 'expected_field' in data ``` ### 編寫新的集成測試 ```python # tests/test_integration.py class TestIntegration: def test_complete_workflow(self, client, db): """Test complete user workflow""" # Step 1: Login # Step 2: Perform actions # Step 3: Verify results pass ``` --- ## CI/CD 整合 ### GitHub Actions 範例 ```yaml name: Tests on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v2 with: python-version: 3.11 - name: Install dependencies run: | cd backend pip install -r requirements.txt pip install pytest pytest-cov - name: Run tests run: | cd backend pytest --cov=app --cov-report=xml - name: Upload coverage uses: codecov/codecov-action@v2 ``` --- ## 前端測試 (未來計劃) ### 建議測試框架 - **單元測試**: Vitest - **元件測試**: React Testing Library - **E2E 測試**: Playwright ### 範例配置 ```bash # 安裝測試依賴 npm install --save-dev vitest @testing-library/react @testing-library/jest-dom # 運行測試 npm test # 運行 E2E 測試 npm run test:e2e ``` --- ## 測試最佳實踐 ### 1. 測試命名規範 - 使用描述性名稱: `test_user_can_create_task` - 遵循 AAA 模式: Arrange, Act, Assert ### 2. 測試隔離 - 每個測試獨立執行 - 使用 fixtures 提供測試數據 - 不依賴其他測試的狀態 ### 3. Mock 外部服務 - Mock 外部 API 呼叫 - Mock 檔案系統操作 - Mock 第三方服務 ### 4. 測試覆蓋率目標 - 核心業務邏輯: >90% - API 端點: >80% - 工具函數: >70% --- ## 故障排除 ### 常見問題 **問題**: `ImportError: cannot import name 'XXX'` **解決**: 確保 PYTHONPATH 正確設定 ```bash export PYTHONPATH=$PYTHONPATH:$(pwd) ``` **問題**: 資料庫連接錯誤 **解決**: 測試使用記憶體資料庫,不需要實際資料庫連接 **問題**: Token 驗證失敗 **解決**: 檢查 JWT secret 設定,使用測試用 fixtures --- ## 測試報告 執行測試後生成的報告: 1. **終端輸出**: 測試結果概覽 2. **HTML 報告**: `htmlcov/index.html` (需要 --cov-report=html) 3. **覆蓋率報告**: 顯示未測試的代碼行 --- ## 持續改進 - 定期運行測試套件 - 新功能必須包含測試 - 維護測試覆蓋率在 80% 以上 - Bug 修復時添加回歸測試 --- **最後更新**: 2025-11-16 **維護者**: Development Team