Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
netresearch avatar

Oro K6 Testing

  • 2 installs
  • 2 repo stars
  • Updated July 22, 2026
  • netresearch/orocommerce-skill

Runs k6 load and performance tests for OroCommerce 6.1 storefront and checkout using the stock three-script pipeline, environment variables, and per-metric thresholds.

About

Uses Oro's stock k6 harness to benchmark storefront browsing and checkout, running warm-up, storefront, and checkout scripts in order with named custom metrics and thresholds. A developer uses it when load-testing an Oro app or extending its k6 JavaScript scripts.

  • Three-script pipeline (warm-up, storefront, checkout) with correct threshold ordering
  • Dockerized grafana/k6 run command and 14 named Oro metrics

Oro K6 Testing by the numbers

  • 2 all-time installs (skills.sh)
  • +1 installs in the week ending Aug 4, 2026 (Skillselion tracking)
  • Ranked #1,683 of 2,153 Testing & QA skills by installs in the Skillselion catalog
  • Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/netresearch/orocommerce-skill --skill oro-k6-testing

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs2
repo stars2
Last updatedJuly 22, 2026
Repositorynetresearch/orocommerce-skill

What it does

Runs k6 load and performance tests for OroCommerce 6.1 storefront and checkout using the stock three-script pipeline, environment variables, and per-metric thresholds.

Files

SKILL.mdMarkdownGitHub ↗

Oro Commerce k6 Performance Testing

Overview

Oro ships a stock k6 test harness (from oro/performance-tests) that exercises the storefront from the outside — unauthenticated browsing, login, product listing/search/detail, shopping list creation, and checkout. Scripts are plain JavaScript, k6 is a single Go binary (or grafana/k6 Docker image), and every run emits named custom metrics you can gate with per-metric thresholds.

The Three-Script Pipeline

Scripts live in performance/scripts/ and run in this fixed order against a fresh or cleared cache. The order matters because step 1 primes caches that steps 2 and 3 measure — running them out of order inflates the numbers.

1. `warmingUpTheApp.js` — 1 VU for 60s, THRESHOLD_95=3000. Primes OPcache, Doctrine metadata, layout cache, and search index warm-up paths. Skipping this makes the load runs look slower than reality. 2. `storefrontTests.js` — full browse flow (home, listing, search, product detail, login). Typical 1 VU / 600s / THRESHOLD_95=850. 3. `checkoutTest.js` — authenticated checkout from an existing shopping list. Requires SL_ID, SHIPPING_METHOD, PAYMENT_METHOD.

Do not reuse the load-run threshold (850 ms) for the warm-up — first-touch is always slower and the run will fail on cold caches.

Environment Variables

All passed with -e KEY=VALUE:

VarScriptsExample
BASE_URLallhttps://oro.docker.local
USERNAMEallAmandaRCole@example.org
PASSWORDallAmandaRCole@example.org
VUall1
DURATIONall60s, 600s, 10m
THRESHOLD_95all3000 (warm-up), 850 (load)
SL_IDcheckoutTest2
SHIPPING_METHODcheckoutTestfixed_product_5
PAYMENT_METHODcheckoutTestpayment_term_1

Hero Run Command (Docker)

docker run --rm --network host -u "$(id -u):$(id -g)" \
  -v "${PWD}/performance:/home/k6/performance" -w /home/k6/performance \
  grafana/k6:latest run \
  -e BASE_URL="https://oro.docker.local" \
  -e USERNAME="AmandaRCole@example.org" \
  -e PASSWORD="AmandaRCole@example.org" \
  -e VU=1 -e DURATION=60s -e THRESHOLD_95=3000 \
  scripts/warmingUpTheApp.js

--network host lets k6 reach localhost and compose services; -u $(id -u):$(id -g) keeps summary.html owned by your user instead of root. See references/docker-invocation.md for every flag.

Custom Oro Metrics

Oro's scripts emit 14 named metrics on top of the k6 defaults — load_product_listing_page_logged_in_user, create_sl_request_post_request, authentication_post_request, etc. You can set per-metric thresholds in options.thresholds instead of a single global 95th percentile. Full list and threshold examples in references/custom-metrics.md.

Reports

handleSummary() in the stock scripts writes summary.html via k6-reporter. Open it locally — it contains per-group timing breakdowns, VU curves, and threshold pass/fail badges. A stdout text summary is also emitted.

Key Pitfalls

1. Running load tests without warming up first — cold-cache results inflate mean/p95 for everything. Always run warmingUpTheApp.js with THRESHOLD_95=3000 before any load run. 2. Docker run without `-u $(id -u):$(id -g)`summary.html lands root-owned inside the mounted volume; subsequent runs fail to overwrite it and your user can't delete it without sudo. 3. Single global `THRESHOLD_95` — a slow product listing hides behind a fast login page in the aggregate. Target specific named metrics (e.g. load_product_listing_page_logged_in_user) in options.thresholds. 4. Default `--network bridge` against localhost — the container can't reach host compose services. Use --network host or attach the container to the compose network explicitly.

See Also

  • references/custom-metrics.md — 14 named Oro metrics, descriptions, per-metric threshold examples
  • references/docker-invocation.md — full grafana/k6 Docker run, flag-by-flag, network modes, file ownership
  • references/default-metrics.md — the 9 built-in k6 metrics and derived KPIs (avg/peak RT, error rate, CRPS, concurrent users)
  • references/install.md — Debian/Ubuntu, macOS, Windows, Docker install
  • references/v6.1.md — v6.1 script layout, env var reference, warm-up rationale
  • references/v7.0.md — 7.1-dev notes (placeholder)
  • Oro k6 docs
  • k6 documentation

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.