Skip to content

v0.1.0

Choose a tag to compare

@probably-not probably-not released this 23 Apr 18:27
· 4 commits to main since this release
Immutable release. Only release title and notes can be modified.
f8d2ca5

This is the first public release of LiveLoad.

For the full development journey (and basically my personal development diary) from an empty repo to this release, see the Devlog.

If you are just getting started with LiveLoad, the Writing Your First Scenario guide is the best place to start. It covers everything from basic navigation to throttles, assigns, and the full scenario lifecycle.

Enhancements

Core

  • [LiveLoad] Add LiveLoad.run/1 as the main entrypoint for running load tests
  • [LiveLoad.Scenario] Add behaviour for defining load test scenarios with config/1, throttles/1, and run/3 callbacks
  • [LiveLoad.Scenario] Add use LiveLoad.Scenario macro that sets up the behaviour, imports context functions, and provides default callback implementations
  • [LiveLoad.Scenario.Runner] Add gen_statem based scenario runner that loops run/3 until duration expires, halt, or failure
  • [LiveLoad.Scenario.Discovery] Add various levels of automatic scenario discovery to allow running scenarios in different ways

Scenario Context

  • [LiveLoad.Scenario.Context] Add Plug.Conn inspired pipeline struct with automatic error short-circuiting
  • [LiveLoad.Scenario.Context] Add navigation functions: navigate/2, reload/1
  • [LiveLoad.Scenario.Context] Add element interaction functions: click/2, fill/3, clear/2, press/3, check/2, uncheck/2, select_option/3, select_multiple_options/3, focus/2, blur/2, hover/2, drag_and_drop/3, wait_for_selector/2
  • [LiveLoad.Scenario.Context] Add LiveView specific functions: ensure_liveview/1, wait_for_liveview/1, wait_for_phx_loading_completion/3, submit_form/2
  • [LiveLoad.Scenario.Context] Add value extraction functions with :as option: page_content/2, inner_html/3, inner_text/3, text_content/3, input_value/3, get_attribute/4, visible?/3, checked?/3
  • [LiveLoad.Scenario.Context] Add assigns management: assign/3, reset_assigns/1, clear_assign/2, update_assign!/3
  • [LiveLoad.Scenario.Context] Add flow control: halt/1, fail/2, halted?/1, failed?/1
  • [LiveLoad.Scenario.Context] Add browser storage functions: context_storage_snapshot/2, restore_context_storage/2, reset_context_storage/1
  • [LiveLoad.Scenario.Context] Support resolvable values (1-arity functions receiving the context) for selectors, URLs, and values

Throttles

  • [LiveLoad.Scenario.Throttle.Rate] Add rate limiter with configurable interval and gradual ramp-up support
  • [LiveLoad.Scenario.Throttle.Interarrival] Add interarrival-based throttle with gradual ramp-up support
  • [LiveLoad.Scenario.Throttle.Parallelism] Add concurrency limiter

Browser

  • [LiveLoad.Browser] Add browser abstraction with pluggable LiveLoad.Browser.Connection behaviour
  • [LiveLoad.Browser.Connection.Playwright] Add Playwright based browser connection using PlaywrightEx
  • [Mix.Tasks.LiveLoad.Install] Add mix live_load.install task to download the Playwright standalone driver and Chromium binaries

Distribution

  • [LiveLoad.Cluster] Add FLAME based elastic cluster formation with automatic node count calculation based on resource availability
  • [LiveLoad.Cluster.Node] Add FLAME.Trackable node struct for eager cluster priming
  • [LiveLoad.Cluster.AmocSeed] Add parallel cluster seeding with direct pinging to work around gossip deadlocks on larger clusters

Telemetry and Results

  • [LiveLoad.Telemetry.Listener] Add per node telemetry listener collecting metrics into DDSketch structures via ddskerl
  • [LiveLoad.Telemetry.Collector] Add primary node collector that merges sketches from all nodes into a single result
  • [LiveLoad.Result] Add compact, JSON-serializable result struct with 101-point precomputed quantile curves, dimensioned histograms and counters, time-series buckets, and per-node breakdowns

Reporters

  • [LiveLoad.Reporter.Markdown] Add simple tabular markdown reporter
  • [LiveLoad.Reporter.HTML] Add self-contained single-file HTML reporter with embedded React/TypeScript SPA