Dmitry Reznik

Written by: Chief Technology Officer

Dmitry Reznik

Updated: 12.10.2026

28 min read

Performance problems affect more than technical metrics. A Google-commissioned study covering 37 brands and over 30 million sessions found that a 0.1-second improvement in mobile site speed was associated with an 8.4% increase in retail conversion rates and a 10.1% increase for travel sites.

Web application performance testing helps teams find speed, stability, and scalability limits before they affect users or revenue. It covers the browser, backend services, databases, integrations, and infrastructure – not just page load time.

What is web application performance testing?

Web application performance testing is the process of evaluating an application’s speed, stability, scalability, and responsiveness under a defined workload. It answers practical questions such as:

  • Can the application support its expected number of users?

  • What happens when traffic rises suddenly?

  • Which component becomes a bottleneck first?

  • Does the system recover after an overload?

  • Does the browser remain responsive while the backend is under pressure?

  • Can the application meet its service-level objectives?

  • Will adding infrastructure meaningfully increase capacity?

The workload may represent ordinary production traffic, a seasonal peak, a long period of continuous use, or increasing demand designed to reveal the system’s capacity limit.

A complete test covers more than the application server. Modern web applications often depend on APIs, databases, caches, message queues, content delivery networks, authentication providers, cloud services, and third-party integrations. A delay in any one of these components can affect the user’s entire journey.

In short: Web application performance testing determines whether a web application remains fast, stable, and functional under realistic and exceptional workloads. It combines user-level measurements with backend and infrastructure data to identify performance limits and their causes.

Performance testing vs. load testing vs. website speed testing

These terms are related, but they do not describe the same activity.

Term
What it evaluates
Typical scope
Example question

Performance testing

The overall speed, stability, scalability, and responsiveness of a system

Frontend, backend, integrations, and infrastructure

Does the application meet its performance requirements?

Load testing

Behavior under an expected or projected workload

APIs, services, databases, and infrastructure

Can the system support normal and peak traffic?

Stress testing

Behavior beyond the expected operating range

Capacity, failure modes, and recovery

Where does the system begin to fail?

Website speed testing

Page loading and visual responsiveness

Browser and frontend resources

How quickly can a user view and interact with the page?

Performance monitoring

Behavior of a running system over time

Production application and infrastructure

Is performance degrading for real users?

Load testing is therefore a type of performance testing, not a synonym for the entire discipline.

Website speed testing has a narrower focus. Tools such as Lighthouse or PageSpeed Insights can reveal slow rendering, large frontend resources, or poor Core Web Vitals. They do not show how a backend will behave when thousands of users search, log in, or submit payments at the same time.

Monitoring serves another purpose. It observes a running system but does not create a controlled workload. Testing and monitoring are most useful together: the test generates known conditions, while monitoring data helps explain how the system responds.

Why web application performance testing matters

Performance problems rarely stay confined to a single technical metric. A slow database query can delay an API, keep a loading indicator on the screen, increase abandonment, and consume enough resources to affect other users.

Testing helps teams address these risks before release.

1. Protect critical user journeys

Not every slow request has the same business impact. A delayed analytics call may be tolerable, while a slow login, payment, product search, or document upload can make the application unusable.

Performance tests should focus on the journeys that matter most and measure whether they remain both fast and functionally correct.

A useful starting point is to ask:

  • Which user action directly creates revenue or completes the product’s primary job?

  • Which transaction has the highest volume?

  • Which operation touches the largest number of services?

  • Which workflow would cause the most damage if it slowed down or failed?

These questions usually produce a better test scope than beginning with a list of endpoints.

2. Prepare for traffic peaks

An application that handles average traffic may still fail during a product launch, ticket sale, marketing campaign, or seasonal event. Load, stress, and spike tests show how the system behaves as demand rises and whether scaling mechanisms respond quickly enough.

They can also reveal a less obvious issue: the application may eventually scale, but not before the first wave of users experiences timeouts.

3. Make capacity decisions using evidence

Performance data helps teams estimate how much traffic the current architecture can support. It also reveals whether adding CPU, memory, containers, or database replicas produces a meaningful increase in capacity.

Without this evidence, teams may overprovision infrastructure or discover that additional resources do not address the actual constraint. A serialized operation, external rate limit, inefficient query, or shared lock will not necessarily improve when more application servers are added.

4. Catch regressions before production

A small code or configuration change can affect query execution, cache behavior, memory consumption, or the number of network calls required for a transaction. Repeatable tests make it possible to compare releases and reject changes that break an agreed performance budget.

5. Understand failure and recovery

A system should not only remain stable under normal conditions. It should degrade predictably when a limit is reached and recover after the workload falls.

Stress testing can reveal whether requests queue indefinitely, services return controlled errors, autoscaling starts in time, and the application recovers without manual intervention.

Types of web application performance testing

Different load patterns expose different risks. A single test cannot provide complete coverage.

Test type
Purpose
Load pattern
Typical use case

Smoke test

Validate the script and establish an initial baseline

Minimal load for a short period

Run before a larger performance test

Load test

Measure behavior under expected demand

Gradual ramp-up followed by a stable load

Normal and projected peak traffic

Stress test

Evaluate behavior beyond expected capacity

Load rises above the planned peak

Find failure modes and assess recovery

Spike test

Measure the effect of a sudden traffic surge

Sharp increase followed by a rapid decrease

Flash sales, ticket releases, viral traffic

Soak test

Detect degradation over time

Sustained load for several hours or longer

Memory leaks and exhausted connection pools

Scalability test

Determine whether added resources increase capacity

Repeated tests with increasing load and resources

Horizontal or vertical scaling decisions

Breakpoint test

Find the practical limit of the system

Load increases until an agreed failure condition occurs

Capacity planning

Volume test

Measure behavior with large amounts of data

Production-sized or larger datasets

Database-heavy applications and reporting systems

Terminology varies between teams and tools. What one team calls a capacity test may resemble another team’s breakpoint test. The important part is the risk being tested, the workload shape, and the pass/fail criteria. The Grafana k6 load test guide similarly recommends starting with small smoke tests before moving to higher loads and longer durations.

Load testing

A load test measures application behavior under anticipated traffic. The load should reflect a realistic mix of user actions rather than thousands of users repeating the same request.

For an e-commerce application, that mix might include browsing products, searching, adding items to a cart, signing in, and completing checkout. The test determines whether response time, throughput, and error rates remain within the accepted range.

Stress and breakpoint testing

A stress test pushes the application beyond its normal operating level. Its purpose is not simply to make the system fail. A well-designed test identifies the first constraint, observes how failure develops, and checks whether the application recovers afterward.

A breakpoint test increases demand until a defined limit is reached – for example, an unacceptable p95 response time, a rising error rate, or database saturation.

Spike testing

Spike tests simulate abrupt changes rather than gradual growth. They are useful when traffic can jump within seconds or minutes and the infrastructure needs time to scale.

The results may reveal that autoscaling works eventually but reacts too slowly to protect the first group of users.

Soak testing

Some problems appear only after prolonged use. Memory leaks, unclosed connections, growing queues, cache issues, and storage constraints may remain invisible during a 20-minute test.

A soak test holds the application at a representative load long enough to reveal gradual degradation.

What should you measure?

The average response time alone cannot describe application performance. Useful analysis combines browser, application, infrastructure, and business-level metrics.

1. User experience and browser metrics

Browser measurements show what a user actually sees and experiences. Relevant metrics include:

  • Largest Contentful Paint (LCP);

  • Interaction to Next Paint (INP);

  • Cumulative Layout Shift (CLS);

  • Time to First Byte (TTFB);

  • First Contentful Paint (FCP);

  • JavaScript execution time;

  • page weight and request count;

  • time required to complete a user journey.

Google’s current Core Web Vitals guidance defines a good LCP as 2.5 seconds or less, INP as 200 milliseconds or less, and CLS as 0.1 or less. These results should be evaluated at the 75th percentile and segmented between mobile and desktop traffic. The thresholds and measurement guidance are available in the official Web Vitals documentation.

Laboratory and field data answer different questions. A controlled lab test is repeatable and useful for detecting regressions before release. Real user monitoring captures the devices, locations, network conditions, and behavior found in production. Neither should be treated as a replacement for the other.

2. Application metrics

Application-level measurements commonly include:

  • response time and latency;

  • p50, p90, p95, and p99 latency;

  • requests or transactions per second;

  • concurrent users;

  • error and timeout rates;

  • queue time;

  • transaction duration;

  • completed iterations.

Percentiles matter because an average can hide a poor experience. Suppose most requests finish in 150 milliseconds while a smaller but significant group takes several seconds. The average may still look acceptable, whereas p95 or p99 makes the slow tail visible.

Response correctness must be measured alongside speed. An endpoint that returns an error page in 50 milliseconds is not performing successfully.

3. Infrastructure metrics

Infrastructure data helps locate the cause of degradation. Depending on the architecture, a team may monitor:

  • CPU and memory utilization;

  • network and disk I/O;

  • garbage collection;

  • database query latency;

  • active database connections;

  • connection pool utilization;

  • cache hit ratio;

  • queue depth;

  • container or pod saturation;

  • autoscaling activity;

  • rate limits and third-party dependency latency.

High CPU usage is not automatically a failure, and low CPU usage does not prove the system is healthy. The numbers must be correlated with workload, latency, errors, and application-level behavior.

On a dental management platform, for example, DeviQA combined varying load levels with backend resource monitoring. The value did not come from producing a single response-time graph. It came from connecting workload changes to resource behavior, documenting the bottlenecks, and giving the engineering team targeted recommendations. The full engagement is described in the Arklign case study.

4. Business-level metrics

Technical metrics should be connected to successful user outcomes. These may include:

  • completed checkouts;

  • successful payments;

  • successful logins;

  • search results returned;

  • orders processed per minute;

  • files uploaded or reports generated.

Business metrics help reveal failures that an HTTP status check might miss. A checkout endpoint can return a successful status while the payment remains unprocessed or the order is not created.

Browser-based vs. protocol-based performance testing

One of the first design decisions is whether to generate load at the protocol level, through real browsers, or through a combination of both.

Protocol-based testing

Protocol-level tools communicate directly with HTTP endpoints, APIs, WebSockets, or other supported protocols. Because they do not render a complete page, they can usually generate substantial load with fewer resources.

This approach works well for:

  • API and service testing;

  • backend capacity testing;

  • high-concurrency workloads;

  • database and infrastructure analysis;

  • repeatable CI/CD checks.

Its limitation is equally important: an HTTP response time does not describe browser rendering, JavaScript execution, visual stability, or interaction responsiveness.

Apache explicitly states that JMeter is not a browser. It operates at the protocol level and does not render HTML or execute page JavaScript as a normal browser would.

Browser-based testing

Browser tests drive a real browser and measure what happens on the frontend. They can capture Web Vitals, execute JavaScript, interact with UI elements, and measure complete user journeys.

They help answer questions such as:

  • When does meaningful content become visible?

  • How long does a loading indicator remain on the screen?

  • Can a user interact with the page while the backend is under load?

  • Do real-time updates continue to reach the interface?

  • Does a frontend change introduce an LCP or INP regression?

Real browsers consume far more CPU and memory than protocol-level virtual users, so they are expensive to scale to high concurrency. But sometimes the browser is the system that must be tested.

That was the case for a web-based betting application where the main risk involved UI performance and real-time updates. Protocol-level tools could not reproduce the required browser behavior, so DeviQA built a Selenium-based test setup orchestrated through Kubernetes. The resulting test farm used more than 200 machines and helped uncover bottlenecks in the frontend, backend, GraphQL server, and authentication flow. The details are available in the betting application performance testing case study.

The lesson is not that real browsers are always better. It is that the test layer must match the user-visible failure being investigated.

Hybrid testing

A hybrid test uses protocol-level users to generate most of the workload and a smaller number of browser users to observe the resulting experience.

This provides backend scale without losing frontend visibility. Grafana recommends this pattern in its guide to load testing websites: protocol scripts create the majority of traffic, while browser scenarios measure performance at the interface level.

How to perform web application performance testing

A useful test begins with business and engineering requirements, not with tool selection.

1. Define the objectives and acceptance criteria

Choose the questions the test must answer. Identify critical user journeys, expected demand, projected peaks, known risks, and the system components involved.

Then define pass/fail criteria. These may include:

  • p95 and p99 response-time limits;

  • a maximum error rate;

  • minimum throughput;

  • maximum time for a business transaction;

  • browser performance budgets;

  • recovery time after overload;

  • infrastructure saturation limits.

The values should come from product requirements, service-level objectives, production baselines, or business expectations. Generic numbers copied from another system are rarely useful.

Expected capacity should also be treated as a hypothesis until it has been tested. In the betting platform project, the business expectation was more than 5,000 concurrent users, while the first controlled run found a practical limit of 717 users without downtime. That finding gave the team a concrete baseline and a prioritized list of constraints to address.

2. Build a realistic workload model

A workload model describes what users do and how often they do it. Production analytics can help determine:

  • the ratio of anonymous to authenticated users;

  • the frequency of each transaction;

  • session length;

  • think time between actions;

  • geographic distribution;

  • device and network profiles;

  • daily and seasonal peaks.

The model must also distinguish between concurrency and arrival rate. A closed model controls the number of simultaneous virtual users, while an open model controls how frequently new iterations or requests arrive. The appropriate choice depends on how traffic reaches the real system.

Do not forget setup actions. If every virtual user logs in at exactly the same moment, authentication may become an artificial bottleneck that prevents the test from reaching the workflow it was meant to evaluate. In the betting application project, the team had to address a login bottleneck before it could meaningfully validate behavior at more than 10,000 concurrent users.

Authentication may be part of the intended workload, but it should not dominate the test accidentally.

3. Prepare the environment and test data

The test environment should resemble production in the areas that affect performance:

  • application configuration;

  • infrastructure sizing;

  • autoscaling rules;

  • database volume and indexes;

  • caching;

  • network topology;

  • external integrations;

  • logging and observability.

An exact copy is not always practical. When the environments differ, document the differences and avoid presenting the result as a direct prediction of production capacity.

Test data also needs attention. Shared accounts, reused shopping carts, or an unrealistically small database can distort results and create false bottlenecks.

4. Create and validate test scripts

A performance script should reproduce the intended transaction and validate its result. Common requirements include:

  • session and authentication handling;

  • extraction and reuse of dynamic values;

  • parameterized user data;

  • realistic pacing;

  • conditional behavior;

  • response-content checks;

  • cleanup of created records.

Run the script with one or two users before increasing the load. This catches correlation errors and prevents a broken script from producing a convincing but meaningless report.

A performance suite does not have to cover every feature to provide value. For an event management platform, DeviQA created load tests around four main user workflows and more than 60 requests. That focused scope was enough to identify and fix performance issues in the areas that mattered most. See the Datasport case study.

5. Establish a baseline

A baseline records performance under a small, controlled workload. It confirms that the environment and monitoring are functioning and creates a reference for later tests.

If the application is already slow under minimal load, increasing concurrency will usually obscure the original problem.

6. Run the required workload profiles

Increase complexity gradually:

1.

Run a smoke test.

2.

Test the expected average load.

3.

Test the projected peak.

4.

Add stress, spike, soak, or breakpoint scenarios according to the product’s risk profile.

5.

Allow the system to ramp down and observe recovery.

Use a clear ramp-up, plateau, and ramp-down whenever possible. Complicated “roller-coaster” profiles can make the results difficult to interpret.

7. Correlate results with observability data

The load generator shows what happened to the requests. Logs, metrics, and distributed traces help explain why.

For example, rising p95 latency may correspond with:

  • a slow database query;

  • connection pool exhaustion;

  • lock contention;

  • garbage collection pauses;

  • an overloaded dependency;

  • a growing message queue;

  • throttling from a third-party API.

Without this correlation, the result may identify a symptom but leave the engineering team without a practical fix.

The final report should preserve enough context for another engineer to understand and reproduce the result. At minimum, record:

  • the application version and environment;

  • infrastructure configuration;

  • workload model;

  • test data conditions;

  • ramp-up and duration;

  • user or request volume;

  • acceptance criteria;

  • response-time percentiles;

  • throughput and errors;

  • resource behavior;

  • bottlenecks found;

  • limitations of the test;

  • recommended next actions.

8. Fix, retest, and automate

After a change, rerun the same scenario in comparable conditions. Changing the workload, environment, and code simultaneously makes comparison unreliable.

Stable tests can then become automated quality gates. For example, a pipeline might fail when more than 1% of requests return errors or when p95 latency exceeds an agreed limit. In k6, such pass/fail rules are implemented as thresholds.

6 field observations from DeviQA performance testing projects

Published case studies reveal several patterns that are easy to miss in generic performance testing guides.

1. Expected capacity is not measured capacity

Roadmaps and architecture diagrams often contain an assumed user limit. Until the application is tested under a realistic workload, that number remains an estimate.

The gap can be substantial. The betting platform expected support for more than 5,000 concurrent users, but the first test showed a limit of 717 without downtime. Finding that gap early allowed the team to investigate it systematically instead of discovering it during a production peak.

2. The first bottleneck may prevent you from testing the real target

Authentication, test-data creation, anti-DDoS controls, or a third-party service can fail before the main user journey reaches the intended load.

This is why preparation flows should be measured separately. If the purpose of a test is to evaluate live betting updates, but every user must pass through an overloaded login endpoint, the test will mostly describe authentication capacity.

3. Backend speed does not prove frontend performance

An API may respond quickly while the browser struggles with rendering, JavaScript execution, live data updates, or a large DOM.

The betting application required real-browser testing because the risk was visible at the UI level. Once the complete path was observed, bottlenecks appeared across several layers rather than in a single service.

4. A small suite of critical journeys can be more useful than broad shallow coverage

Performance tests are expensive to create, maintain, and diagnose. Covering every endpoint is rarely the best first step.

The Datasport engagement focused on four central workflows. Another DeviQA engagement for a loan management solution introduced more than ten load scenarios and integrated them into CI. In both cases, the suite was shaped around repeatable risks rather than endpoint count. See The Mortgage Office case study.

5. Load tests become more valuable when they run after the initial project

A one-time capacity report begins aging as soon as the architecture changes. Tests integrated into CI or scheduled pipelines become regression controls.

For a childcare management platform, DeviQA built more than 20 end-to-end load tests, connected them to monitoring platforms, integrated them into CI, and supported distributed execution of approximately 1,000 concurrent users. The suite could then detect performance risks as the product continued to change. The implementation is described in the childcare management system case study.

6. The report should explain behavior, not merely grade it

A result such as “the test failed at 2,000 users” is incomplete. The useful questions are:

  • Which transaction degraded first?

  • What resource or dependency changed at the same time?

  • Did errors appear gradually or suddenly?

  • Was the application still processing valid transactions?

  • Did it recover?

  • Which change should be tested next?

A good report turns a performance test into an engineering decision. A dashboard screenshot without environment details, workload parameters, and bottleneck analysis does not provide the same value.

Performance testing tools for web applications

No single tool is best for every application. The choice depends on protocols, team skills, required concurrency, browser coverage, deployment model, reporting, and CI/CD integration.

Tool
Category
Best suited for
Important limitation

Apache JMeter

Protocol and load testing

Multi-protocol workloads and established enterprise test suites

Does not behave as a full browser

Grafana k6

Protocol and browser testing

Tests as code, API testing, CI/CD, and hybrid scenarios

Browser scenarios require more resources

Gatling

Code-driven load testing

Maintainable high-throughput tests in Java, JavaScript, TypeScript, Scala, or Kotlin

Teams need to adopt its code-driven workflow

Locust

Code-driven load testing

Python teams and highly customized user behavior

Not intended to reproduce full browser rendering

OpenText Professional Performance Engineering

Enterprise performance testing

Complex enterprise environments and broad protocol requirements

Commercial licensing and operational complexity

Lighthouse and PageSpeed Insights

Frontend diagnostics

Lab analysis, field data, and Core Web Vitals investigation

Do not generate production-scale backend load

WebPageTest

Browser and synthetic testing

Waterfalls, filmstrips, and detailed page diagnostics

Not a replacement for high-concurrency load testing

APM and observability platforms

Runtime diagnosis

Correlating latency, errors, resource use, logs, and traces

Observe behavior but do not generate workload

Apache JMeter remains an actively documented open-source tool for load testing web applications and other protocols. Grafana k6 supports protocol tests as well as browser-level scenarios. Gatling offers code-based simulations, while Locust defines user behavior in Python and supports distributed execution.

The decision should begin with the question being tested. A team diagnosing slow visual rendering needs a browser-focused tool. A team validating API capacity may prioritize efficient protocol-level load generation. A platform that depends on specialized backend infrastructure may need tests at an even narrower layer.

For example, DeviQA created approximately 20 JMeter load tests for RPC proxies supporting around 20 blockchains on a cryptocurrency wallet platform. The target was not a generic webpage score but the performance of a specific dependency used across transaction flows. See the cryptocurrency wallet platform case study.

Practical example: testing an e-commerce checkout

Consider an e-commerce application preparing for a promotional campaign. Production analytics indicate the following traffic mix:

User activity
Share of workload

Browse product pages

60%

Search the catalog

25%

Add an item to the cart

10%

Complete checkout

5%

The test gradually increases traffic to the projected campaign peak, holds it long enough to observe stable behavior, and then introduces a short spike. A smaller browser-based scenario follows the critical product-to-checkout journey while protocol-level users generate most of the load.

Example acceptance criteria might include:

  • p95 response time remains below the project’s agreed limit;

  • the error rate stays below the defined threshold;

  • checkout success rate does not fall as traffic increases;

  • database and connection pools do not reach sustained saturation;

  • autoscaling activates before user-facing latency becomes unacceptable;

  • browser metrics remain within the product’s performance budget;

  • the application returns to normal behavior after the spike.

These figures and limits must be defined for the actual product. A threshold suitable for a catalog request may be inappropriate for a payment transaction or a complex report.

The test should also separate setup from measurement. User accounts, product data, and carts can often be prepared before the measured workload begins. Otherwise, test-data creation may consume resources and distort the checkout result.

Common performance testing mistakes

Several mistakes can make a technically successful test misleading.

1. Testing only the happy path

Real workloads contain failed logins, empty searches, abandoned carts, retries, cache misses, and different account states. Testing one perfect flow gives an incomplete picture.

2. Using an unrealistic workload

Thousands of users repeating one endpoint can overload that component while ignoring the rest of the system. Production traffic should shape the transaction mix whenever possible.

3. Confusing users, sessions, requests, and transactions

“Ten thousand users” is not a complete workload definition. Ten thousand idle sessions create different demand from ten thousand users submitting requests every second.

A test plan should state arrival rate, concurrency, think time, session behavior, transaction mix, and duration.

4. Relying on averages

Average latency conceals slow outliers. Track p95 and p99, then inspect the transactions and user groups responsible for the tail.

5. Skipping response validation

A fast response is not necessarily a correct response. Validate status, content, data creation, and critical business outcomes.

6. Testing with an empty database

Queries that work well against a small dataset may behave very differently with production-sized tables, indexes, and historical records.

7. Ignoring the load generator

If the machine generating traffic reaches its own CPU, memory, or network limit, it can produce misleading latency and throughput results. Monitor the generator as well as the system under test.

8. Running tests without server-side visibility

A chart showing increased response time identifies a symptom. Metrics, logs, and traces are needed to locate the bottleneck.

9. Treating performance testing as a pre-release event

One large test immediately before launch leaves little time for diagnosis and architectural changes. Smaller automated checks throughout development make regressions cheaper to fix.

10. Comparing incomparable test runs

A “20% improvement” means little if the second test used different data, infrastructure, cache state, scripts, or workload. Repeatability is part of the test design, not an administrative detail.

When should performance testing be performed?

Different stages of delivery call for different levels of testing.

During development, teams can run component benchmarks, API checks, and frontend performance audits. Pull requests can include short regression tests with conservative performance budgets.

A staging or performance environment is suitable for broader workload tests, including realistic transaction mixes and production-sized data. Stress, capacity, and soak tests are particularly valuable before major releases, infrastructure changes, migrations, or high-traffic campaigns.

Production still needs real user monitoring, synthetic checks, logs, traces, and infrastructure metrics. Controlled load testing in production may be appropriate for some organizations, but it requires clear safeguards, traffic limits, isolated test accounts, stakeholder approval, and a rollback plan.

Performance testing works best as a continuous feedback loop:

measure → diagnose → improve → retest → monitor

How DeviQA can help

Effective performance testing requires more than running a tool with a large virtual-user count. The workload must reflect real traffic, the test layer must match the suspected risk, and results must be connected to application and infrastructure behavior.

DeviQA’s performance testing services cover test strategy, workload modeling, script development, distributed execution, bottleneck analysis, and integration with delivery pipelines. Depending on the system, the team can combine browser journeys, API traffic, backend tests, infrastructure monitoring, and production-like test data.

For systems with specific load risks, DeviQA also provides dedicated load and stress testing services, API testing services, and k6 testing services.

Need to understand how your web application will behave under real-world traffic? Talk to DeviQA’s performance testing experts.

Build QA that holds up as you grow

Frequently asked questions

What is web application performance testing?

Web application performance testing evaluates how quickly, reliably, and consistently an application works under a defined workload. It may cover browser rendering, API latency, backend services, databases, integrations, and infrastructure. The goal is to verify performance requirements, identify bottlenecks, understand capacity, and observe how the application behaves and recovers when demand rises.

What is the difference between performance testing and load testing?

Performance testing is the broader discipline. It covers speed, stability, scalability, resource use, frontend behavior, and system performance under different conditions. Load testing is one type of performance testing focused on behavior under an expected or projected workload. Other types include stress, spike, soak, scalability, volume, and breakpoint testing.

Which metrics are most important for web application performance?

The answer depends on the application and user journey. Common metrics include p95 and p99 response time, throughput, error rate, transaction success, CPU, memory, database latency, and connection pool utilization. Browser-focused testing may also track LCP, INP, CLS, TTFB, and complete user-journey duration. The most useful metrics are tied to explicit acceptance criteria.

Which tool is best for web application performance testing?

There is no universal best tool. JMeter, k6, Gatling, and Locust are common choices for protocol-level load generation. Real-browser scenarios can be implemented with browser-capable tools, while Lighthouse, PageSpeed Insights, and WebPageTest support frontend analysis. The choice should reflect the failure being investigated, protocols, team skills, concurrency requirements, observability stack, and CI/CD workflow.

How many virtual users should a performance test simulate?

There is no default number. The workload should come from production analytics, growth forecasts, business events, or an explicit capacity objective. Concurrent users alone are not enough: the model should also define arrival rate, session behavior, transaction mix, think time, and test duration.

Can performance testing be automated in CI/CD?

Yes, but not every test belongs in every pipeline stage. Short regression tests can run on pull requests or builds, while larger load, spike, or soak tests may run on release candidates or a schedule. Automated thresholds can fail a build when response time, error rate, throughput, or browser performance exceeds an agreed limit.

How often should a web application be performance tested?

Run lightweight checks whenever relevant code or configuration changes. Broader tests are appropriate before major releases, migrations, infrastructure changes, marketing campaigns, and expected traffic peaks. Long-duration and capacity tests can run periodically based on the product’s risk profile. Production monitoring should remain continuous.

Can performance testing be performed in production?

It can, but the risk must be controlled. Production testing may provide the most realistic infrastructure, data, and dependency behavior, yet it can also affect real users and business transactions. Teams need strict traffic limits, isolated test accounts, monitoring, stakeholder approval, and a clear stop or rollback procedure.

Dmitry Reznik

About the author

Dmitry Reznik

Chief Technology Officer

Dmitry Reznik is the Chief Technology Officer and co-founder at DeviQA, bringing deep technical expertise across software architecture, implementation, and long-term system operation.