DEV Community

Ilya Ploskovitov
Ilya Ploskovitov

Posted on

💥 Break your API before your users do. Automated Network Chaos for CI/CD.


The Story: Why I built Chaos Proxy

We've all been there. The feature works perfectly on localhost. The E2E tests pass with flying colors. Then we deploy to production, and users on 3G networks start complaining that the app freezes, crashes, or—worst of all—charges them twice.

I realized that our CI pipelines were living in a fantasy world of 0ms latency and 100% uptime.

I wanted to simulate "Bad Network" conditions automatically in GitHub Actions, specifically for mobile apps and backend idempotency checks. I tried mocking requests in Playwright, but that didn't cover native Android/iOS emulators. I tried local proxies, but they were hard to script.

So I built Chaos Proxy —a cloud-based, programmable Chaos Proxy designed for CI/CD.

How it works

Debuggo isn't just a GUI tool. It’s an API-first platform. You can treat your network infrastructure like code.

  1. Create: Your CI script calls our API to spin up an isolated, ephemeral proxy container.
  2. Connect: You route your E2E test traffic (Web, Android, iOS) through this proxy.
  3. Break: You send API commands to inject latency, trigger 503 errors, or tamper with headers in real-time.

Demo: Simulating 503 Errors in Chrome (Visual)

Key Features

  • API for CI/CD: Spin up and destroy proxies programmatically. No long-living servers to manage.
  • The "Rage Click" Test: Inject 3 seconds of latency into specific endpoints (e.g., /api/pay) to ensure your UI disables buttons correctly before the user clicks twice.
  • Native Mobile Support: Since it works at the network level (HTTP Proxy), it supports Android Emulators and iOS Simulators perfectly.
  • Response Fuzzing: Automatically tamper with JSON bodies to see if your app crashes on malformed data.

⚡️ See it in action
Here is how simple it is to inject a 503 Service Unavailable error into your checkout flow using curl:

curl -X PUT https://api.debuggo.app/v1/sessions/$SESSION_ID/rules \
  -H "Authorization: Bearer $API_KEY" \
  -d '{
    "rules": [
      {
        "url_pattern": "*/api/checkout",
        "failure_rate": 50,
        "error_code": 503
      }
    ]
  }'
Enter fullscreen mode Exit fullscreen mode

Demo: Automating Network Chaos via Terminal (CLI)

How you can get involved

I just launched the Public API Beta. I am looking for QA Engineers and DevOps folks who are tired of "flaky" apps and want to build true resilience.

  1. Try the Free Tier: You can start manually or via API for free.
  2. Break your App: Try the "Rage Click" test (Tip #5 on our blog).
  3. Feedback: Let me know what integration you need next!

Stop trusting localhost. Start testing reality.

Top comments (0)