Load Test in Mobile Development — What It Is, Scenarios, and How It’s Conducted

Author: IT Sectr Published: 2026-04-07 Reading time: 10 min

Load Test is a type of performance testing that checks the behavior of a mobile application and its server-side under an expected number of concurrent users. Unlike Stress Test, load testing simulates normal usage scenarios without exceeding design capacity. According to Google SRE (2024), 76% of production incidents are related to exceeding expected load. Load testing helps identify scalability problems before they affect users.

Key Takeaways

  • Load Test — checks application behavior under expected user load to evaluate throughput.
  • Key Metrics — response time, throughput (RPS), number of concurrent users, and error rate.
  • Load scenarios are divided into spike, constant, and step — the choice depends on the application usage profile.
  • Tools — k6, JMeter, Locust, and Gatling for server-side, Charles Proxy for client-side.
  • Load Test must be conducted before every release, especially when backend architecture changes.

What is Load Test?

Load Test is a process of verifying how a system performs under an expected number of concurrent requests or users. In the context of mobile development, Load Test is applied to both the server-side (API, database, cache) and the client-side (push notification processing, data synchronization). The main difference from stress testing is that Load Test simulates real, not extreme, load. According to the AWS Well-Architected Framework (2024), load testing should be conducted using load profiles based on real usage analytics.

Load Test can be performed at the level of HTTP requests to the API, WebSocket connections, or database transactions. The goal is to ensure that the response time of each request does not exceed a specified threshold (typically 500–1000 ms for API), and throughput (RPS — requests per second) meets the requirements. Google Cloud Armor (2024) defines threshold values based on percentiles: p95 response time should not exceed 2 seconds for critical endpoints.

Load testing of a mobile backend includes simulating typical scenarios: registration, authorization, feed loading, form submission. Scenarios are recorded as HAR files (HTTP Archive) and replayed by the load testing tool. According to k6 documentation (2025), HAR conversion can reduce Load Test preparation time by 60%.

Goals of Load Testing

The first goal of Load Test is confirming system throughput. If the specification requires handling 1000 RPS, the load test must confirm this with a 20% buffer. According to the Netflix Tech Blog (2024), load testing at Netflix is conducted with a 2x buffer from peak load: if 10000 RPS is expected, the test checks 20000 RPS. This approach guarantees stability during sudden traffic spikes.

The second goal is identifying bottlenecks in the architecture. Typical bottlenecks in mobile backends are the database (slow queries), cache (incorrect invalidation strategy), and external APIs (slow third-party services). Distributed tracing (Jaeger, Zipkin) helps localize the problem at the level of a specific service or request.

The third goal is determining the saturation point. This is the moment when adding new users no longer increases throughput. In mobile applications, the saturation point often occurs at 70–80% CPU load on database servers. Auto-scaling should trigger before reaching this point.

Load Test Scenarios

Spike Test — simulates a sharp burst of activity, such as a morning push notification blast or a marketing campaign launch. According to Grafana k6 (2025), Spike Test simulates load growth from 100 to 10000 RPS in 30 seconds. The system must handle this without losing requests and without exceeding response time by more than 50%.

Endurance Test — checks system stability during prolonged operation under load. Typical duration is 1–4 hours. Endurance Test reveals memory leaks in server applications, database connection pool issues, and cache performance degradation. PostgreSQL connection pool under prolonged load without proper configuration can exhaust available connections within 2–3 hours of operation.

Step Load Test — gradual load increase with a step of 10–20% every 2–5 minutes. This scenario helps find the exact boundary after which the system degrades. InfluxDB and Prometheus collect metrics at each step to build a response time vs RPS graph.

Load Test Metrics

Response Time

Response Time is the primary Load Test metric. Measured in milliseconds and analyzed by percentiles: p50 (median), p95, and p99. Google SRE (2024) recommends a p95 threshold of no more than 1000 ms for REST API and no more than 200 ms for gRPC. Percentiles are more important than averages because they show the behavior of the worst requests, which users notice first. Apdex (Application Performance Index) is a composite metric that considers the proportion of satisfied, tolerating, and frustrated users.

Throughput

Throughput — the number of successful requests per unit of time. Measured in RPS (requests per second) or TPS (transactions per second). The Throughput graph in “time — RPS” coordinates should be linear until the saturation point. A sharp drop in Throughput with increased load is a sign of reaching the system’s limit. Apache Bench and wrk are simple CLI tools for quick Throughput checks during development.

Error Rate

Error Rate — the proportion of responses with HTTP status 4xx or 5xx out of total requests. The acceptable threshold is less than 1%. Errors 429 (Too Many Requests) and 503 (Service Unavailable) under high load indicate the need to configure rate limiting and auto-scaling. A rate limiter on the API Gateway side protects the backend from exceeding the allowed load. Retry policy with exponential backoff helps clients correctly handle temporary errors.

MetricNormalCritical
Response Time p50< 300 ms> 1000 ms
Response Time p95< 1000 ms> 3000 ms
Throughput100% of target< 80% of target
Error Rate< 1%> 5%

Tools for Load Test

k6 (Grafana)

k6 — the leading Open Source load testing tool from Grafana. Scripts are written in JavaScript, supporting modular scenarios, thresholds, and integration with Prometheus and InfluxDB. k6 can run both in CLI and in the Grafana Cloud k6 cloud. Grafana Cloud automatically builds dashboards from Load Test results and compares them with historical data. k6 supports Protocol Buffers and gRPC via a separate k6/net/grpc module.

Apache JMeter

Apache JMeter — a classic Load Test tool with a graphical interface. Supports a wide range of protocols: HTTP, JDBC, JMS, FTP, and TCP. JMeter is better suited for complex scenarios with many different types of requests but requires more manual configuration compared to k6. JMeter Plugins extend functionality for WebSocket and gRPC testing. For distributed execution, JMeter uses a master-slave architecture with one controller.

Locust

Locust — a Python-based tool that allows describing load scenarios in code. Locust is convenient for teams that use Python as their primary automation language. Unlike k6 and JMeter, Locust supports distributed execution out of the box: one master node coordinates several worker nodes. Distributed execution allows generating load up to 100000 RPS from multiple machines. Locust also supports WebSocket testing through custom extensions.

js
import http from 'k6/http'
import check from 'k6'
import sleep from 'k6'

export const options = {
    stages: [
        { duration: '2m', target: 100 },
        { duration: '5m', target: 100 },
        { duration: '2m', target: 200 },
    ],
    thresholds: {
        http_req_duration: ['p(95)<500'],
        http_req_failed: ['rate<0.01'],
    }
}

export default function() {
    const res = http.get('https://api.example.com/users')
    check(res, {
        'status is 200': (r) => r.status === 200,
    })
    sleep(1)
}

Example of Writing a Load Test in k6

The k6 script shown above demonstrates a typical load test structure. Options define the load profile: ramp-up for 2 minutes to 100 users, then 5 minutes of constant load, and another ramp-up to 200 users. Thresholds define test pass criteria: p95 request time no more than 500 ms, error rate less than 1%. If thresholds are exceeded, k6 exits with a non-zero code — this allows integrating Load Test into CI/CD.

In mobile development, Load Test of the server-side is especially important when launching new features that create additional load: likes, comments, streaming. Recommendation — conduct a Load Test on every staging before deploying to production. Creating a baseline load profile during the API design phase helps avoid architectural problems in later stages.

Frequently Asked Questions

How is Load Test different from Stress Test?

Load Test checks the system under expected load, while Stress Test checks under load exceeding normal values. Load Test answers the question “does the system work with 1000 users”, while Stress Test answers “at how many users does the system stop working”.

How many users should be simulated in a Load Test?

The number of virtual users (VUs) is calculated based on application usage analytics. If the application serves 10000 users during peak hours, the minimum Load Test should simulate 10000 VUs. A buffer of 20–50% is recommended to account for audience growth.

How often should a Load Test be conducted?

A basic Load Test — before every release. A full profile with multiple scenarios — every week or after major backend architecture changes. Automating Load Test in CI/CD allows running it daily without manual effort.

What errors does Load Test most commonly reveal?

The most common problems are slow SQL queries without indexes, incorrect connection pool configuration, lack of caching for repeated queries, and memory leaks in worker processes. Load Test also reveals rate limiting and timeout issues.

Can Load Test be conducted for the client side of an application?

Yes, for the client side, Load Test focuses on local data processing: synchronizing thousands of records via Core Data or Room, handling a large number of push notifications, and loading media files. Charles Proxy allows simulating a slow network connection on the client.

Summary

  • Load Test — checking the behavior of a mobile application and its backend under an expected number of concurrent users.
  • Main scenarios — Spike Test, Endurance Test, and Step Load Test.
  • Key metrics — response time (p50, p95, p99), throughput (RPS), and error rate.
  • Tools — k6, JMeter, Locust, and Gatling for server-side with CI/CD integration.
  • Load Test reveals architectural bottlenecks: slow database queries, connection pool issues, and lack of caching.
  • Recommended to conduct a Load Test before every release with a 20–50% buffer above the expected peak load.
  • Load testing is a mandatory step when launching new features that create additional load on the server side.

We will develop a mobile application turnkey

IT Sectr creates iOS and Android applications for startups and businesses since 2017. We will advise you and propose the best solution.

Discuss the project

Read also