{"id":49860896,"url":"https://github.com/devaryakjha/loadwright","last_synced_at":"2026-05-24T21:02:14.424Z","repository":{"id":353749743,"uuid":"1220660637","full_name":"devaryakjha/loadwright","owner":"devaryakjha","description":"Docker-first, spec-driven JMeter automation","archived":false,"fork":false,"pushed_at":"2026-05-24T17:58:10.000Z","size":248,"stargazers_count":1,"open_issues_count":2,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-24T18:06:37.523Z","etag":null,"topics":["ci","cli","docker","go","golang","jmeter","load-testing","openapi","performance-testing"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/devaryakjha.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-25T06:53:35.000Z","updated_at":"2026-05-24T17:58:15.000Z","dependencies_parsed_at":"2026-05-24T18:03:43.442Z","dependency_job_id":null,"html_url":"https://github.com/devaryakjha/loadwright","commit_stats":null,"previous_names":["devaryakjha/loadwright"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/devaryakjha/loadwright","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devaryakjha%2Floadwright","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devaryakjha%2Floadwright/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devaryakjha%2Floadwright/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devaryakjha%2Floadwright/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devaryakjha","download_url":"https://codeload.github.com/devaryakjha/loadwright/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devaryakjha%2Floadwright/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33450402,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-24T19:21:36.376Z","status":"ssl_error","status_checked_at":"2026-05-24T19:21:10.562Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ci","cli","docker","go","golang","jmeter","load-testing","openapi","performance-testing"],"created_at":"2026-05-14T21:39:29.687Z","updated_at":"2026-05-24T21:02:14.419Z","avatar_url":"https://github.com/devaryakjha.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Loadwright\n\n[![CI](https://github.com/devaryakjha/loadwright/actions/workflows/ci.yml/badge.svg)](https://github.com/devaryakjha/loadwright/actions/workflows/ci.yml)\n[![Release](https://img.shields.io/github/v/release/devaryakjha/loadwright?sort=semver)](https://github.com/devaryakjha/loadwright/releases)\n[![Go](https://img.shields.io/github/go-mod/go-version/devaryakjha/loadwright)](go.mod)\n[![License](https://img.shields.io/github/license/devaryakjha/loadwright)](LICENSE)\n\nDocker-first, spec-driven JMeter automation.\n\nLoadwright turns readable YAML specs into portable JMeter `.jmx` test plans, runs them through Dockerized JMeter, and emits JSON, Markdown, HTML, and JUnit reports for local development and CI.\n\nIt is not a new load-testing engine. It is a small automation layer that keeps JMeter compatibility while making common API load-test workflows easier to review, run, and ship.\n\n## Project Status\n\nLoadwright is at `v0.2.0`. It is usable for HTTP API, WebSocket API, and CI smoke/performance checks, but the public API and YAML spec may still evolve before `v1.0.0`.\n\nThe current development scope is intentionally focused: HTTP requests, WebSocket requests, JSON/text/urlencoded/multipart bodies, Dockerized JMeter execution, OpenAPI/Postman/HAR bootstrapping, CSV data, thresholds, and reports. Automated plugin management, distributed runners, and AI-assisted workflows are planned later.\n\n## Why This Exists\n\nJMeter is powerful, but the day-to-day workflow can be awkward: JMX XML, local Java/JMeter setup, Docker wiring, plugin handling, reports, and CI thresholds. Loadwright keeps JMeter compatibility while giving teams a small CLI and reviewable specs.\n\nUse Loadwright when you want:\n\n- a readable YAML source of truth for load tests\n- Dockerized JMeter runs without local JMeter setup\n- JSON, Markdown, HTML, and JUnit summaries\n- CI pass/fail thresholds\n- OpenAPI-to-spec bootstrapping for simple API tests\n- Postman-collection-to-spec bootstrapping for common API workflows\n- HAR-to-spec bootstrapping from browser/API traffic captures\n- future optional AI assistance without depending on AI for normal runs\n\nCurrent `v0.2.0` scope: API load tests (HTTP and WebSocket). See [docs/limitations.md](docs/limitations.md) for known limits.\n\n## Install\n\nInstall the latest release binary from [GitHub Releases](https://github.com/devaryakjha/loadwright/releases), or use Go:\n\n```bash\ngo install github.com/devaryakjha/loadwright/cmd/loadwright@v0.2.0\n```\n\nFrom a source checkout:\n\n```bash\ngo build -o bin/loadwright ./cmd/loadwright\n```\n\nDocker is required for `loadwright run`, `loadwright setup websocket`, and `loadwright doctor --deep`. It is not required for `init`, `validate`, `compile`, `import`, or `report`.\n\n## Quickstart\n\nCheck the CLI and local prerequisites:\n\n```bash\nloadwright version\nloadwright doctor\n```\n\nCreate a starter spec, then validate and compile it without starting Docker:\n\n```bash\nloadwright init\nloadwright validate loadwright.yaml\nloadwright compile loadwright.yaml\n```\n\nRun the starter spec through Dockerized JMeter:\n\n```bash\nloadwright doctor --deep\nloadwright run loadwright.yaml --ci\n```\n\nReports are written to `results/\u003crun-id\u003e/`:\n\n- `results.jtl`\n- `summary.json`\n- `summary.md`\n- `index.html`\n- `junit.xml`\n- `run.json`\n\nDefault runs also update `results/latest.json` so the newest report can be found without copying the timestamped run ID.\n\nFrom a source checkout, you can also run the included examples:\n\n```bash\nloadwright validate examples/api/basic.yaml\nloadwright run examples/api/basic.yaml --ci\n```\n\n## Example Spec\n\n```yaml\nname: httpbin-basic\ntarget: https://httpbin.org\nload:\n  users: 5\n  ramp_up: 10s\n  loops: 3\nrequests:\n  - name: get status\n    method: GET\n    path: /status/200\n    expect:\n      status: 200\nthresholds:\n  error_rate_lt: 1\n  p95_ms_lt: 3000\n```\n\nSee [docs/spec-reference.md](docs/spec-reference.md) for the current spec format.\n\nMore docs:\n\n- [Getting started](docs/getting-started.md)\n- [Install](docs/install.md)\n- [Examples](docs/examples.md)\n- [Troubleshooting](docs/troubleshooting.md)\n- [OpenAPI import](docs/openapi-import.md)\n- [Postman import](docs/postman-import.md)\n- [HAR import](docs/har-import.md)\n- [Data sources](docs/data-sources.md)\n- [CI](docs/ci.md)\n- [Reports](docs/reports.md)\n- [Testing](docs/testing.md)\n- [Release checklist](docs/release.md)\n- [Compatibility](docs/compatibility.md)\n- [Limitations](docs/limitations.md)\n\n## Commands\n\n```bash\nloadwright doctor [--deep] [--websocket] [--image IMAGE]\nloadwright setup websocket [--image IMAGE] [--dockerfile docker/jmeter/Dockerfile]\nloadwright version\nloadwright init [path]\nloadwright import openapi \u003copenapi.yaml|openapi.json\u003e [-o loadwright.yaml] [--base-url https://api.example.com]\nloadwright import postman \u003ccollection.json\u003e [-o loadwright.yaml] [--base-url https://api.example.com]\nloadwright import har \u003ccapture.har\u003e [-o loadwright.yaml] [--base-url https://api.example.com]\nloadwright validate \u003cspec.yaml\u003e [--env-file .env.test]\nloadwright compile \u003cspec.yaml\u003e [-o tests/name.jmx] [--env-file .env.test]\nloadwright run \u003cspec.yaml|test.jmx\u003e [--out-dir results/run] [--env-file .env.test] [--ci]\nloadwright report \u003cresults.jtl\u003e [--out-dir results/report] [--error-rate-lt 1] [--p95-ms-lt 3000] [--avg-ms-lt 1000] [--ci]\nloadwright compare \u003cbaseline-summary.json\u003e \u003ccandidate-summary.json\u003e [-o comparison.md]\n```\n\n`doctor --deep` runs the configured JMeter Docker image and verifies that JMeter starts.\n\nFor WebSocket specs, build the bundled plugin image once, verify it, then run the YAML spec normally:\n\n```bash\nbin/loadwright setup websocket\nbin/loadwright doctor --deep --websocket\nbin/loadwright run examples/api/websocket-multi.yaml --ci\n```\n\nThe `docker/jmeter/Dockerfile` extends the pinned HTTP runtime image, `justb4/jmeter@sha256:088ac52b759a198a5afa5ae13d0a6306e9f2017d71ad140ff57427f6930406f7`, and adds the [WebSocket Samplers](https://github.com/ptrd/jmeter-websocket-samplers) plugin pinned in `docker/jmeter/websocket-plugin.lock`. WebSocket YAML specs use `loadwright/jmeter-websocket:5.5` automatically unless you pass `--image`.\n\n## Roadmap\n\nSee [ROADMAP.md](ROADMAP.md). The short version:\n\n- make the deterministic Go CLI excellent first\n- add broader import support next\n- publish and distribute richer runtime images\n- add optional AI later for generating, explaining, and improving specs\n\n## Development\n\n```bash\ngo test ./...\ngo vet ./...\n```\n\n## Releases\n\nTagged releases are built with GoReleaser and publish cross-platform binaries plus checksums. See [docs/install.md](docs/install.md).\n\n## Credits\n\nThe initial experimental prototype that led to this project was built by [Jaykumar Gori](https://github.com/jaykumargori). The public OSS implementation is the Go CLI in this repository.\n\n## License\n\nApache-2.0.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevaryakjha%2Floadwright","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevaryakjha%2Floadwright","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevaryakjha%2Floadwright/lists"}