Shift-Left Performans: GitHub Actions ve Bitbucket Pipelines'da Otomatik Yük Testi Kalite Kapıları
LocustPilot'ı GitHub Actions, Bitbucket ve Jenkins pipeline'larına entegre ederek P99 kalite kapılarıyla build'i kırma ve Shift-Left performans stratejisi.
TL;DR: Performance testing should never be a once-a-quarter panic event before major production releases. In the final installment of the LocustPilot series, we demonstrate how to shift performance testing left by embedding automated load tests into GitHub Actions, Bitbucket Pipelines, and Jenkins with strict P99 latency quality gates that break builds on performance regressions.
Why Performance Testing Must Shift Left
In traditional software organizations, performance testing happens too late:
- A team develops features for three months.
- One week before production release, a dedicated performance team runs a massive load test.
- Disastrous response times are discovered, requiring architectural redesigns, rollbacks, and delayed launches.
The solution is Shift-Left Performance Testing: running smaller, automated load tests on every pull request or nightly build. If a newly introduced database query increases latency by 200ms, the CI pipeline fails immediately—before the code ever reaches staging.
1. Automated Quality Gates in GitHub Actions
LocustPilot supports fully headless execution designed specifically for CI/CD runners. Here is the recommended GitHub Actions workflow (.github/workflows/performance.yml):
name: Performance Quality Gate
on:
pull_request:
branches: [ main ]
schedule:
- cron: '0 2 * * *' # Nightly run at 2 AM
jobs:
load-test:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Set up Python 3.10
uses: actions/setup-python@v5
with:
python-version: '3.10'
cache: 'pip'
- name: Install Dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Execute Headless Load Test
env:
LOCUST_TARGET_HOST: ${{ secrets.PERF_TEST_HOST }}
RP_TOKEN: ${{ secrets.RP_TOKEN }}
RP_ENDPOINT: ${{ secrets.RP_ENDPOINT }}
RP_PROJECT: ${{ secrets.RP_PROJECT }}
run: |
locust -f locustfiles/files/checkout_flow.py \
--headless \
-u 50 \
-r 5 \
--run-time 2m \
--csv stats \
--html report.html \
--only-summary \
--exit-code-on-error 1
- name: Archive Performance Reports
if: always()
uses: actions/upload-artifact@v4
with:
name: performance-artifacts
path: |
stats_*.csv
report.html
locust.log
Photo by Austin Distel on Unsplash
2. Bitbucket Pipelines Integration
For teams using Bitbucket Pipelines with Kubernetes deployments:
# bitbucket-pipelines.yml
image: python:3.10
pipelines:
custom:
performance-regression:
- step:
name: Run Staging Load Suite
caches:
- pip
script:
- pip install -r requirements.txt
- locust -f locustfiles/libs/api_suite.py --headless -u 100 -r 10 --run-time 3m --csv report_stats
artifacts:
- report_stats*.csv3. The 3 Golden Rules of CI/CD Load Testing
- Test Focused Scenarios in PRs: Do not run 2-hour stress tests in pull requests. Run 2-to-5 minute targeted benchmark tests with 50–100 users to catch regressions fast.
- Enforce Strict Thresholds: Fail the build if the 95th percentile latency exceeds your SLA budget (e.g.
P95 > 250ms) or if the error rate exceeds 0.5%. - Compare Against Baselines: Track test trends over time in ReportPortal to detect slow memory leaks and gradual performance degradation across releases.
Series Conclusion: The Complete LocustPilot Journey
Over this 5-part masterclass, we transformed load testing from a manual chore into an enterprise-grade platform:
- Part 1: Replaced brittle XML tools with Python's Test-as-Code and the LocustPilot Control Center.
- Part 2: Built a safe static AST test discovery scanner and unbuffered subprocess engine.
- Part 3: Streamed real-time P99 telemetry and deduplicated errors to ReportPortal using Gevent.
- Part 4: Scaled to 100,000+ RPS across Kubernetes nodes using Helm charts.
- Part 5: Embedded automated performance quality gates into CI/CD pipelines.
Performance engineering is no longer an afterthought—it is a continuous, automated quality pillar.
👉 Get Started with LocustPilot on GitHub
FAQ
How do we prevent load tests from overloading test environments in CI?
Use dedicated staging or isolated containerized environments, and set conservative user caps (-u 50 -r 5) during PR verification builds.
Where are historical CI test reports stored?
All test artifacts (HTML summaries, CSV latency distributions, and logs) are automatically uploaded to both CI build artifacts (GitHub/Bitbucket) and your centralized ReportPortal server.