GH GambleHub

Միջուկի փորձարկման ռազմավարություն

1) Սկզբունքներ

Բուրգի-տրոֆեյի հավասարակշռությունը։ Բազան արագ մոդուլային և պայմանագրային թեստեր է։ վերևում 'բաղադրիչ և ինտեգրալ; գագաթին նվազագույն է, բայց արժեքավոր շերտը e2e է։

Shift-left. Որքան շուտ բռնում ենք դեֆեկտը (լինտեր, ստատիկ վերլուծություն, property-based), այնքան ավելի էժան է։

Deterministic by design. Մենք կառավարում ենք ժամանակը, ցանցը, ռանդոմը և արտաքին կախվածությունը։

Որակի տնտեսությունը։ Ցանկացած թեստ «ապահովագրություն» է, նպատակը նվազագույնի հասցնելն է ընդհանուր ծախսերը (թերությունները + թեստերի ուղեկցությունը)։

Ռիսկի կողմնորոշումը։ Ծածկույթը կենտրոնանում է բիզնեսի ինվարանտների և արձանագրությունների վրա (պայմանագրեր, գաղափարախոսություն, կոնսիստենտություն)։

2) Փորձարկման և պատասխանատվության գոտիների մակարդակները

2. 1 Unit (մոդուլային)

Ստուգում են մաքուր տրամաբանությունը առանց I/O.

Մոկայը միայն սահմաններ է (պորտ/ադապտեր), մենք օգտագործում ենք տվյալների գործարաններ։

Արագ (50-100 մզ/թեստ), զուգահեռ։

2. 2 Medract (ռուսական սպառողի մատակարարը)

Նրանք արձանագրում են API պայմանագրերը (HTTP/gRPC/event) ծառայությունների միջև։

Մենք օգտագործում ենք consumer-driven մոտեցում. Պայմանագրերը պահպանվում են VCS-ում, ստուգվում են CI-ում։

Նվազեցնում են ինտեգրացիոն e2e-ի փխրունությունը։

2. 3 Component (խողովակի վերևում, իրական պահեստավորման հետ)

Եկեք սկսենք իրական BD/cash-ից (Testcontainers)։

Մենք պահպանում ենք համապատասխան սխեմաները, ինդեքսները, գործարքները, արգելափակումները։

2. 4 Integration/Express (ծառայությունների միջև)

Մենք բարձրացնում ենք ծառայությունների մի շարք մեկուսացված միջավայրում։

Մենք ստուգում ենք invariants 'գործարքը, retray, idempotenty, սխալների վերամշակում։

2. 5 E2E (նվազագույն «արժեքավոր» շերտ)

Իրական արձանագրությունները և շրջապատը «ինչպես վաճառքում», բայց սահմանափակ սցենարի հավաքածու 'վճարումը հաստատվում է վերջնական լարման վրա։ 111. Հավատարմագրում։

Մենք օգտագործում ենք բարձրորակ ֆիգուրների թողարկման և ռեգրեսիայի համար։

3) Թեսթոպրեգային ճարտարապետություն

Մոսկվա/ադապտերներ (Hexagonal)։ Բիզնես միջուկը չգիտի HTTP/SQL-ի մասին։ կախվածությունը ներդրվում է ինտերֆեյսերի միջոցով։

Ժամանակի արտահայտումը/ռանդոմը '«Clock», «Random» - կախվածությունը; փորձարկումներում մենք արձանագրում ենք։

Հայտարարված I/O աբստրակցիան։ Գծերը, BD, KFC-ը թեստ իրողությունների միջերեսների միջոցով։

Ֆունկցիոնալ ինվարանտներ։ Մենք հստակ ձևավորում ենք հետմահու նախատիպեր, որոնք ավելի հեշտ են ստուգել և վերահսկել դրանք։

4) Թեստերի տվյալները

Գործարաններ/բիլդերներ ստատիկ JSON-ֆիքսթուրի փոխարեն 'ավելի քիչ փխրունություն։

Idempotent նստատեղերը և reset-huk BD-ը թեստի առջև (migrance truncate seed)։

Մոսկվան և քեյսները ՝ «նորմեր», «եզրեր», «սխալներ», «քաոս»։

Սինթեզիկան իրական PD-ի փոխարեն 'գեներատորներ, դիմակներ, մասնագիտության պրոֆիլներ։

5) Մրցակցություն և գաղափարախոսություն

Մրցույթների թեստերը (race) 'մրցակցային ձայնագրություններ/պահեստներ/արգելափակումներ։

Idempotent-ի ստուգումը (օրինակ '(operation, external _ id), կրկնվող մարտահրավերները չեն փոխում վիճակը։

Retrai և timauts: Մենք երաշխավորում ենք ճիշտ սխալ սխալների դեպքում։

Կեղծ (idempocode)


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-քեյսները (դուբլներ/ժամացույցներ), պատուհանը «112 օր»։

Թայմաուտները ստուգում ենք մոնոտոնիկ ժամացույցները։ սիմուլյացիա NTP խմորիչ։

7) Կայունություն և քաոս

Fox-inj.ru: Ցանցային սխալները, 5xx, ուշացումները, մասնակի քայքայումը (քեշը անհասանելի է)։

Chaos-թեստերը pre-2019 միջավայրում 'հանգույցների անջատումը, հերթափոխի ծանրաբեռնվածությունը, BGP/Anycript (էմուլյացիա)։

Fallback քաղաքականությունը և UX-ի քայքայումը. Թեստերը պետք է ապացուցեն ճիշտ «graceful degradation»։

8) Արտադրողականությունը

Միկրո-բենչմարկները կրիտիկական ալգորիթմների համար (CPU/alloc)։

Բեռի պրոֆիլները 'baseline (p50/p95), սթրեսը (pik), երկարաձգված (soak) հիշողության արտահոսքի համար։

Report-gates: build ձախողվում է, եթե p95 լատենտ ավելի վատ է, քան baseline> X տոկոսը։

9) Անվտանգությունն ու համապատասխանությունը

SFC/Lint 'խոցելիության/հակատիպերի որոնում։

DFC/IFC: հիմնական սցենարները պատի վրա (XIV/XXI/SSRF փորձարկումներ)։

Secrets-scan 'կոդում/գաղտնաբառերի բացակայություն և արտեֆակտներում։

Privacy-թեստեր 'PD-ի բացակայությունը լոգարաններում/հետքերով, «համաձայնությունների կառավարման» պահպանումը, բեռնման համար անանունիզացիայի պրոֆիլները։

10) Հատկության և SLO-ի մետրերը

Test pass rate և flaky index (col-ը անկայուն թեստերի/շաբաթ)։

Coverage-նպատակային

90-100 տոկոսը կրիտիկական միջուկի մոդուլների համար,

ծայրամասային 70-80 տոկոսը (ինվարանտների կենտրոնով)։

Releensrisk score: Ընդհանուր ՝ կրիտիկական ֆայլերում փոփոխությունները բացատրում են բենչմարների անկումը նոր flaky։

Սխալ բյուջեն 'prod-SLO (aptaim/սխալներ) փորձարկումների և օրինագծերի հետ։

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

Գեյթսը 'ստոպը նվազելու համար, լատենտության աճը, նոր կրիտիկական խոցելիությունները։

Քեշը և շարդինգը 'արագացնել pipeline-ը զուգահեռականության և ռեմենտալ պրոգոնների միջոցով (փոփոխված մոդուլներով)։

12) Flaky-թեստեր 'հայտնաբերում և բուժում

Ավտոպովատորը + kvorum (2/3 նոսր)։

Ֆլակի-պաթոգենների դետեկտորը 'ժամանակից/ռանդոմից/ակնհայտ սպասումներից կախվածությունը։

Կարանտինը SLA-ից 'թեստը չի արգելափակում օրինագծերը, բայց պարտավոր է շտկել/վերաշարադրել N օրվա ընթացքում։

Զրոյական հանդուրժողականությունը ֆլակի հետ կրիտիկական ճանապարհի «միջուկում»։

13) Property-based, մուտացիոն և medes-թեստավորում

Property-based: Մենք ձևակերպում ենք հատկություններ (բաղադրիչներ, գաղափարախոսություն, մոնոտոնիզմ), սահմանային տվյալների գեներատորներ։

Mutation testing: չափում ենք թեստերի «ուժը» (արդյո՞ ք նրանք սպանում են մուտացիաները)։

Fuzzing : /parsers/2019 (JSON, Delobuf, CSV), հատկապես անվտանգության սահմաններում։

Հատկությունների օրինակ (կեղծ)


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

14) Դիտողությունն ու կապը թեստերի հետ

Թեստերի հետքերը (trace-id լոգարանում) 'հարմար է pre-2019-ում։

Պարկուճները փոխաբերական են պերֆորմանսային պրոթոնով, որը պահվում է որպես արտեֆակտ։

Լոգարանների վերահսկումը 'զգայուն դաշտերի բացակայություն, SLO-ի սահմաններում լոգարանների չափը։

15) Մոսկվան և ընթացակարգերը

Test Handbook: Որտե՞ ղ սկսել, ինչպես գրել գործարաններ, ինչպես նորարարել պայմանագրերը։

Runbooks: Repley, արագ ախտորոշում, հետադարձում։

Ինվարանտների կատալոգը 'համապատասխան երաշխիքների և հղումների ցանկը համապատասխան թեստերի/ալտերտերի վրա։

16) Ճարտարապետի չեկի թերթիկը

1. Նկարագրված են միջուկի ինվարանտները և կրիտիկական ճանապարհները։

2. Թեստերի մակարդակների մատրիցա կա և դրանց SLO (ժամանակ, հաճախորդ)։

3. Պայմանագրերը տարբերակվում և վալիդացվում են CI-ում ռուսական և սպառողի մոտ։

4. Ժամանակը/վաղ/ցանցը վերահսկվում է թեստերում (FixedClock, Fox-injector)։

5. Արդյո՞ ք Testcontainers/մեկուսացված BD-ը ստուգվում է։

6. Կան պերֆորանսային բազլիններ և ռեգրեսիայի գեյթ։

7. Ներառե՞ լ են SBS/Secrets-scan և privacy-ստուգումները։

8. Կատարվում է flaky և կա SLA ուղղման համար։

9. Թեստերի կապը prod-SLO-ի և սխալ բյուջեի հետ պարզ է։

10. Փաստաթղթավորված է runbook "և ինվարանտների կատալոգը։

Եզրակացություն

Միջուկի փորձարկման ռազմավարությունը ոչ թե գործիքների ցուցակն է, այլ ճարտարապետական ունակությունը 'տեստոպրիդային դիզայնը, մակարդակների խիստ հիերարխիան, կառավարվող տվյալները, ձախողումը և չափումները, որոնք տեղադրված են CI/CD-ում։ Նկարագրված պրակտիկային հետևելով ՝ թիմը ստանում է արագ և հուսալի հետադարձ կապ, իսկ ալգորիթմները դառնում են կանխատեսելի և անվտանգ։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Telegram
@Gamble_GC
Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։