可執行範例:獨立驗收與故障演練
這是 BE 教學,用 Python 3.9+ 標準庫啟動真實 HTTP 服務及隔離 SQLite。沒有外部依賴、FE、真實跨端 E2E 或正式產品接線。測試 expected 依 需求、API 約定 與 驗收情境。
先跑一次
在 framework 根目錄執行:
python3 examples/quality-workflow/run_demo.py
python3 tools/check_required_cases.py \
--plan examples/quality-workflow/acceptance-plan.json --role be \
--junit examples/quality-workflow/reports/baseline.xml --jsonrun_demo.py 會啟動暫存服務與乾淨 DB,執行四次,再產生 reports/ 下的 JUnit 及 execution-manifest.json(含來源/報告 hash);這些是本次執行結果,不納入 Git。服務每個案例獨立啟停及清理。
| 執行 | 預期結果 | 驗證重點 |
|---|---|---|
| baseline | 5 passed | 正常程式符合五個已定案例 |
| fault-duplicate-write | 2 failed、3 passed | 已付款拒絕與併發案例抓到多寫付款資料 |
| fault-wrong-error | 1 failed、4 passed | 已付款拒絕案例抓到錯誤原因碼不符 |
| restored | 5 passed | 同一測試回到正常程式後再次通過 |
演練總退出碼 0 代表以上預期都有發生,不代表故障版可交付。每次 runner 原始非零狀態與失敗案例仍完整保存;連線失敗等環境 error 不算指定業務斷言抓到錯。此教學透過故障模式啟動獨立服務,不修改主要 checkout;真實產品演練需另行授權隔離實作、服務與資料。
只跑正常版
在本目錄執行:
python3 -m independent.harness --junit reports/normal.xmlproduct.gitlab-ci.yml 示範正常版 runner+必要案例檢查器,從 framework 根目錄執行;目前沒有任何產品 include 它。實際產品須固定 QA suite、工具/映像版本,啟動該 MR 的程式與依賴,並配置必要 pipeline 和權限。產品 CI 不以 run_demo.py 當正常放行 job。
檔案分工
| 檔案 | 用途 |
|---|---|
| product-spec.md、api-contract.json | 固定業務與介面預期;API JSON 是教學約定,不是完整 OpenAPI |
| acceptance.feature、acceptance-plan.json | 情境及 case ID → runner 精確對照 |
| independent/cases.py | 依契約驗 API 回應與資料副作用 |
| independent/adapter.py、fixture.py | HTTP/資料觀察及隔離服務啟停 |
| independent/harness.py | 跑測試,輸出真實 JUnit 與退出碼 |
| demo_app/payment_service.py | 教學實作與兩種可控錯誤 |
| run_demo.py | 核對正常/故障/復原及生成來源紀錄 |
案例包含已付款拒絕、正常付款、併發只付款一次、非法請求與不存在訂單。資料查詢只適用此教學;產品可依約定使用 DB 或觀察 API。
完整 QA 庫、FE mock 驗收與固定部署 E2E 的接線見 實作計劃;此範例不宣稱真實人類已核准或產品 Gate 已啟用。