Testēšana un git Oracle
Pitmaster par orākulu izmanto kanonisko git bināro failu: ja git pieņem to, ko raksta Pitmaster, un Pitmaster nolasa to, ko raksta git, uzvedība ir pareiza. Testēšanas infrastruktūra atrodas repozitorijā Pitmaster. Pakotnē Composer ir iekļautas tikai src/ un bin/pitmaster, tāpēc, lai palaistu tālāk aprakstītos testus, vispirms klonējiet repozitoriju un izpildiet composer install.
Testu kopas
| Komanda | Ko tā palaiž | Nepieciešams git |
|---|---|---|
composer test:unit |
PHPUnit unit kopa: izolēti komponentu testi |
Nē |
composer test:integration |
PHPUnit integration kopa: Pitmaster un git darbojas tajos pašos repozitorijos |
Jā |
composer test:oracle |
bin/test-regression: visi orākula scenāriji |
Jā |
composer test |
PHPUnit (abas kopas) un orākula regresijas testu | Jā |
./bin/verify-all |
composer verify: atbalsta pierādījumi, augšupstraumes izmaiņas, pierādījuma artefakts, mutāciju dūmu tests, composer audit, PHPStan, kodēšanas standarti un composer test |
Jā |
CI palaiž vienību testu kopu ar vairākām PHP versijām, integrācijas testu kopu, orākula regresijas testu (PITMASTER_TEST_JOBS=4), kā arī atbalsta pierādījumu un augšupstraumes izmaiņu pārbaudes.
Orākula scenāriji
Katrs scenārijs ir direktorijs zem scenarios/<category>/ (kopā 761: 156 rakstīti Pitmaster un 605 importēti no citām Git implementācijām):
scenarios/diff/diff-add-lines/
scenario.json # commands and expectations
setup.sh # builds the starting repository
oracle/ # outputs captured from git
scenario.json norāda palaižamo komandu ar git un tai līdzvērtīgo Pitmaster komandu, kā arī to, kam jāsakrīt:
{
"name": "diff-add-lines",
"category": "diff",
"operations": ["diff"],
"oracle_commands": { "diff": "git -c color.ui=never diff" },
"actual_commands": { "diff": "php \"{{ROOT}}/bin/pitmaster\" diff | perl -pe 's/\\e\\[[0-9;]*m//g'" },
"expectations": { "exact_match": ["diff"], "fsck_clean": true }
}
Palaišanas laikā tiek kopēts repozitorijs, ko izveidoja setup.sh, tad orākula komandas un Pitmaster komandas tiek izpildītas atsevišķās kopijās un salīdzinātas izvades, objekti, atsauces un žurnāls. fsck_clean papildus pieprasa, lai git fsck pieņemtu repozitoriju, ko izveidoja Pitmaster. Orākula izvade tiek iegūta no git, ja tās trūkst vai tā jāatjauno; citādi tiek izmantoti repozitorijā iekļautie oracle/ faili.
Scenārijs aptver tikai tos gadījumus, ko izveido tā iestatīšana. Piemēram, diff scenāriji salīdzina modificētus failus, tāpēc tie neuztver atšķirības diff izvadē jaunajiem, dzēstajiem un binārajiem failiem, kas uzskaitītas Diff.
Darbs ar scenārijiem
./bin/test-scenario <name> # oracle, actual, compare for one scenario
./bin/test-regression # all scenarios
./bin/test-regression --jobs 4 # in parallel (or PITMASTER_TEST_JOBS=4)
./bin/test-regression --category diff # one category
./bin/test-regression --fast # pass/fail only, no reports
./bin/oracle <name> # capture git output for a scenario
./bin/oracle --refresh <name> # re-capture, for example after a git upgrade
./bin/actual <name> # run Pitmaster and capture its output
./bin/compare <name> # compare oracle and actual output
Lai pārbaudītu vairākas git versijas, norādiet tās failā PITMASTER_TEST_GIT_BINARIES un palaidiet dūmu testu:
PITMASTER_TEST_GIT_BINARIES=/path/to/git-2.45:/path/to/git-2.46 \
vendor/bin/phpunit --filter MultiGitVersionSmokeTest
Augšupstraumes testu korpusi
Scenāriji, kas atrodas scenarios/upstream/, ir importēti no citu implementāciju testu kopām: paša git testu kopa (412), isomorphic-git (71), libgit2 (63), go-git (46), JGit (7) un dulwich (6). Nepieciešamie testa datu koki ir iekļauti fixtures/upstream/, tāpēc visu korpusu var palaist pēc tīras repozitorija lejupielādes bez tīkla piekļuves vai lokāliem ceļiem. Iestatīšanas skripti tos atrod, izmantojot vides mainīgo PITMASTER_ROOT.
composer verify:drift (bin/audit-upstream-drift) pārbauda, vai katram iekļautajam augšupstraumes gadījumam ir atbilstošs scenārijs.
Atbalsta matrica
SUPPORT_MATRIX.md repozitorijā uzskaita visas tvērumā ietvertās git funkcijas un to statusu:
| Statuss | Nozīme |
|---|---|
DONE |
Ieviests un pārbaudīts ar orākulu deklarētajā saderības tvērumā |
PART |
Ieviests daļēji |
TODO |
Iekļauts tvērumā, vēl nav ieviests |
DEFER |
Pagaidām nav plānots |
N/A |
Ārpus tvēruma |
Failu ģenerē bin/support-matrix no config/support-matrix.json. config/support-evidence.json sasaista katru DONE un PART rindu ar konkrētiem testiem un orākula scenārijiem, bet composer verify:evidence neizdodas, ja rindai nav pierādījumu. CI atjauno matricu un ziņo par kļūdu, ja tā atšķiras no repozitorijā esošā faila.
Rinda DONE nozīmē, ka tajā norādītie scenāriji atbilst git. Ārpus šiem scenārijiem uzvedība joprojām var atšķirties; zināmās atšķirības tiek reģistrētas problēmu izsekotājā.
Veiktspējas testi
Veiktspējas uzlabojumiem tiek izmantots ietvars zem bench/:
composer bench -- --suite=smoke --runs=1 --warmups=0 # quick check
composer bench:baseline # full report
composer bench:compare -- <before.json> <after.json> # compare two reports
composer bench:verify -- <report.json> bench/reports/smoke-thresholds.json
CI pārbauda dūmu testa pārskatu, salīdzinot to ar repozitorijā iekļautajiem sliekšņiem.