Skip to main content

2 posts tagged with "Performance"

Performance tag description

View All Tags

Telemetry-Driven QA: Use Observability Data to Prioritize API Coverage

· 10 min read
Nuwan Samarasekera
Founder & CEO, TestChimp

TL;DR: We’ve shipped observability ingestion for API contract governance. Connect Datadog, Honeycomb, Amazon CloudWatch, or Google Cloud Monitoring to an OpenAPI service and TestChimp maps runtime routes to API operations, stores hourly and daily aggregate metrics, and brings request volume, error rate, status classes, and latency percentiles into the APIs surface.

The important part is not another dashboard. TestChimp’s QA workflows can now use the same telemetry to decide what to test next:

  • Uncovered, high-volume operations move up the functional coverage queue.
  • Uncovered operations with high error exposure move up faster.
  • High-p95 or high-p99 operations become candidates for performance-test creation and upkeep.

Production telemetry becomes a prioritization signal for QA—not a substitute for tests, and not an excuse to copy production traffic into a load profile.

Product guide: Observability in API Contract Governance.


Most QA backlogs know what is uncovered. They do not know what matters.​

OpenAPI coverage can tell you that 80 operations have weak coverage. Execution history can tell you that a test failed yesterday. A requirements graph can tell you which scenarios the team marked high priority.

All useful. Still incomplete.

If one uncovered endpoint handles 40% of production requests and another is called twice a month, they are not the same risk. If a mapped operation is returning errors on meaningful traffic, “we should test this someday” is no longer an honest prioritization. If p95 latency is already elevated, a green functional check does not answer whether the path stays healthy under concurrency or real tenant volume.

The usual QA process flattens these into one queue:

SignalWhat teams often doWhat a telemetry-driven process does
Missing API coverageSort by endpoint name or whoever complained lastRank by traffic and failure exposure
High error rateTreat it as an operations-only concernStrengthen negative-path and response-code coverage
Elevated p95 / p99Wait for an incident or quarterly performance passPrioritize a relevant k6 journey or upkeep
No telemetryAssume the endpoint is unusedMark it unknown; use business criticality and code evidence

Telemetry-driven QA closes that context gap. It uses production-like runtime evidence to optimize the order in which the QA process spends human attention, agent tokens, test runtime, and performance-environment budget.


What TestChimp now ingests​

TestChimp performs read-only aggregate queries against the configured observability provider. It does not copy raw traces, logs, request bodies, credentials, or customer payloads into the QA context.

The flow is:

  1. Discover observed routes from the previous 24 hours.
  2. Map method + route templates onto operations in the selected OpenAPI service.
  3. Surface unmatched runtime routes as Unmapped contract drift.
  4. Collect aggregate metrics for each completed hour.
  5. Store a complete prior-UTC-day summary with request count, average RPM, error count and rate, HTTP status classes, and p50 / p95 / p99 latency.
  6. Show the latest finalized daily summary in the APIs list, with the latest persisted hourly result as a fallback while daily data is not yet available.

That gives each mapped API operation two distinct evidence sets:

  • Contract coverage — which operations, fields, and response codes SmartTests or API tests actually exercised.
  • Runtime observability — how much traffic reached the operation, how often it failed, and how its latency was distributed.

Observability does not make an endpoint covered. Coverage does not prove the endpoint is important. Put them together and the QA queue gets much smarter.

Setup guides: Observability integrations · Datadog · Honeycomb · CloudWatch · Google Cloud Monitoring.


How should telemetry prioritize functional API coverage?​

Start with the coverage gap. Then use telemetry to order the queue.

1. Missing coverage is the eligibility signal​

Find operations with no covering tests or weak request-field, response-field, and response-code coverage. Intentionally ignored gaps stay out of the active queue.

2. Request volume is the impact signal​

Among uncovered operations, prioritize high request count or RPM. A regression on a hot operation has a larger blast radius than the same bug on a dormant path.

This does not mean “only test popular endpoints.” Authentication, billing, destructive actions, and compliance paths can remain critical at low volume. Telemetry improves ordering; it does not replace product judgment.

3. Error exposure is the urgency signal​

Raise operations with high error rate, high absolute error count, or meaningful 5xx traffic. Then inspect the contract detail:

  • Is the failing response code represented in the OpenAPI spec?
  • Does any SmartTest exercise it?
  • Are error-body fields and recovery behavior asserted?
  • Does the operation have an auth, role, validation, or state-transition branch that the happy path never reaches?

The goal is not to write one API test per metric. Prefer extending an existing UI or API test that already reaches the operation and can exercise the missing branch naturally.

4. Business criticality breaks ties​

Volume and errors are evidence, not governance. Use scenario priority, release scope, semantic coverage, incident history, and backend branch complexity alongside telemetry.

A practical ordering is:

missing coverage
+ request volume / error exposure
+ business criticality
+ distinct branch complexity

That is how /testchimp create tests, /testchimp run QA, and /testchimp upkeep now reason about API coverage when observability is available.


How should latency telemetry prioritize performance testing?​

Functional testing asks whether the operation behaves correctly. Performance testing asks whether the journey remains healthy under an approved workload and dataset.

Use runtime p95 and p99 latency to identify:

  • A slow operation with no corresponding k6 journey.
  • A hot operation whose performance coverage exists but has gone stale.
  • A high-error operation where latency, queueing, timeouts, or dependency behavior may be contributing.
  • A list, search, report, export, or history path that may need a volume test against a large seeded dataset—not merely more concurrent users.

The workflow mapping is deliberate:

  • /testchimp create-perf-tests authors a scenario-linked journey when a high-value operation has no useful performance representation.
  • /testchimp upkeep-perf reviews stale journeys, baselines, datasets, dependency mocks, and composite membership—with slow, high-volume, and high-error operations first.
  • /testchimp run-perf-tests can use the signal to choose among related journeys for a PR or release scope.

This is performance-test prioritization, not automatic capacity planning.

Production request rates do not become k6 VUs. Production p95 does not silently become a threshold. Absolute concurrency, duration, dataset cardinality, SLOs, and pass/fail limits still come from your capacity model and approved policy.

And production p95 is not directly comparable to test p95 unless environment, workload, time window, dataset, code/config, and dependency behavior genuinely match. Otherwise the comparison is directional context—not a regression claim.

Full workflow guide: Performance Testing Workflows.


Agents can consume the same evidence​

The APIs UI is not the end of the data path.

TestChimp’s API-operation list and detail APIs return observability mapping state plus the latest persisted runtime summary. The TestChimp CLI and MCP tools expose those same responses to agents:

list-api-operations
get-api-operation-detail

The summary includes its time window and sync status alongside request volume, errors, status classes, and latency percentiles. That matters because agents need to reason about data quality, not merely sort numbers.

Our skill playbooks now instruct QA workflows to:

  1. Fetch API contract coverage and runtime observations together.
  2. Check the observation window and sync status.
  3. Treat absent, stale, partial, no-data, or query-failed telemetry as unknown, not zero.
  4. Prioritize uncovered high-volume and high-error operations for functional coverage.
  5. Prioritize high-p95 / high-p99 operations for performance creation or upkeep.
  6. Keep production observations separate from test thresholds and baseline comparisons.

This is the useful version of “AI-powered testing”: not a model generating more scripts, but an agent allocating QA effort from evidence.


The optimization target is the QA process​

Observability platforms already help teams operate production. We are using the same aggregate evidence for a different question:

Given limited QA time and runtime, which uncovered behavior should we protect next?

That creates a tighter feedback loop:

OpenAPI contract
+
test coverage
+
runtime volume, errors, and latency
↓
prioritized QA workflow
↓
tests, fixtures, performance journeys, or accountable issues
↓
new execution evidence

The point is not to maximize test count. It is to optimize the QA process around expected impact.

This sits alongside TrueCoverage:

  • TrueCoverage uses semantic product events to show which user journeys, transitions, and world-state slices deserve protection.
  • API observability uses route-level volume, errors, and latency to show which contract operations deserve functional and performance attention.

Requirements say what should matter. Tests say what was proven. Telemetry says where the product is carrying real load and risk. Agentic QA gets better when it can reason across all three.


Frequently asked questions​

What is telemetry-driven QA?​

Telemetry-driven QA uses runtime signals such as request volume, error rate, and latency percentiles to prioritize test creation, maintenance, and execution. It optimizes which QA work happens first; it does not replace requirements, tests, or human risk policy.

Does TestChimp ingest raw traces or request payloads?​

No. TestChimp runs read-only aggregate queries and stores route mappings plus hourly and daily metric summaries. Raw provider events, logs, traces, and request bodies are not copied into TestChimp.

How does observability improve API test coverage?​

Among uncovered API operations, TestChimp workflows prioritize fresh high-volume and high-error operations, then inspect field and response-code gaps to extend an existing test or author focused coverage.

How does observability improve performance testing?​

p95 and p99 latency identify operations that need a k6 journey or performance upkeep. Request volume and error exposure strengthen that priority. Telemetry selects what to test; your policy still defines VUs, duration, datasets, and thresholds.

What happens when an operation has no observability data?​

It is unknown, not zero traffic. The workflow falls back to business criticality, scenario priority, code/release impact, semantic coverage, and execution history.

Can production latency be used as a k6 threshold?​

Not automatically. Production and test measurements usually differ in environment, workload, data, dependencies, and time window. Set k6 thresholds from explicit SLOs or an approved capacity policy, and compare runs only across compatible dimensions.


Try it​

  1. Configure API Contract Governance with your OpenAPI root.
  2. Connect an observability provider.
  3. Map its service/resource to the matching OpenAPI service and run Sync now.
  4. Open APIs and sort/filter coverage alongside RPM, error rate, and p95 latency.
  5. Use Create test, /testchimp create tests, or /testchimp upkeep for high-impact coverage gaps.
  6. Use /testchimp create-perf-tests or /testchimp upkeep-perf for slow, hot, or error-prone operations that lack current performance evidence.

Start here:

Do not let the test backlog decide its own order. Let evidence tell the QA process where risk is concentrated—then make the work accountable.

Performance Testing for Agentic Teams: Journeys, Composites, and Comparable Runs

· 7 min read
Nuwan Samarasekera
Founder & CEO, TestChimp

Agent coding is very good at getting the feature to work.

A user can check out. The API returns 200. The SmartTest is green. You merge.

Then ten concurrent checkouts queue behind one chatty query. Or the reports page, which was snappy with three invoices in the seed DB, falls over on a tenant that actually uses the product.

That gap is not a mystery. Agents optimize for the path in front of them—one user, empty-ish data, mocked collaborators that return in 0 ms. Concurrency and data volume are different questions. Functional tests do not answer them.

So we shipped performance testing as a first-class TestChimp surface: k6 in your repo, agentic workflows that author the right journeys (and keep composites honest), related runs after a PR or a release, and an Executions view that compares this run to a prior one.

Full product guide: Performance Testing.


The questions that actually matter​

Not “did k6 print a chart.” The questions product and eng already have:

You want to knowWhat we run
Will this path hold if traffic shows up together?Load journeys (many VUs)—not a bigger dataset
Does this page still work when the tenant already has history?Volume journeys (cardinality / records)—not more users
Did this PR make checkout slower than last week?Related journeys, then compare to a matching prior run
Can the evening mix still breathe if we add this journey?A composite with an explicit membership/weight—absolute load stays a separate decision

We keep load and volume as separate axes. “Make it heavier” by turning both knobs hides which one broke.


Agents author journeys. You still own capacity.​

/testchimp create-perf-tests does not invent a k6 file from vibes.

It ranks real scenarios (priority, semantic coverage, get-requirement-coverage --include-perf). It uses redacted REAL E2E interaction shapes—method, path template, schema, status class, timing distribution—not cookies, tokens, or production bodies. When TrueCoverage is mature, relative demand helps order the queue and suggest composite weights.

What it will not do: copy a production RPS into load.js. TestChimp telemetry tells you what is worth testing. You (or run-perf-tests.policy.md) still set VUs, duration, and dataset size. Smoke is the default while authoring. Load/volume wait on an explicit capacity decision.

Composites are a weighted mix of journeys—“typical overall load,” not isolated degrade detection. Adding a journey to a composite is always a prompted approval. Silent membership is how you accidentally change the mix and then argue about the chart.

Outbound deps (payments, email, LLMs, partner APIs) get harness mocks with realistic latency. Hitting Stripe in a load test is expensive and flaky. Stubbing it at 0 ms is worse: you never see pool exhaustion. Either outcome is false confidence.

Folder layout, metadata, and wrappers: How performance tests are organized.


Perf load/volume does not execute inside /testchimp test. Functional smoke should stay fast. k6 execution is /testchimp run-perf-tests or CI k6/scripts/run.sh. Run QA does write plans/smart-smoke/<branch>/related-perf-tests.json when k6/journeys exists, so the next CI --impacted run picks up the affected journeys.

On a PR, we select related journeys from the change set—scenarios, operations, path templates—then run them through k6/scripts/run.sh --impacted. Bare k6 run is not a TestChimp run: no ingest, no Executions charts.

On a release, the prompt from the release page is:

/testchimp run performance tests for release 1.2.0

The git range is prior SHA → cut SHA, not whatever happens to be checked out. Ingest stamps TESTCHIMP_RELEASE so the release panel and Executions list light up. If existing journeys do not cover that range, the agent asks whether to author (nested create-perf-tests on the same range) instead of silently inventing a suite or pretending coverage exists.

/testchimp upkeep-perf is the long loop: stale scenario links, drifted contracts, composite membership, thresholds that should not be quietly weakened to make compare green.

/testchimp init-perf scaffolds k6/ once. /testchimp import-perf-tests brings Locust/JMeter/Gatling/Artillery/k6-from-elsewhere into that tree. Source VU counts stay out of load profiles until you approve capacity.

Workflow walkthrough: Performance testing workflows.


Results you can overlay, not a one-off HTML report​

Wrapper runs ingest a summary and attach downsampled timeseries (p95, fail rate, VUs, and the rest of the k6 dump). Executions → Performance Tests lists them—optionally grouped by batch. Open a run for threshold, p95, fail rate, duration, metric-over-time, and VUs.

Performance regression on checkout-journey: overlay the prior release and the p95 gap is obvious

Then click Add Comparison Run. Recommended candidates share the comparison keys (environment, profile, dataset, LLM mode, mock/latency profile). The overlay re-bases both series on elapsed time so you are not comparing Tuesday 4pm wall clock to Wednesday 9am.

That is the degrade question: same kind of run, previous comparable result, is this worse? Green against a loose threshold can still be a regression versus last Tuesday. CLI compare-perf-to-baseline is the same contract for agents and CI—it exits nonzero when comparison.regressed is true. A mismatched baseline is incomparable, not a pass.

Viewing results.


How this fits the rest of TestChimp​

If you’ve been following along:

  • SmartTests (now grouped as Functional Testing in the docs) prove the path works for a user
  • Smart Smoke keeps that suite runnable in a CI budget
  • TrueCoverage says which journeys real people actually take
  • Performance testing asks whether those journeys still hold when many people take them—or when the tenant already has history

Planned reality → functionally tested reality → load/volume-tested reality → production reality. The middle was the hole for teams whose agents ship faster than anyone can stare at an EXPLAIN plan.


Frequently asked questions​

What is TestChimp performance testing?​

Grafana k6 scripts in your mapped tests folder (k6/journeys and k6/composites), authored and selected by agentic workflows, ingested into Executions so you can chart a run and overlay a comparable prior run.

Do I need this if my SmartTests are green?​

Yes if you care about concurrency or tenant data volume. Agents (and humans) routinely ship designs that are correct for one user on a small seed database and fail under the conditions production actually creates.

Does /testchimp test run k6?​

No. Keep functional PR smoke fast. Use /testchimp run-perf-tests (or a dedicated CI job that calls the same wrappers).

Will TestChimp pick my VU count from production traffic?​

No. TrueCoverage and interaction timings are relative signals—what to test, how to weight a mix. Absolute VUs, RPS, duration, and dataset size come from policy or an explicit approval.

How do I see if we got slower?​

Open the run → Add Comparison Run → pick a recommended candidate. Or compare-perf-to-baseline in CI. Compare only matching environment / profile / dataset / mock profile.

Docs: Intro · Organization · Workflows · Results.

Concept: What is load testing? · Volume testing · k6 vs JMeter vs Locust · Compare across releases.