स्पाइक टेस्टिंग
Spike testing परफ़ॉर्मेंस टेस्टिंग का एक प्रकार है जिसमें system पर load अचानक और बहुत ज़्यादा बढ़ाया जाता है, थोड़ी देर उसी स्तर पर रखा जाता है और फिर वापस घटाया जाता है, ताकि देखा जाए कि system इस burst को संभालता है या नहीं और बाद में सामान्य हालत में लौटता है या नहीं। ISTQB का Performance Testing syllabus इसे ऐसे बताता है: यह टेस्ट करना कि system peak load के अचानक bursts पर सही तरह respond करता है और उसके बाद steady state में लौट आता है।
उदाहरण: एक online store 20:00 बजे flash sale की push notification भेजता है, और एक मिनट के अंदर उसकी checkout API पर traffic 100 से 600 requests प्रति सेकंड हो जाता है। Spike test इसी छलाँग को production जितने बड़े environment में दोहराता है और तीन सवालों के जवाब देता है: पहले कुछ मिनटों में users क्या अनुभव करते हैं, extra capacity कितनी जल्दी आती है, और recovery में कितना समय लगता है?
यह क्यों ज़रूरी है
Stress test, जैसा पिछले lesson में देखा, load को अपेक्षित peak से आगे ले जाकर limit खोजता है। Spike test कुछ और पूछता है: peak शायद उतना ही हो जितना system scale होने के बाद संभाल लेता है, लेकिन वह system के react करने से पहले आ जाता है। नए instances को शुरू होने में मिनट लगते हैं, caches ठंडे होते हैं, connection pools सामान्य traffic के हिसाब से बने होते हैं, और जो request अभी serve नहीं हो सकती वह queue में इंतज़ार करती है या fail हो जाती है।
Systems अपने सबसे व्यस्त दिन इसी तरह fail होते हैं — sale, ticket release, registration की आख़िरी तारीख़ — जब खोए हुए orders और retry की गई requests से दोहरे payments सबसे महँगे पड़ते हैं। Tester के लिए spike test "हमारे पास autoscaling है" को सबूत में बदलता है: scaling lag कितना लंबा है, उस दौरान users क्या देखते हैं, और system सच में वापस आता है या नहीं।
Spike profile का आकार
Spike profile के पाँच phases होते हैं: सामान्य load पर baseline, मिनटों में नहीं बल्कि सेकंडों में मापा जाने वाला ramp, spike level पर छोटा hold, तेज़ drop, और baseline पर recovery period। Recovery period test का हिस्सा है: इसी से पता चलता है कि system सामान्य हालत में लौटता है या नहीं। Spike level और उसकी अवधि असली event से लें — किसी campaign की अपेक्षित audience, पिछले साल की sale — किसी गोल संख्या से नहीं। Grafana k6 की test-type guide spike को बिना hold या बहुत छोटे hold के साथ दिखाती है; अगर असली burst कई मिनट चलता है, जैसे flash sale में, तो spike को उतनी देर hold करें।
Load को arrival rate से चलाएँ, virtual users की तय संख्या से नहीं। उस closed model में हर virtual user अगली request भेजने से पहले अपने response का इंतज़ार करता है, इसलिए system धीमा होते ही tool कम requests भेजने लगता है और वही burst छिप जाता है जिसे आप टेस्ट करना चाहते हैं। नीचे की script एक arrival-rate executor इस्तेमाल करती है; अगर rate बनाए रखने के लिए k6 के virtual users कम पड़ जाएँ, तो वह dropped_iterations report करता है: कमी tool की है, system की नहीं।
import http from 'k6/http';
export const options = {
scenarios: {
flash_sale_spike: {
executor: 'ramping-arrival-rate',
startRate: 100, // requests per second (one request per iteration)
timeUnit: '1s',
preAllocatedVUs: 500,
maxVUs: 6000, // enough to keep the rate when responses slow down
stages: [
{ duration: '5m', target: 100 }, // 1 baseline
{ duration: '30s', target: 600 }, // 2 spike up
{ duration: '5m', target: 600 }, // 3 hold
{ duration: '30s', target: 100 }, // 4 drop
{ duration: '10m', target: 100 }, // 5 recovery
],
},
},
};
export default function () {
http.get('https://staging.example.com/api/checkout/summary');
}आज़माएँ: परफ़ॉर्मेंस टेस्ट डेटा जनरेटर आज़माएँ: Concurrent रिक्वेस्ट टेस्ट जनरेटर
Autoscaling और scaling lag
Autoscaling तब instances जोड़ता है जब कोई metric threshold पार करता है, और इसके हर कदम में समय लगता है: metric का एक window पर average लिया जाता है, rule एक schedule पर evaluate होता है, और नए instance को boot होना, warm up होना और health check पास करना होता है, तभी load balancer उसे traffic भेजता है। इन सबका जोड़ scaling lag है। जब तक यह ख़त्म न हो, पूरा burst पहले से मौजूद instances ही उठाते हैं। इसलिए spike test सिर्फ़ आख़िरी instance count नहीं, पूरी scaling chain मापता है:
- Spike शुरू होने से scale-out के फ़ैसले तक का समय, और फ़ैसले से नए instances के traffic serve करने तक का समय।
- Instances की अधिकतम संख्या, और spike उस तक पहुँचता है या नहीं।
- जो चीज़ें application के साथ scale नहीं होतीं: database connections (हर नया instance अपना pool खोलता है), third-party rate limits, एक अकेला cache node।
- बाद में scale-in: cooldown कितना है, और जब load threshold के आसपास घूमता है तो instance count ऊपर-नीचे flap करता है या नहीं।
Queues, overload और recovery
जब requests serve होने से तेज़ आती हैं, तो अंतर queue में इंतज़ार करता है: load balancer, web server, connection pool या message broker में। 400 की capacity के सामने 600 requests प्रति सेकंड पर backlog हर सेकंड 200 बढ़ता है; 30 सेकंड बाद 6,000 requests इंतज़ार में होती हैं, और हर नई request उनके पीछे लगभग 15 सेकंड रुकती है। Burst ख़त्म होने पर backlog सिर्फ़ बची हुई capacity की रफ़्तार से drain होता है, और drain का यह समय recovery का हिस्सा है।
Overload को अच्छी तरह संभालने वाला system अपनी queues छोटी रखता है और जो समय पर serve नहीं कर सकता उसे मना कर देता है — 503 Service Unavailable, जिसे RFC 9110 temporary overload के लिए परिभाषित करता है और जिसके साथ Retry-After header आ सकता है, या किसी एक client की limit के लिए 429 Too Many Requests (RFC 6585) — बजाय इसके कि requests तब तक रुकी रहें जब तक clients का timeout न हो जाए। Retries spike को और बिगाड़ते हैं: तुरंत retry करने वाले clients load कई गुना कर देते हैं, इसलिए जाँचें कि वे random jitter के साथ exponential backoff इस्तेमाल करते हैं, और script में भी यही व्यवहार model करें।
- Spike के हर मिनट में: error rate और error का प्रकार (तेज़
503एक सोचा-समझा जवाब है,504timeouts और500errors नहीं), p95 और p99 latency, और क्या checkout चलता रहता है जबकि कम ज़रूरी requests मना की जाती हैं। - Message queues: अधिकतम depth और drain time, बिना कोई message खोए या दो बार process किए, और ऐसे duplicate orders नहीं जहाँ client ने पहले ही सफल हो चुकी request को retry किया।
- Recovery: latency, errors, queue depth और instance count के baseline पर लौटने तक का समय, और कुछ भी अटका न रहे।
आज़माएँ: API स्टेटस कोड सिम्युलेटर आज़माएँ: HTTP स्टेटस कोड लुकअप
Worked example: 20:00 बजे की flash sale
Staging का आकार production जैसा है: 4 instances, हर एक लगभग 100 requests प्रति सेकंड, एक ऐसे gateway के पीछे जो 10 सेकंड बाद timeout कर देता है। Autoscaler हर मिनट पिछले मिनट का average CPU देखता है; 70% से ऊपर होने पर वह 4 instances जोड़ता है, ज़्यादा से ज़्यादा 8 तक, जिन्हें तैयार होने में लगभग 2 मिनट लगते हैं, और 5 मिनट तक 30% से नीचे रहने पर उन्हें हटा देता है। हर instance के 20 database connections हैं; database 150 स्वीकार करता है। Tester ऊपर की script वाला profile checkout journey पर चलाता है, जो test orders बनाती है, 5,000 अलग-अलग test users के साथ, और मिनट-दर-मिनट नतीजों को phases के हिसाब से summarise करता है:
- Arrival rate: spike profileLoad tool क्या भेजता है, पाँच phases में।
संदर्भ रेखा:baseline के 4 instances जितना serve करते हैं: लगभग 400
- 1baseline 0–5 min100 प्रति सेकंड
- 2spike up 5–5.5 min30 सेकंड में 600 तक
- 3hold 5.5–10.5 min600 प्रति सेकंड
- 4drop 10.5–11 minवापस 100 पर
- 5recovery 11–21 minlatency, queues और scale-in पर नज़र
- Serving capacity: autoscalingservice में हर instance के लिए लगभग 100 प्रति सेकंड।
संदर्भ रेखा:spike का arrival rate: 600
database limit: 8 × 20 = 160 connections, अनुमति 150 की
- 14 instances 0–5 minbaseline
- 2scaling lag 5–8 minमिनट 6 पर trigger, मिनट 8 पर तैयार
- 38 instances, अधिकतम 8–16 min5 मिनट तक CPU 30% से नीचे रहने पर हटाए गए
- 4वापस 4 instances 16–21 min
Capacity nominal है, हर instance लगभग 100 requests प्रति सेकंड; 8 instances पर database connection limit ने service को वहाँ तक पहुँचने नहीं दिया।
- Scaling lag: spike 05:00 पर शुरू हुआ और नए instances ने 08:00 पर traffic serve करना शुरू किया। इस बीच लगभग 600 requests प्रति सेकंड आती रहीं जबकि capacity 400 थी: backlog तब तक बढ़ा जब तक requests gateway के 10 सेकंड के timeout तक नहीं पहुँच गईं, p95 10 s पर टिक गया और 06:00 से एक-तिहाई requests fail हुईं। Sale का समय पहले से पता है, इसलिए team उसके शुरू होने से पहले scale out कर सकती है।
- छिपी हुई limit: 8 × 20 = 160 connections, लेकिन database 150 ही स्वीकार करता है, इसलिए scale out करने से नई errors आईं। इसे इसी हिसाब के साथ defect के रूप में report करें।
- Load shedding नहीं: requests तुरंत
503औरRetry-Afterके साथ मना होने की बजाय gateway के 10 सेकंड के timeout तक रुकी रहीं। 600 आने और 400 serve होने पर एक-तिहाई requests किसी भी हाल में serve नहीं हो सकती थीं; उन्हें तुरंत मना करने से queue छोटी रहती और बाक़ी दो-तिहाई तेज़ रहतीं। - Recovery: नए instances आने के लगभग 30 सेकंड बाद backlog ख़त्म हो गया, और load घटते ही latency baseline पर लौट आई, लेकिन order-confirmation email की queue, जिसके workers scale नहीं होते, 9,000 messages तक पहुँची और drop के छह मिनट बाद, 17:00 पर ही ख़ाली हुई। पूछें कि यह देरी स्वीकार्य है या नहीं, और हर fix के बाद वही profile दोबारा चलाएँ।
Spike test, run 1 (staging sized like production)
time arrival instances p95 errors observation
00-05 100/s 4 220 ms 0% baseline
05-06 up to 600 4 10 s 5% CPU 100%, backlog builds, first 504 at 05:54
06:00 scale-out triggered: +4 instances
06-08 600/s 4 10 s 33% 504 from the gateway (10 s timeout)
08:00 4 new instances in service (maximum 8)
08-09 600/s 8 8.9 s 6% backlog drains in about 30 s
09-11 600 to 100 8 450 ms 5% DB: too many connections (160 > 150)
11-16 100/s 8 210 ms 0% API at baseline; email queue peaks at 9,000
16-21 100/s 4 230 ms 0% scale-in 16:00; email queue empty at 17:00आम गलतियाँ
- कई मिनट में ramp up करके उसे spike कहना: autoscaler धीमे ramp के साथ चल लेता है, इसलिए scaling lag कभी टेस्ट नहीं होता।
- Spike को virtual users की तय संख्या से चलाना, जिससे tool system के साथ धीमा हो जाता है और burst पूरा पहुँचता ही नहीं।
- Run को उसके कुल summary से आँकना: 20 मिनट के run में 5 मिनट का spike totals में ग़ायब हो जाता है। हर phase के नतीजे मिनट-दर-मिनट पढ़ें।
- Spike ख़त्म होते ही test रोक देना, जिससे recovery, queue drain और scale-in कभी दिखते ही नहीं।
- पिछले run से गर्म caches और अब भी scaled-out instances के साथ शुरू करना, जो वह cold start छिपा देता है जो असली users झेलेंगे।
- किसी shared environment या third-party API पर उसके owners को बताए बिना spike चलाना। समय operations के साथ तय करें, और सिर्फ़ उन्हीं systems को टेस्ट करें जो आपके हैं या जिन्हें टेस्ट करने की लिखित अनुमति आपके पास है।
QA का नज़रिया
Spike tests business calendar के हिसाब से चलते हैं। Product और marketing से आने वाली sales, launches, ticket releases और notification campaigns की जानकारी लें, और हर event को एक profile में बदलें: baseline, spike level, वह कितनी तेज़ी से आता है और कितनी देर रहता है। Run से पहले platform team के साथ pass criteria तय करें: पहले मिनटों में कितना error rate और latency चलेगी, अधिकतम scaling lag, queue drain time और recovery time।
Test तय समय पर operations की निगरानी में चलाएँ। Profile, शुरुआती हालत (instance count, cache की स्थिति, data volume), platform के logs से scaling events और हर मिनट के metrics दर्ज करें। हर finding को उस हिसाब के साथ report करें जो risk दिखाता है — "scaling lag 3 मिनट, अपेक्षित spike 5 मिनट" — और हर fix के बाद वही profile दोबारा चलाएँ।
अभ्यास
Ticket release के लिए spike test plan करें
एक concert के tickets 10:00 बजे बिक्री के लिए खुलते हैं। Booking API पर आम तौर पर 20 requests प्रति सेकंड आती हैं; organiser को पहले मिनट के अंदर 900 प्रति सेकंड की उम्मीद है, लगभग 10 मिनट तक, फिर 150 प्रति सेकंड।
Platform 3 instances पर चलता है, हर एक लगभग 150 requests प्रति सेकंड, और 8 तक scale हो सकता है; extra instances लगभग 10:03 से traffic serve करते हैं। हर तीन में से एक request booking है, जो एक message queue में जाती है जिसके workers 200 bookings प्रति सेकंड process करते हैं और scale नहीं होते।
- Spike profile को phases के रूप में लिखें, अवधि और target rates के साथ।
- Scaling से पहले की capacity निकालें, और 10:00 से 10:03 के बीच कितनी requests उससे ज़्यादा आती हैं।
- निकालें कि 10:03 से booking queue कितनी तेज़ी से बढ़ती है, 10:10 पर उसका आकार क्या है और उसे drain होने में कितना समय लगता है।
- लिखें कि आप क्या मापेंगे और run से पहले team के साथ कौन-से सवाल तय करने हैं।
मॉडल उत्तर दिखाएँ
Profile, arrival rate से चलाया गया: 5 मिनट तक 20 requests/s; लगभग 30 सेकंड में 900/s तक; 10 मिनट hold; 150/s तक drop; कम से कम 15 मिनट 150/s पर recovery, ताकि queue drain और scale-in दिखें।
Scaling से पहले capacity: 3 × 150 = 450/s। कमी: 900 − 450 = 450/s, लगभग 180 s तक, यानी करीब 81,000 requests जो समय पर serve नहीं हो सकतीं; test दिखाता है कि वे इंतज़ार करती हैं, timeout होती हैं या मना की जाती हैं। Spike के लिए 900 ÷ 150 = 6 instances चाहिए, जो 8 की अधिकतम सीमा के अंदर है।
Queue: 10:03 से पहले API ज़्यादा से ज़्यादा 450 ÷ 3 = 150 bookings/s आगे भेजती है, जिसे workers संभाल लेते हैं। 10:03 से API पूरे 900/s serve करती है, इसलिए bookings 300/s की दर से आती हैं और 200/s process होती हैं, और queue 100/s बढ़ती है: 420 s बाद लगभग 42,000 इंतज़ार में, और ज़्यादा अगर clients पहले मना हुई requests को retry करें। उसके बाद bookings 50/s आती हैं, इसलिए queue 150/s की दर से drain होती है: 42,000 ÷ 150 = 280 s, यानी लगभग 4 मिनट 40 सेकंड।
हर मिनट मापें: tool ने असल में कितना arrival rate बनाया, error rate और प्रकार, p95 और p99, instance count और scaling events, queue depth; बाद में baseline पर लौटने का समय, और यह कि कोई booking खोई या दोहराई नहीं गई।
सवाल: पहले 3 मिनट में requests मना करना स्वीकार्य है या नहीं, और किस रूप में — waiting room या Retry-After के साथ 503? क्या platform 10:00 से पहले scale out कर सकता है? Booking queue में रहते हुए customer क्या देखता है? App और website कैसे retry करते हैं? क्या database 6 instances के connections संभाल सकता है?
अक्सर पूछे जाने वाले सवाल
Spike test और stress test में क्या अंतर है?
Stress test load को अपेक्षित peak से आगे, आम तौर पर कदम-दर-कदम, बढ़ाता है ताकि limit मिले और दिखे कि system कैसे fail होता है। Spike test की पहचान इससे होती है कि load कितनी अचानक आता है; उसका peak उतना हो सकता है जितना scaled system संभाल ले। यह reaction टेस्ट करता है — scaling, queues, ठंडे caches — और उसके बाद की recovery।
क्या मैं production में spike test चला सकता हूँ?
सिर्फ़ एक planned exercise के रूप में, जिसे production चलाने वाले लोग approve करें, तय समय पर, निगरानी के साथ और तुरंत रोकने के तरीके के साथ, क्योंकि असली users भी उसी system पर हैं। ज़्यादातर teams इसे production जितने बड़े staging environment में चलाती हैं। जो system या third-party API आपका नहीं है और जिसे टेस्ट करने की लिखित अनुमति आपके पास नहीं है, उस पर कभी spike न चलाएँ।
Spike और recovery period कितने लंबे होने चाहिए?
Spike को असली event के अनुसार रखें: अगर campaign से लगभग पाँच मिनट का burst आता है, तो spike लगभग पाँच मिनट hold करें। Recovery period तब तक चलाएँ जब तक latency, error rate, queue depth और instance count अपने baseline values पर न लौट आएँ, जिसमें अक्सर spike से ज़्यादा समय लगता है।
संदर्भ
- Certified Tester Performance Testing (CT-PT)performance testing पर ISTQB का specialist पाठ्यक्रम: बुनियादी अवधारणाएँ, performance measurements, टेस्ट गतिविधियाँ व कार्य, और टूल।
- Load test types — Grafana k6 documentationआम load test प्रकारों की परिभाषाएँ — smoke, average-load, stress, soak, spike और breakpoint — और हर एक से क्या पता लगाना होता है।
- Site Reliability Engineering: How Google Runs Production Systemsसर्विस लेवल ऑब्जेक्टिव, एरर बजट, "चार गोल्डन सिग्नल" की निगरानी और ओवरलोड संभालना — लचीलेपन का परिचालन पक्ष।
- RFC 9110: HTTP SemanticsHTTP मेथड, हेडर फ़ील्ड, स्टेटस कोड और कंटेंट निगोशिएशन के अर्थ, वायर वर्ज़न से स्वतंत्र।
Mutqan tools से अभ्यास करें
वास्तविक जैसे वितरण वाले परफ़ॉर्मेंस टेस्ट इनपुट बनाएँ: think time, रिक्वेस्ट मिक्स, payload साइज़ और ramp प्रोफ़ाइल।
किसी लक्षित endpoint के लिए सुरक्षित डिफ़ॉल्ट वाली concurrency टेस्ट स्क्रिप्ट बनाएँ (k6, JMeter JMX, Locust, Artillery, Node.js)।
k6, JMeter, Gatling और Locust लोड टेस्ट के लिए बड़े पैरामीटर डेटासेट (users, token, id, payload) बनाएँ।
ऐसा सार्वजनिक endpoint पाएँ जो कोई भी HTTP स्टेटस कोड लौटाए, वैकल्पिक देरी और कस्टम JSON बॉडी के साथ, ताकि क्लाइंट की error हैंडलिंग टेस्ट हो सके।
किसी भी HTTP स्टेटस कोड का अर्थ, RFC संदर्भ और उसे कब इस्तेमाल करना है — सब एक जगह देखें।
और गहराई से
इस topic में आपकी प्रगति
प्रगति ट्रैक करने के लिए साइन इन करें
Topics पूर्ण चिह्नित करें, जहाँ छोड़ा था वहीं से जारी रखें और specialisation परीक्षाएँ खोलें।