Add Gatling load test suite for overpass.deflock.org#147
Add Gatling load test suite for overpass.deflock.org#147dougborg wants to merge 1 commit intoFoggedLens:mainfrom
Conversation
There was a problem hiding this comment.
Pull request overview
Adds a standalone Gatling/Scala load-testing project under load-tests/ plus a manual GitHub Actions workflow to generate and upload HTML performance reports for the overpass.deflock.org Overpass instance.
Changes:
- Introduces Gatling simulations/request builders and test data for a single-user zoom progression scenario.
- Adds Gradle wrapper/build config, Gatling/logback config, and contributor docs (README + dev container).
- Adds a manually triggered GitHub Actions workflow to run the load test and upload reports.
Reviewed changes
Copilot reviewed 15 out of 17 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| load-tests/src/gatling/scala/deflock/TestData.scala | Defines city centers, zoom viewport sizes, and feeders for request parameterization. |
| load-tests/src/gatling/scala/deflock/OverpassSimulation.scala | Implements the baseline Gatling scenario and global assertions. |
| load-tests/src/gatling/scala/deflock/OverpassRequests.scala | Defines Overpass query construction, timeouts, and HTTP request checks. |
| load-tests/src/gatling/resources/logback-test.xml | Sets default logging level for simulations. |
| load-tests/src/gatling/resources/gatling.conf | Configures report charting thresholds. |
| load-tests/settings.gradle.kts | Sets the Gradle root project name. |
| load-tests/build.gradle.kts | Adds Scala + Gatling Gradle plugin and Maven Central repository. |
| load-tests/README.md | Documents purpose, running locally/CI, and interpreting reports. |
| load-tests/.gitignore | Ignores Gradle outputs and caches within load-tests/. |
| load-tests/.devcontainer/devcontainer.json | Defines a VS Code dev container for running the load tests. |
| load-tests/.devcontainer/Dockerfile | Builds the dev container image (JDK 21 + Coursier). |
| load-tests/gradlew | Adds Gradle wrapper script (POSIX). |
| load-tests/gradlew.bat | Adds Gradle wrapper script (Windows). |
| load-tests/gradle/wrapper/gradle-wrapper.properties | Configures Gradle wrapper distribution and settings. |
| load-tests/gradle/wrapper/gradle-wrapper.jar | Adds the Gradle wrapper JAR. |
| .github/workflows/load-test.yml | Adds a manual workflow to run Gatling and upload the HTML report artifact. |
| .gitignore | Fixes formatting/indentation for the windows/ ignore entry. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
You can also share your feedback on Copilot code review. Take the survey.
83b9e5a to
ef8233d
Compare
ef8233d to
e70834d
Compare
Four simulation scenarios to validate server performance (~512 Overpass compute slots) before switching app users to the self-hosted instance: - Baseline: deterministic single-user zoom progression (36 requests) - Concurrent: ramp 1→50 users to find degradation inflection point - Stress: spike to 500 users to exceed server capacity - Burst: realistic app sessions (10-20 requests each) in waves Queries use the exact same per-profile tag filters as the app's NodeProfile.getDefaults() (all 11 built-in profiles). Pure query logic lives in a shared source set with 22 ScalaTest unit tests. Includes GitHub Actions workflow with scenario picker dropdown, matrix strategy for parallel runs, and PR comment with report download links. Dev container with pinned Coursier (SHA256 verified) for IDE support. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
e70834d to
9d2d080
Compare
|
I worked on this with some excellent input from T on the server. I think this will really help us tune things and make sure we can support the load, etc. Open for discussionThis PR establishes the test harness and four initial scenarios, but the tuning numbers are starting points based on assumptions — not measurements. Happy to adjust any of these based on what Thomas knows about the server and what we learn from runs. Tuning knobs
What we can easily addGatling is flexible — new scenarios are ~30 lines of Scala. Some ideas:
Open questions
|
|
This will not be integrated here - we will be migrating this over to the infra repo on gitlab. |
Summary
load-tests/to validateoverpass.deflock.orgperformance before switching app users to itNodeProfile.getDefaults()(all 11 built-in profiles)Scenarios
Baseline results (with full 11-profile tag filters)
36 requests, 0 failures:
Project structure
The
sharedsource set avoids a circular Gradle dependency betweengatlingandtest.Test plan
./gradlew compileGatlingScala— all 4 simulations compile./gradlew test— 22 unit tests pass./gradlew gatlingRun— baseline passes (36/36, 0 errors)./gradlew gatlingRun --simulation deflock.ConcurrentSimulation— runs, 434 requests at 50 users, 0 errors🤖 Generated with Claude Code