Run the LiveView test files in parallel #611
Labels
No labels
bug
duplicate
enhancement
help wanted
high priority
invalid
L
low priority
M
medium priority
needs refinement
optional
question
S
security
technical improvement
UX Improvement
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
local-it/mitgliederverwaltung#611
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Motivation
#610 measured where the serial time of the fast suite is spent (main after #605,
a662fe40, per-module medians of three--slowest-modulesruns, 4-vCPU dev VM; numbers in the #610 PR):test/mv_web/live/member_live/test/mv_web/live/test/mv/**(#610 scope)test/mv_web/outsidelive/A plain fast-suite run takes about 280 s (45 s async, 235 s sync). The LiveView files hold about 170 s of the 235 s sync time. #610 deliberately does not flip them, because #602 (theme/buttons), U7 (search), U10 (list toolbars) and #549 (saved views) change the same files. Flipping them one by one inside those issues would deliver the gain only at the end of the UI roadmap; every pipeline gate until then pays the slow suite. This issue flips them in one go, right after #602 is merged and before U4–U7, so the remaining UI work already runs on the faster suite.
Estimate (not measured): moving ~170 s of serial time into the async phase saves about 100–120 s per fast-suite run on 4 vCPUs (moved work still costs about a third in the async phase).
Prerequisites
live/**), the rules are inCODE_GUIDELINES.md§4, and the guard test enforces a reason on everyasync: falseand nocapture_login async files.live/**andtest/support/).Approach
Follow the #610 procedure (measurement, per-file isolation proof, batch proofs, evidence log in
.pipeline/followups/flaky-tests.md):member_live/index_test.exs(26.5 s, 61 tests). It is serial only because of one@slowperformance test with a wall-clock budget ("boolean filter performance with 150 members").ci-devexcludes:slowanyway. Move that test into a small serial module (reason: "wall-clock budget, CPU contention makes it flaky"), flip the rest.live/**modules (--slowest-modules, three seeds) and pick candidates by the #610 rule (Pareto ≥ 80 % of the seriallive/**time, median ≥ 1 s).member_live/, then the otherlive/directories), one file per commit, each with--repeat-until-failure 5and five seeded full runs per batch. Before flipping, fix what breaks under concurrency in LiveView tests specifically: whole-page substring assertions (render(view) =~ …,refute html =~ …) →has_element?,assert_flash/3,assert_field_error/3; shared fixed values; reads compared in order without a sort.user_live/form_test.exs(8.8 s) still carries the #533 note "deferred scope decision" — flip.member_live/index_value_control_test.exs(8.6 s),index_sort_atom_property_test.exs(8.3 s),index_field_visibility_test.exs(6.7 s, #533 note) — largest afterindex_test.member_live/index_groups_*,index_custom_fields_display,show_groups_displayfiles with the #533 note.global_settings_live_test.exs(5.1 s) mutates the Settings singleton → stays serial here; #540 makes it isolatable.Coordination
use … async:line and test data; resolve on merge.global_settings_live_test.exsand the settings-dependent tests.Acceptance criteria
member_live/index_test.exsruns async except the moved performance test.--repeat-until-failure 5and its batch passed five seeded full runs, one while other pipeline work ran in parallel; runs listed in the evidence log.capture_log, no fixed values under a unique identity in flipped files.just ci-devandjust typecheckgreen.Out of scope