Services / Load testing

Tests

We design and run k6 load tests for your application

We design, run, and report k6 load tests. We start from the application: paths, share of traffic, SLO, environment, and test data. Then we stand up a harness in the repo, dashboards, and a baseline. We run load, spike, and soak. We leave a finding for architecture: index, cache, more pods, a different limit, or cost.

Application Paths, SLO, environment, and test data first
Harness k6 in the repo, dashboards, and a baseline
Measurement Load, spike, and soak, with a named bottleneck
Decision Architecture, limit, or cost, then a retest
How it fits together

From the traffic model to a finding for architecture

First we understand the application paths and the SLO. On that basis we put together k6, Grafana, the cluster, and a network view. The generator, the dashboard, and the cluster are what we use for that work every day.

  • The first performance test and a failover exercise are two separate dates.
  • A software house can get the same harness on the next client, with a change of traffic model.
k6, web dashboard, request rate, latency and VUs
01, k6

We design a k6 scenario from your application traffic

k6, and JMeter where it already exists, gets a model: login, checkout, webhook, nightly report. Spike, soak, and stress are separate sessions. The harness stays in the repo, it can be run before a peak.

Model

Path share from production. Think time, cache, warmup. The model is what makes the test comparable.

Types

Load, spike, soak, stress. Soak catches a leak after hours, after a short run has already passed.

Gate

SLO in the test: p95, error, saturation. The pipeline fails when the budget breaks.

Repeat

The same script on a software house client staging and before a campaign.

Grafana, dashboard catalog and data sources
02, Grafana

We watch p95, errors, and saturation during the test

We look at API p95, database locks, CPU, GC, and queue length together with the k6 run. The decision is an index, a cache, more pods, or a different limit, from the same timeline.

Correlation

VU, latency, error, and saturation on one timeline.

Layers

App, database, cache, queue, storage. The bottleneck has a name.

Comparison

Before the change and after. The same scenario, a different build.

Report

For engineering and for product: what breaks at which traffic.

Kubernetes Dashboard, pods, CPU and memory
03, Kubernetes

We check whether the cluster holds the load

HPA, PDB, and requests show under load. The test shows whether you hit a CPU limit, a connection pool, or IPs on the node. Capacity planning comes from measurement.

Limits

CPU throttle looks like a slow API. In the test you see it.

Scale

HPA, node pool, PDB. Whether a new pod comes up before p95 runs away.

Neighbors

Noisy neighbor and namespace limit. A test on a shared cluster has separate findings.

Cost

A larger node group without need is a FinOps finding, next to the test result.

ntopng, flows, applications and traffic classification
04, Network

We check the path when the bottleneck is the link, DNS, or a peer

ntopng and edge metrics show whether the test hits the application, or the firewall, NAT, or the link. Chaos and failover are a separate session. We keep them off the first performance measurement.

Path

Generator, edge, load balancer, pod. Every latency jump has a layer.

Applications

TLS, database, queue. Traffic classification suggests what to scale.

Failover

A separate session: AZ loss, database restart, DNS switch.

Boundary

A DDoS test is a different goal and a different playbook from a product load test.

How we work

From the client application to a decision

We start from analytics and SLO. Then we stand up the harness and observation. We run load, spike, and soak. We leave a finding for architecture, and a retest after the change.

  1. Application We check paths, share, SLO, environment, and test data. That gives the scenario and the sessions.
  2. Harness We stand up k6 in CI or a steered session, with dashboards and a baseline.
  3. Measurement We run load, spike, and soak. The bottleneck gets a layer name.
  4. Decision We leave a change of architecture, limit, or cost, then a retest on the same scenario.
Talk

We will discuss the traffic scenario and SLO

On that basis we will prepare a scope: harness, sessions, and a report.

Contact us