परफ़ॉर्मेंस टेस्टिंग क्या है?
परफ़ॉर्मेंस टेस्टिंग यह जाँचती है कि कोई सिस्टम किसी खास वर्कलोड में कैसा व्यवहार करता है: वह कितनी तेज़ी से जवाब देता है, कितनी रिक्वेस्ट संभाल सकता है, समय के साथ स्थिर रहता है या नहीं, और सीमा से आगे धकेलने पर क्या होता है। फ़ंक्शनल टेस्ट "क्या यह काम करता है?" का जवाब देते हैं; परफ़ॉर्मेंस टेस्ट "क्या यह लॉन्च के दिन सुबह 9 बजे दस हज़ार यूज़र के साथ भी काम करता है?" का।
यह गाइड परफ़ॉर्मेंस टेस्ट के प्रकार और हर एक कब इस्तेमाल होता है, कौन-सी मेट्रिक्स मापें और उन्हें कैसे पढ़ें, API या वेब एप्लिकेशन के पहले टेस्ट का प्रैक्टिकल प्लान, और लोड चलाने वाले टूल्स समझाती है।
परफ़ॉर्मेंस टेस्ट के प्रकार
- लोड टेस्टिंग — अपेक्षित, रियलिस्टिक ट्रैफ़िक (औसत और पीक) यह पुष्टि करने के लिए कि सिस्टम सामान्य हालात में रिस्पॉन्स-टाइम और एरर लक्ष्य पूरे करता है।
- स्ट्रेस टेस्टिंग — अपेक्षित पीक से आगे ट्रैफ़िक बढ़ाना जब तक कुछ टूट न जाए, ताकि सीमा पता चले और दिखे कि फ़ेलियर शालीन है (धीमा, 503) या विनाशकारी (क्रैश, डेटा करप्शन)।
- स्पाइक टेस्टिंग — कम से बहुत ज़्यादा ट्रैफ़िक की अचानक छलाँग, जैसे मार्केटिंग कैंपेन या फ़्लैश सेल में, ऑटोस्केलिंग और क्यूइंग जाँचने के लिए।
- सोक (एंड्योरेंस) टेस्टिंग — घंटों या दिनों तक मध्यम लोड, मेमोरी लीक, कनेक्शन पूल ख़त्म होने और डिस्क बढ़ने जैसी चीज़ें पकड़ने के लिए जो छोटे टेस्ट कभी नहीं दिखाते।
- स्केलेबिलिटी टेस्टिंग — लोड चरणों में बढ़ाकर यह सीखना कि रिसोर्स जोड़ने पर थ्रूपुट और लेटेंसी कैसे बदलती है।
- बेंचमार्किंग — दो वर्ज़न या दो इम्प्लीमेंटेशन की तुलना के लिए एक एंडपॉइंट का तेज़, दोहराने योग्य माप।
आज़माएँ: HTTP रिक्वेस्ट बेंचमार्क आज़माएँ: API परफ़ॉर्मेंस कंपेरेटर
अहम मेट्रिक्स
- रिस्पॉन्स टाइम — हर रिक्वेस्ट पर मापा जाता है। औसत नहीं, परसेंटाइल रिपोर्ट करें: p50 (मीडियन), p95 और p99 बताते हैं ज़्यादातर यूज़र और सबसे बदक़िस्मत यूज़र क्या अनुभव करते हैं। औसत धीमी पूँछ छिपा देता है।
- थ्रूपुट — प्रति सेकंड रिक्वेस्ट (या ट्रांज़ैक्शन) जो सिस्टम बनाए रखता है।
- एरर रेट — फ़ेल होने वाली रिक्वेस्ट का प्रतिशत (5xx, टाइमआउट, कनेक्शन एरर)। लक्ष्य लोड पर यह शून्य के पास रहना चाहिए।
- कॉन्करेंसी — एक साथ कितने वर्चुअल यूज़र या खुले कनेक्शन सक्रिय हैं।
- रिसोर्स उपयोग — सर्वर साइड पर CPU, मेमोरी, डेटाबेस कनेक्शन, क्यू डेप्थ, लोड टाइमलाइन से जोड़कर।
- Apdex या SLO अनुपालन — तय बजट के अंदर रिक्वेस्ट का हिस्सा (जैसे 95% 300 ms से कम)।
आज़माएँ: रिस्पॉन्स टाइम एनालाइज़र आज़माएँ: रिस्पॉन्स साइज़ एनालाइज़र
पहला परफ़ॉर्मेंस टेस्ट प्लान करना
- लक्ष्य को नंबर के रूप में तय करें: "500 कॉन्करेंट यूज़र के साथ checkout p95 पर 800 ms से कम में पूरा हो और 0.1% से कम एरर हों"।
- हर पेज के बजाय अहम जर्नी चुनें — लॉगिन, सर्च, कार्ट में जोड़ना, checkout, टॉप तीन API एंडपॉइंट।
- रियलिस्टिक ट्रैफ़िक मॉडल करें: जर्नी का मिक्स, एक्शन के बीच थिंक टाइम, रैम्प-अप और स्टेडी स्टेट। प्रोडक्शन एनालिटिक्स हो तो इस्तेमाल करें।
- बड़े पैमाने पर टेस्ट डेटा तैयार करें: हज़ारों अलग यूज़र, प्रोडक्ट और पेलोड ताकि कैश और यूनिक कंस्ट्रेंट प्रोडक्शन की तरह व्यवहार करें।
- ऐसे एनवायरनमेंट में चलाएँ जो साइज़ में प्रोडक्शन जैसा हो, या नतीजों को सोच-समझकर स्केल करें। लैपटॉप-साइज़ डेटाबेस प्रोडक्शन वाले के बारे में कुछ नहीं बताएगा।
- पहले एक यूज़र से बेसलाइन बनाएँ, फिर रैम्प करें। हर बाद के रन की बेसलाइन से तुलना करें।
- रन के दौरान सर्वर साइड मॉनिटर करें; अकेले क्लाइंट-साइड नंबर नहीं बता सकते कि यह धीमा क्यों हुआ।
आज़माएँ: लोड टेस्ट डेटा जनरेटर आज़माएँ: Concurrent रिक्वेस्ट टेस्ट जनरेटर
टूल्स: JMeter, k6, Gatling और ब्राउज़र टूल्स
Apache JMeter GUI, रिकॉर्डर और CSV डेटा सेट वाला पुराना ओपन-सोर्स विकल्प है; k6 स्क्रिप्ट-आधारित (JavaScript), हल्का और CI-फ़्रेंडली है; Gatling Scala/Java-आधारित है, बेहतरीन रिपोर्ट के साथ; Locust Python-आधारित है। क्लाउड सर्विसेज़ (BlazeMeter, Grafana Cloud k6, Azure Load Testing) वही स्क्रिप्ट कई रीजन से चलाती हैं।
ब्राउज़र प्रोडक्शन-स्केल लोड नहीं बना सकता, लेकिन ब्राउज़र टूल्स लोड टेस्ट के आसपास के स्टेप के लिए आदर्श हैं: एक एंडपॉइंट के रिस्पॉन्स टाइम डिस्ट्रीब्यूशन को मापना, दो एंडपॉइंट की तुलना, पेलोड साइज़ और कम्प्रेशन जाँचना, और रनर के लिए CSV और JSON डेटा फ़ाइलें बनाना।
आज़माएँ: JMeter टेस्ट डेटा जनरेटर आज़माएँ: JMeter CSV जनरेटर आज़माएँ: HTTP रिक्वेस्ट बेंचमार्क
नतीजे पढ़ना
- थ्रूपुट के सपाट होते हुए लेटेंसी बढ़ना मतलब बॉटलनेक आ गया — CPU, डेटाबेस, कनेक्शन पूल या डाउनस्ट्रीम API।
- लेटेंसी से पहले एरर रेट का बढ़ना अक्सर सुस्ती नहीं, कोई सीमा (max connections, रेट लिमिट) होती है।
- p99 का p95 से बहुत ऊपर होना गार्बेज कलेक्शन पॉज़, लॉक कंटेंशन या कुछ रिक्वेस्ट पर पड़ने वाली धीमी डिपेंडेंसी की ओर इशारा करता है।
- सोक टेस्ट में धीमी गिरावट लीक है: मेमोरी, फ़ाइल हैंडल या कनेक्शन।
- दूसरे रन में रिप्रोड्यूस न होने वाला नतीजा शोर है; कोड ट्यून करने से पहले एनवायरनमेंट ठीक करें।
आज़माएँ: API परफ़ॉर्मेंस कंपेरेटर आज़माएँ: कैश हेडर एनालाइज़र
आम गलतियाँ
- एक यूज़र id या एक प्रोडक्ट से टेस्ट करना — सब कुछ कैश से आता है और नंबर कल्पना होते हैं।
- तुरंत फ़ुल लोड पर रैम्प करना, फिर ऐसे स्पाइक के लिए सिस्टम को दोष देना जिसके लिए वह बना ही नहीं था।
- औसत रिपोर्ट करना। हमेशा एरर रेट के साथ p95 और p99 रिपोर्ट करें।
- लोड जनरेटर को उसी मशीन पर चलाना जिस पर टेस्ट होने वाला सिस्टम है।
- पेलोड साइज़ नज़रअंदाज़ करना: 2 MB का JSON रिस्पॉन्स धीमा है चाहे सर्वर कितना भी तेज़ हो।
- लॉन्च से पहले एक बार टेस्ट करना और फिर कभी नहीं। परफ़ॉर्मेंस एक-एक कमिट में गिरती है।
आज़माएँ: रिस्पॉन्स साइज़ एनालाइज़र आज़माएँ: लोड टेस्ट डेटा जनरेटर
अक्सर पूछे जाने वाले सवाल
लोड टेस्टिंग और स्ट्रेस टेस्टिंग में क्या फ़र्क़ है?
लोड टेस्टिंग अपेक्षित ट्रैफ़िक लगाकर पुष्टि करती है कि लक्ष्य पूरे हुए; स्ट्रेस टेस्टिंग अपेक्षित पीक से आगे ट्रैफ़िक बढ़ाती रहती है ताकि ब्रेकिंग पॉइंट मिले और दिखे कि सिस्टम कैसे फ़ेल होता है।
अच्छा API रिस्पॉन्स टाइम क्या है?
इस्तेमाल पर निर्भर है, लेकिन आम बजट हैं: कैश्ड रीड के लिए 100 ms से कम, सामान्य API कॉल के लिए 300 ms से कम और भारी ऑपरेशन के लिए 1 s से कम — औसत नहीं, p95 पर मापा हुआ।
औसत रिस्पॉन्स टाइम की जगह p95 क्यों?
औसत धीमी पूँछ छिपाता है। p95 कहता है कि 95% रिक्वेस्ट कम से कम इतनी तेज़ थीं, जो यूज़र नोटिस करते हैं; p99 सबसे ख़राब रियलिस्टिक केस दिखाता है।
कितने वर्चुअल यूज़र चाहिए?
असली ट्रैफ़िक से निकालें: पीक रिक्वेस्ट प्रति सेकंड को औसत रिक्वेस्ट अवधि से गुणा करें, यही वह कॉन्करेंसी है जो बनाए रखनी है। ग्रोथ के लिए 20–50% हेडरूम जोड़ें।
क्या ब्राउज़र से परफ़ॉर्मेंस टेस्ट कर सकते हैं?
आप अलग-अलग एंडपॉइंट माप और बेंचमार्क कर सकते हैं और दो की तुलना कर सकते हैं, जो डेवलपमेंट के दौरान उपयोगी है। प्रोडक्शन-स्केल लोड के लिए अलग मशीनों पर JMeter, k6 या Gatling जैसा डेडिकेटेड टूल चाहिए।
JMeter या k6, कौन बेहतर है?
JMeter में GUI, रिकॉर्डर और सबसे बड़ा इकोसिस्टम है; k6 कोड-फ़र्स्ट, हल्का और CI से स्वाभाविक रूप से जुड़ता है। JavaScript में सहज टीमें अक्सर k6 चुनती हैं; मौजूदा JMeter प्लान वाली टीमें JMeter रखती हैं।
इस गाइड में बताए गए टूल्स
किसी endpoint का रिस्पॉन्स टाइम कई सैंपल पर मापें: न्यूनतम, अधिकतम, औसत, माध्यिका और p95।
किसी सार्वजनिक endpoint पर छोटा, सुरक्षित बेंचमार्क चलाएँ (सीमित रिक्वेस्ट व concurrency) और throughput तथा latency percentile पाएँ।
दो endpoint के रिस्पॉन्स टाइम और साइज़ की आमने-सामने तुलना करें (जैसे v1 बनाम v2, staging बनाम production)।
रिस्पॉन्स साइज़ का विश्लेषण: कच्चे बनाम compressed बाइट, हेडर का साइज़, JSON ढाँचे का भार और सबसे बड़े फ़ील्ड।
k6, JMeter, Gatling और Locust लोड टेस्ट के लिए बड़े पैरामीटर डेटासेट (users, token, id, payload) बनाएँ।
फ़ील्ड स्कीमा से JMeter के लिए तैयार टेस्ट डेटा बनाएँ (CSV Data Set Config फ़ाइलें और User Defined Variables)।
JMeter CSV Data Set Config के लिए सही quoting, delimiter और encoding वाली CSV फ़ाइलें बनाएँ।
किसी लक्षित endpoint के लिए सुरक्षित डिफ़ॉल्ट वाली concurrency टेस्ट स्क्रिप्ट बनाएँ (k6, JMeter JMX, Locust, Artillery, Node.js)।
Cache-Control, Expires, ETag, Last-Modified, Vary और Age हेडर जाँचें और समझें कि ब्राउज़र तथा CDN रिस्पॉन्स को कैसे कैश करेंगे।