Clobbr

// Use case

GraphQL API load testing made simple

Clobbr auto-detects GraphQL, splits stats per operation, and handles queries, mutations, and variables without a single line of script. No manual POST encoding, no separate dashboards, no cloud uploads.

Download the Clobbr api speed test app on the App StoreDownload the Clobbr api speed test app on the Microsoft StoreGet Clobbr api speed test CLI from npmView or download Clobbr api speed test on Github
Screenshot of Clobbr load testing a GraphQL endpoint with query and variables

The challenges of load testing GraphQL

GraphQL flips the assumptions most load testing tools are built on. Four things that make it harder than a plain REST endpoint:

  • One URL, many operations. Every request hits the same endpoint. A tool that aggregates per-URL gives you a meaningless combined stat.
  • Queries vs mutations behave differently. Reads and writes stress different layers of your stack. Averaging them hides the actual bottlenecks.
  • Field resolvers can be nested and slow. A single query can trigger a cascade of backend calls. Naïve load tests miss the N+1 problem entirely.
  • Auth often involves short-lived tokens. Bearer tokens, signed requests, scoped session headers. Static headers in your load tester won't cut it.

Automatic GraphQL detection in Clobbr

When you set up a run, Clobbr inspects the payload. If it sees a GraphQL shape (a query or mutation field in the body), it switches into GraphQL mode. That means:

  • Stats are tracked per operation, so a slow mutation doesn't hide behind fast queries.
  • The UI shows the operation name and type alongside timings, so you're reading a chart, not decoding JSON.
  • Historical comparison across runs works per-operation too, handy when you land a resolver change and want to see if p95 moved.

You don't flip a toggle or pick a mode. Just paste your payload.

Setting up a GraphQL load test in Clobbr

The fastest path, start to finish:

  • URL: paste your GraphQL endpoint (e.g. https://api.example.com/graphql).
  • Verb: POST (GraphQL over HTTP uses POST by convention).
  • Headers: set Content-Type: application/json and your auth header.
  • Payload: drop in a JSON body with your query and variables.
  • Iterations: start with 100 sequential to see latency, then re-run at 500 parallel to see concurrency behavior.

Interpreting query vs mutation stats

With per-operation stats in front of you, the signal sharpens. Typical patterns:

  • Query p50 low, p95 spikes: one or more resolvers is triggering an unbatched DB call. Look at DataLoader usage or N+1 suspects.
  • Mutation p50 higher than query p50: normal. Writes hit the database and your write-path caches.
  • Mutation p95 ≫ query p95: lock contention or write amplification. Increase concurrency in Clobbr and look for non-linear degradation.
  • Parallel run fails where sequential passed: your service has a concurrency bottleneck: connection pool, worker count, or a shared mutex.

Authentication headers for GraphQL

Static headers work for a session token pasted in during a local test. Anything else, like a JWT with a short TTL, a signed header, or per-request session rotation, benefits from Clobbr's scripted headers. Write a tiny inline script that computes or refreshes the header before each iteration batch, and you won't hit 401s mid-run.

// FAQ

Frequently asked questions

Why is GraphQL load testing different from REST load testing?
Every GraphQL operation goes to the same endpoint and looks like a POST with a JSON body. Queries and mutations have very different performance characteristics, and a single operation can run through multiple resolvers and data sources. If you aggregate all operations into one stat, you lose that signal. A fast query can mask a slow mutation, and a well-cached query can hide a database hotspot in a field resolver.
Does Clobbr really detect GraphQL automatically?
Yes. Clobbr inspects the payload and treats it as GraphQL if it looks like one (a query or mutation field is present). You'll see stats split per operation type and the UI adapts to GraphQL-specific output.
How do I send GraphQL variables?
Put them in the payload alongside the query field, same shape as a normal GraphQL client: { "query": "...", "variables": { "id": "42" } }. Clobbr's payload editor has JSON validation and autocomplete, so you'll see errors before you fire the test.
Can I test authenticated GraphQL endpoints?
Yes. Set the Authorization header in Clobbr's headers editor. For short-lived tokens (JWT, etc.) use the scripted headers option, which runs a small inline script before each batch so tokens stay fresh.
Should I load test queries and mutations together?
Usually no. Queries are typically reads; mutations are typically writes. They stress different parts of your stack and different percentiles mean different things for each. Run separate Clobbr tests for query-heavy and mutation-heavy workloads, then look at the combined picture.
How is this different from load testing a GraphQL API with k6 or Apache Bench?
Those tools don't know GraphQL is a thing, so you have to script the payload encoding yourself and get raw POST stats back. See the k6 comparison for the full tradeoff. Clobbr's GraphQL awareness mostly saves you wiring time: it's the difference between "paste the query, run" and "write a JS script that POSTs a JSON body and parses the response".

// Ship it

Try Clobbr for GraphQL load testing

Download the app for macOS or Windows, or install @clobbr/cli from npm. First test takes under a minute. No account, no cloud.

Download the Clobbr api speed test app on the App StoreDownload the Clobbr api speed test app on the Microsoft StoreGet Clobbr api speed test CLI from npmView or download Clobbr api speed test on Github

Lifetime license · macOS, Windows, CLI · no subscription · available Included on Setapp