GH GambleHub

內核測試策略

1)原則

金字塔獎杯平衡。基地-快速模塊化和合同測試;上面-組件和集成;頂部-最小但有價值的e2e層。
Shift-left.越早捕捉缺陷(linter、靜態分析、基於屬性的)就越便宜。
Deterministic by design.管理時間、網絡、隨機和外部依賴關系。
質量經濟學。任何測試都是「保險」:目標是盡量減少總成本(缺陷+伴隨測試)。
風險導向。覆蓋範圍集中在業務不變性和協議(合同,平均性,一致性)上。

2)測試級別和責任區

2.1單位(模塊化)

檢查沒有I/O的純邏輯。
僅使用邊框(端口/適配器),將工廠用於數據。
快速(≤50 -100毫秒/測試),並行。

2.2合同(供應商↔消費者)

捕獲服務之間的API合同(HTTP/gRPC/event)。
使用消費者驅動的方法:合同存儲在VCS,在供應商CI中驗證。
減少整合e2e的脆弱性。

2.3組件(在模塊上方,帶有實際存儲)

我們使用容器中的實際DB/緩存 (Testcontainers)啟動部分服務。
驗證模式遷移、索引、事務、鎖定。

2.4整合/系統(跨服務端到端路徑)

在孤立的環境中提升服務集。
我們檢查端到端不變性:事務性,逆向性,冪等性,錯誤處理。

2.5 E2E(最小「有價值」層)

現實生活中的協議和環境「如銷售」,但場景集有限:付款→確認→布線;註冊→驗證→登錄。
用於發布高風險幻燈片的發行和倒退。

3)可測試體系結構

端口/適配器(Hexagonal)。業務核心不知道HTTP/SQL。依賴項是通過接口實現的。
時間/隨機註射。「Clock」,「Random」-成癮;在測試中,鎖定。
可配置的I/O抽象。隊列,DB,KMS-通過具有測試實現的接口。
功能不變量。我們明確地表述後置條件和謂詞-它們更容易測試和監測。

4)測試數據

工廠/售票員代替靜態JSON fixtur:減少易碎性。
在測試之前(migrations → truncate → seed),偶數蘋果酒和reset-hook DB。
案例目錄:「規範」,「邊緣」,「錯誤」,「混亂」。
合成代替真實的PD:生成器,蒙面,隱私概況。

5)競爭和平均水平

比賽測試(種族):競爭記錄/儲備/鎖定。
檢查等效密鑰(例如'(operation, external_id)':重復調用不會改變狀態。
Retrai和taymauts:確保時間錯誤時的正確性。

偽代碼(冪等):

dedupe_key = hash(op + external_id)
if exists(executions, dedupe_key): return previous_result else:
reserve(dedupe_key)
result = do_operation()
store(executions, dedupe_key, result)
return result

6)時間,時間,時區

所有存儲時間均為UTC;測試使用「FixedClock」。
我們測試DST案例(雙打/跳過時鐘),「本地日」窗口。
Taymauts用單調時鐘進行測試;模擬NTP抖動。

7)可持續性和混亂

故障註射:網絡錯誤、5xx、延遲、部分降級(緩存不可用)。
pre-prod環境中的混沌測試:關閉節點,超載隊列,BGP/Anycast斷裂(仿真)。
Fallback策略和UX降解:測試必須確認正確的「graceful degradation」。

8)生產力

用於關鍵算法的微型基準(帶有CPU/alloc固定)。
負載配置文件:baseline (p50/p95)、壓力(峰值)、延長(soak)用於內存泄漏。
倒退門:如果p95潛伏期比基線>X%差,則構建失敗。

9)安全性和合規性

SAST/Lint:查找漏洞/反模式。
DAST/IAST:展位上的基本腳本(XSS/SQLi/SSRF樣本)。
秘密掃描:代碼和工件中沒有密鑰/密碼。
隱私測試:在日誌/跟蹤中缺乏PD,遵守「同意管理」,上載的匿名配置文件。

10)質量指標和SLO

Test pass rate和flaky index(不穩定測試/周數)。

覆蓋目標:
  • 90-100%用於關鍵核心模塊,
  • 外圍設備70-80%(專註於不變量)。
  • 發行風險評分:總和:關鍵文件的變化×基準的下降× 新的flaky。
  • 預算錯誤:prod-SLO(上標/錯誤)捆綁與實驗和發布頻率。

11) CI/CD和門戶

階段矩陣:

1.Lint/Format/TypeCheck

2.Unit + Property-based

3.Contract provider/consumer

4.Component (Testcontainers)

5.Integration + Perf smoke

6.Security (SAST/Secrets)

7.Build/Package + SBOM

8.Deploy to pre-prod + e2e + chaos smoke

門戶:停止合同下降,潛伏期增加,新的關鍵漏洞。

緩存和緩存:通過並發和增量運行(通過修改的模塊)加速管道。

12)Flaky測試: 檢測和治療

自動壓制+法定人數(2/3運行)。
法拉克模式檢測器:時間依賴性/隨機/隱式期望。
SLA檢疫:測試不會阻止發布,但必須在N日進行修復/重寫。
臨界路徑的「核心」對小葉的零容忍度。

13)基於屬性的突變和階段測試

基於屬性的:表達屬性(可交換性、冪等性、單調性),邊界數據生成器。
Mutation testing:我們測量測試的「力量」(它們是否殺死所施加的突變)。
Fuzzing:協議/解析器/格式(JSON,Protobuf,CSV),尤其是在安全邊界上。

屬性的示例(偽代碼):

prop "serialize/deserialize roundtrip":
forAll(randomModel()):
decode(encode(model)) == model

14)可觀察性和與測試的聯系

測試跟蹤(在日誌中為trace-id):方便地回放到pre-prod中。
在表演運行中,指標的snapshots-作為人工制品存儲。
記錄控制:沒有敏感字段,記錄大小在SLO內。

15)文件和程序

測試手冊:在哪裏運行測試,如何編寫工廠,如何更新合同。
Runbooks:事件中繼、快速診斷、發布回滾。
不變量目錄:系統保修和參考相關測試/異構體的列表。

16)建築師支票清單

1.描述了核心不變性和關鍵路徑?

2.有測試級別矩陣及其SLO(時間、穩定性)?

3.合同是否在供應商和消費者的CI中進行審查和驗證?

4.在測試(FixedClock, Fault injector)中控制時間/咆哮/網絡?

5.配置了Testcontainers/隔離的 DB,遷移是否經過驗證?

6.有性能基線和回歸門嗎?

7.包括SAST/Secrets-scan和privacy log檢查?

8.flaky記錄在案,是否有SLA要修復?

9.測試與prod-SLO和有缺陷的預算之間的關聯是否透明?

10.記錄了運行手冊和不變量目錄?

二.結論

內核測試策略不是工具列表,而是體系結構能力:可測試的設計,嚴格的層級層次結構,可管理的數據,容錯性以及內置在CI/CD中的度量標準。按照所描述的做法,團隊得到快速可靠的反饋,發布變得可預測和安全。

Contact

與我們聯繫

如有任何問題或支援需求,歡迎隨時聯絡我們。我們隨時樂意提供協助!

Telegram
@Gamble_GC
開始整合

Email 為 必填。Telegram 或 WhatsApp 為 選填

您的姓名 選填
Email 選填
主旨 選填
訊息內容 選填
Telegram 選填
@
若您填寫 Telegram,我們將在 Email 之外,同步於 Telegram 回覆您。
WhatsApp 選填
格式:國碼 + 電話號碼(例如:+886XXXXXXXXX)。

按下此按鈕即表示您同意我們處理您的資料。