Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

Behaviorální sada spouští omezený počet případů najednou se sémantikou sériového běhu, případ zapisující do checkoutu se deklaruje jako exkluzivní a běží sám a paralelní fáze selže s uvedením cest, když se checkout pod ní změnil

MJ_TEST_JOBS=4 bash test/run.sh spouští případy po čtyřech a znamená přesně totéž co bash test/run.sh: každý případ běží, každý v jednorázovém repozitáři, neúspěšný případ zčervená běh s vlastním výstupem před svým verdiktem, souhrn je jeden deterministický blok v pořadí jmen, filtr, který nic neodpovídá, je chyba použití, stejně jako prázdný adresář případů. Každý případ už běží ve vlastním repozitáři, což je činí nezávislými; jediné, co sdílejí, je checkout, z něhož čtou, takže případ, který do něj musí zapisovat, to říká pomocí # majordomus-exclusive: <reason> a běží po poolu, sám.

deklarovaný stavdeklarovaný stav: zaručeno Deklarováno jako deterministické a blokující, implementováno a s uvedeným behaviorálním testem, který to má dokázat. Zda to zaznamenaný běh podporuje, říká verdikt důkazů zobrazený vedle.

zaznamenané důkazyzaznamenané důkazy: nespuštěno Deklarováno jako zaručené, ale nepodložené zaznamenaným během: test je pojmenován, ale žádný úspěšný běh nad současnými vstupy zaznamenán není. jak se zaznamenávají důkazy

MJ_TEST_JOBS omezuje pool (xargs -P, nikdy holý ampersand); každý případ má vlastní log; verdikty se vykreslují v pořadí jmen a celý log selhávajícího případu předchází jeho řádku; filtr, který nic nezachytí, a prázdný adresář případů jsou chyby použití v obou režimech; MJ_TEST_REPORT zapisuje pro souhrn jeden řádek na případ; test/lib.sh odmítne případ, který nestojí ve fixture, jenž pro něj vytvořilo test/run.sh, takže ručně spuštěný případ nemůže zapsat svou fixture do checkoutu. test/cases/26_ci_wiring.sh dokazuje sémantiku selhání v obou režimech na soukromém harnessu.

Co to znamená

MJ_TEST_JOBS=4 bash test/run.sh spouští případy po čtyřech a znamená přesně to, co bash test/run.sh: každý případ běží v jednorázovém repozitáři, selhávající případ zčervená běh s vlastním výstupem před svým verdiktem, souhrn je jeden deterministický blok v pořadí jmen, filtr, který nic neodpovídá, je chyba použití, stejně jako prázdný adresář případů. Každý případ už běží ve vlastním repozitáři, což je to, co je činí nezávislými; jediné, co sdílejí, je checkout, z něhož čtou, takže případ, který do něj musí zapisovat, to říká pomocí # majordomus-exclusive: <reason> a běží po poolu, sám.

Princip

Runner klasifikuje případy podle jejich hlavičky, paralelní předává xargs -P (omezeně; nikdy holé &), každý pracovník zapisuje log, stav a dobu trvání případu do souborů, pak spouští exkluzivní jeden po druhém a pak vykreslí verdikty v pořadí jmen ze souborů. Před paralelní fází a po ní vezme git status checkoutu a selže se jmenováním cest, které se liší. Případ spuštěný kdekoli jinde než ve fixture, kterou pro něj runner vytvořil, nikdy nedosáhne prvního řádku: test/lib.sh jej odmítne s run this case through test/run.sh, pokud nejsou nastaveny $T a $ROOT, případ nestojí v $T a $T není ani checkoutem, ani uvnitř něj, ani jiným checkoutem tohoto repozitáře. MJ_TEST_REPORT zapíše jeden řádek na případ (jméno, výsledek, sekundy, fáze) pro souhrn jobu. Bez MJ_TEST_JOBS je runner sériový, jaký byl vždy, streamující. test/cases/94_ci_plan.sh dokazuje sémantiku na soukromém harnessu jednorázových případů: červený běh s vykresleným logem, exkluzivní fáze, zpráva, omezený pool rychlejší než sériový, ochrana checkoutu jmenující cestu, chyby použití; test/cases/26_ci_wiring.sh dokazuje sémantiku selhání přes oba režimy.

Jak to vidět

MJ_TEST_JOBS=4 MJ_TEST_REPORT=/tmp/suite.tsv bash test/run.sh
sort -t "$(printf '\t')" -k3,3nr /tmp/suite.tsv | head       # the slowest cases
bash test/run.sh                                            # serially, streaming
grep -l '^# majordomus-exclusive:' test/cases/*.sh          # the cases that run alone
just test-shell 94_ci_plan

Co nepokrývá

Hlídač vidí sledované i nesledované soubory checkoutu, ne ignorované: případ zapisující pod site/public/ nebo apps/majordomus-cli/target/ jím zachycen není a oba případy webu se z toho důvodu deklarují jako výlučné. Případ, který závisí na nečinnosti stroje (tvrzení o reálném čase), runner deterministickým neudělá; případ 65 byl kvůli tomu normalizován. Počet workerů je měřená volba pro každý runner, zaznamenaná v modelu CI a v baseline, ne příslib o jiném stroji.

Proč existuje

Sada spouštěla jeden případ po druhém a na runneru trvala půl hodiny, přičemž případy dohromady dávají jen pár minut práce každý; dlouhý ocas je široký a plochý, takže omezený pool zkrátí reálný čas, aniž by se změnilo, co se dokazuje. Exkluzivní hlavička činí explicitní a kontrolovaný invariant, který uvádí project.tests-run-in-disposable-repos: případy nikdy nezapisují do tohoto checkoutu, zatímco ho jiné čtou, místo aby se to jen předpokládalo.

Detail vykreslený z docs/claims/suite-parallel.md.

Od tvrzení k důkazu

  1. 1 · veřejné tvrzení

    Behaviorální sada spouští omezený počet případů najednou se sémantikou sériového běhu, případ zapisující do checkoutu se deklaruje jako exkluzivní a běží sám a paralelní fáze selže s uvedením cest, když se checkout pod ní změnil

    Vytvořeno na CI.

  2. 2 · kanonické tvrzení

    suite-paralleldeklarovaný stav: zaručeno v docs/CLAIMS.yaml

    Definováno v přečtěte si na tomto webu · docs/CI.md

  3. 3 · implementace

    test/run.sh

  4. 4 · test a scénáře

    Test: test/cases/94_ci_plan.sh

  5. 5 · zaznamenané běhy

    zaznamenané důkazy: nespuštěno jak se zaznamenávají důkazy

Ověřte si to sami

Test běží v jednorázovém dočasném repozitáři a ověřuje chování, ne řetězec ve zdrojovém kódu.

z klonu repozitáře
bash test/run.sh 94_ci_plan

Související tvrzení stejná implementace

Prohledává názvy a popisy všech stránek, které tento web publikuje.