Performance Testing
Testing that evaluates the speed, scalability, stability, and responsiveness of a system under workload.
Full Definition
Performance testing is a type of non-functional testing that evaluates how a system behaves under various workload conditions. It measures speed (how fast the system responds), scalability (how well it handles increasing load), stability (whether it remains reliable over time), and resource consumption (CPU, memory, network, disk usage). Performance testing answers the critical question: "Will this system perform acceptably when real users hit it at real-world scale?"
Key performance metrics:
- •Response Time: How long the system takes to respond to a request (measured in milliseconds or seconds)
- •Throughput: Number of transactions or requests the system processes per unit of time
- •Concurrent Users: How many simultaneous users the system can support while maintaining acceptable performance
- •Error Rate: Percentage of requests that result in errors under load
- •Resource Utilization: CPU, memory, disk I/O, and network bandwidth consumption
- •Latency: Time delay between a request and the start of the response (distinct from full response time)
Types of performance testing:
- •Load Testing: Evaluates behavior under expected normal and peak loads — does the system meet SLAs at anticipated traffic levels?
- •Stress Testing: Pushes the system beyond its limits to find the breaking point and observe failure behavior — what happens when capacity is exceeded?
- •Endurance/Soak Testing: Runs the system under sustained load for extended periods (hours or days) to find memory leaks, resource exhaustion, and degradation over time
- •Spike Testing: Tests the system's response to sudden, dramatic increases in load — can it handle a traffic spike without crashing?
- •Scalability Testing: Measures how well the system scales when resources (servers, memory, bandwidth) are added
- •Volume Testing: Tests with large amounts of data to verify the system handles production-scale data volumes
Common performance testing tools:
- •JMeter: Open-source, widely used for web application load testing
- •k6: Modern, developer-friendly load testing tool with JavaScript scripting
- •Gatling: Scala-based tool popular for CI/CD integration
- •Locust: Python-based distributed load testing framework
- •Artillery: Node.js-based tool for testing HTTP, WebSocket, and other protocols
Common mistakes in performance testing:
The most dangerous mistake is not doing it at all until production users report problems. Performance issues discovered in production are exponentially more expensive and embarrassing to fix than those caught during testing. Another frequent error is testing with unrealistic scenarios — using a single endpoint, uniform request patterns, or tiny datasets that don't reflect real user behavior. Production traffic is messy: users do unpredictable things, data sizes vary wildly, and traffic patterns have peaks and valleys. Tests must model this complexity. Teams also commonly test against undersized environments and then assume results will scale linearly to production — they rarely do.
Best practices:
- •Establish performance baselines early and track trends over time — a 5% regression per sprint compounds quickly
- •Define clear performance acceptance criteria before testing: "95th percentile response time under 2 seconds at 1,000 concurrent users"
- •Test with production-realistic data volumes and traffic patterns
- •Include performance tests in the CI/CD pipeline to catch regressions early
- •Monitor server-side resource usage during tests, not just client-side response times
- •Test failure and recovery scenarios — what happens when a server goes down under load?
Examples
- 1.Load testing an e-commerce checkout flow with 5,000 concurrent users simulating realistic browsing, cart addition, and payment patterns — verifying that 95th percentile response times stay under 2 seconds and error rates remain below 0.1%
- 2.Stress testing a video streaming platform by gradually increasing concurrent viewers from 10,000 to 100,000 to identify the exact breaking point and characterize the degradation pattern (graceful degradation vs. catastrophic failure)
- 3.Endurance testing a SaaS application under moderate load (500 concurrent users) for 72 continuous hours, monitoring for memory leaks, database connection pool exhaustion, and log file disk space consumption
- 4.Spike testing a ticket sales platform by simulating 50,000 users hitting the site simultaneously when a popular event goes on sale — verifying the queue system activates correctly and no users receive errors
- 5.API performance benchmarking: testing each endpoint individually under load to identify bottlenecks, then testing realistic mixed-workload scenarios that reflect actual API usage patterns from analytics data
In BesTest
BesTest tracks performance test cases and their results alongside functional testing, providing a unified view of both correctness and performance readiness. Tag performance tests to create dedicated Smart Collections, and use the coverage dashboard to ensure performance-sensitive requirements have corresponding test cases with specific response time or throughput criteria.
Related Terms
Load Testing
Testing system behavior and performance under expected and peak user loads.
System Testing
End-to-end testing of the complete, integrated software system against specified requirements.
Test Environment
The hardware, software, network, and configuration setup where tests are executed.
Test Plan
A document outlining the testing approach, scope, resources, and schedule for a project or release.
Test Automation
Using software tools to execute tests automatically without manual intervention.
See Performance Testing in Action
Experience professional test management with BesTest. Free for up to 10 users.
Try BesTest Free