data driven parameterized testing with spock framework
Spock फ्रेमवर्क के साथ डेटा-संचालित या Parameterized टेस्ट लिखने के तरीकों का अन्वेषण करें:
इस में फ्री स्पोक ट्रेनिंग ट्यूटोरियल सीरीज़ , हम सब के बारे में पता लगाया स्पॉक में यूनिट परीक्षण और हमारे पिछले ट्यूटोरियल में परीक्षण जुड़नार, दावे और रिपोर्टिंग।
इस ट्यूटोरियल में, हम यह समझने की कोशिश करेंगे कि डेटा-चालित परीक्षण को प्राप्त करने के लिए आप क्या पैरामीटराइज्ड परीक्षण कर रहे हैं और आप Spock के इन-बिल्ट फीचर का लाभ कैसे उठा सकते हैं।
चलो शुरू करते हैं!!
वीडियो ट्यूटोरियल देखें
आप क्या सीखेंगे:
- Parameterized टेस्ट क्या हैं?
- Spock के साथ Parameterized टेस्ट लिखना
- 'जहाँ' ब्लॉक का जीवनचक्र
- सुझाव और युक्ति
- निष्कर्ष
- अनुशंसित पाठ
Parameterized टेस्ट क्या हैं?
स्वचालन / इकाई परीक्षणों के साथ काम कर चुके किसी भी व्यक्ति के लिए, डेटा-चालित परीक्षण एक नया शब्द नहीं है।
पैरामीटर किए गए परीक्षण कुछ भी नहीं हैं, लेकिन वे किसी भी तरह के परीक्षण हैं जो एक ही निष्पादन तर्क को साझा करते हैं और केवल कुछ मामलों में इनपुट डेटा और परिणाम में भिन्न होते हैं।
उदाहरण: मान लें कि आपके पास एक कैलकुलेटर एप्लिकेशन है, कार्यक्षमता का परीक्षण करने के लिए पूरी तरह से आप अलग-अलग इनपुट सेट के खिलाफ अपने परीक्षण चलाना चाहते हैं।
उदाहरण: नकारात्मक मान, आंशिक संख्या, सामान्य पूर्णांक, अधिकतम अनुमत सीमा के समीप पूर्णांक, आदि। आपके पास कोई भी इनपुट मान नहीं है, आप उसी निष्पादन तर्क को चलाना चाहते हैं।
पैरामीटराइज्ड टेस्ट लिखने का एक और अच्छा कारण यह है कि यह केवल एक खुश रास्ते का परीक्षण नहीं करता है, बल्कि यह त्रुटि पथ या नकारात्मक परिदृश्यों का भी परीक्षण करता है।
उदाहरण: मान लीजिए कि एक एप्लिकेशन है जो रिटर्न करता है कि क्या किसी दिए गए फ़ाइल का एक्सटेंशन वैध है या नहीं। डेटा-चालित परीक्षण डेवलपर को समर्थित फ़ाइल एक्सटेंशन और किसी भी त्रुटि परिदृश्य या नकारात्मक इनपुट परीक्षण के लिए परीक्षण निष्पादित करने में सक्षम कर सकते हैं।
अब परंपरागत रूप से, आप कई इनपुट मानों के लिए परीक्षणों पर लिखने या कॉपी करने के बारे में सोच सकते हैं लेकिन, इस तरह के परीक्षण निष्पादन को प्राप्त करने का सही या स्मार्ट तरीका नहीं है। इसके अलावा, जैसे-जैसे आपके ऐप में परीक्षणों की संख्या बढ़ने लगती है, इन परीक्षणों को बनाए रखना मुश्किल हो जाएगा।
Spock के साथ Parameterized टेस्ट लिखना
जहां: ब्लॉक
जहां एक स्पॉक टेस्ट में ब्लॉक होता है, वह ब्लॉक होता है जो कि पैरामीटराइज्ड टेस्ट के लिए डेटा रखता है। यह वैकल्पिक रूप से इनपुट और अपेक्षित आउटपुट मान दोनों को शामिल कर सकता है। इस ब्लॉक के बारे में ध्यान देने वाली एक महत्वपूर्ण बात यह है कि स्पॉक टेस्ट में यह आखिरी ब्लॉक होना चाहिए।
यह कहते हुए कि, इसे दिए गए अन्य सभी ब्लॉकों के साथ जोड़ा जा सकता है, जब और फिर अंतिम ब्लॉक होना चाहिए।
आइए इसे बेहतर समझने के लिए एक उदाहरण देखें
हम एक कैलकुलेटर एप्लिकेशन का उपयोग करेंगे जो 2 इनपुट पैरामीटर लेता है और आपूर्ति किए गए इनपुट का योग देता है। हम कई इनपुट और अपेक्षित ऑउटपुट मानों की आपूर्ति के लिए एक पैरामीटर परीक्षण लिख रहे हैं।
def 'sample parameterized test'() input2
उपरोक्त कोड नमूने में आप निम्नलिखित देख सकते हैं:
- 'कहाँ' ब्लॉक जिसमें परीक्षण के लिए डेटा चलाने के लिए होता है।
- 'कहाँ' ब्लॉक परीक्षण का अंतिम ब्लॉक है।
- 'जहाँ' को अन्य ब्लॉकों के साथ मिलाया जाता है, अर्थात्, जब और फिर दिया जाता है।
- डेटा प्रतिनिधित्व एक विशेष प्रारूप है जिसे डेटा टेबल कहा जाता है जिसे हम इस ट्यूटोरियल के आगामी अनुभागों में विस्तार से देखेंगे।
- डेटा की हेडर पंक्ति अनिवार्य रूप से गुण / इनपुट चर हैं जो सीधे परीक्षण में उपयोग किए जा सकते हैं। जैसे 'जब' ब्लॉक में उस कथन का संदर्भ लें जहां हमने सीधे उपयोग किया है इनपुट 1 तथा इनपुट 2 स्पष्ट रूप से परिभाषित किए बिना इनपुट मापदंडों के रूप में।
डेटाटैब का उपयोग करना
आइए अब डेटा तालिकाओं को समझने की कोशिश करें। डेटा-टेबल की प्रत्येक पंक्ति एक व्यक्तिगत परिदृश्य (परीक्षण निष्पादन) के लिए डेटा का प्रतिनिधित्व करती है।
कन्वेंशन यानी इनपुट मानों को एक एकल पाइप () | ’) से पहले रखा जाता है, जबकि आउटपुट मान डबल पाइप (’ || ’) से पहले होते हैं। इसका कोई तार्किक महत्व नहीं है, लेकिन यह सम्मेलन और पठनीयता में सुधार करता है। इस प्रकार, नीचे दिए गए दोनों उदाहरण सही हैं।
input1 |input2 |expectedResult 10 |15 |25 -4 |6 |2 input1 |input2 || expectedResult 10 |15 || 25 -4 |6 || 2
शीर्ष पंक्ति, जैसा कि ऊपर दिखाया गया है, परीक्षण के लिए डेटा के रूप में आपूर्ति किए गए प्रत्येक पैरामीटर के लिए एक नाम है। यहां यह ध्यान रखना महत्वपूर्ण है कि ये पैरामीटर नाम परीक्षण में किसी भी मौजूदा स्थानीय / वैश्विक चर के साथ टकराव नहीं होना चाहिए, अन्यथा वहां होगा संकलन-समय त्रुटियाँ चर नामों को हल करने के लिए।
डेटा-टेबल का उपयोग करते समय ध्यान देने योग्य एक महत्वपूर्ण बिंदु यह है कि न्यूनतम 2 कॉलम की आवश्यकता होती है। यदि आपको बस एक कॉलम की आवश्यकता है, तो मानों के साथ एक खाली कॉलम जैसा कि अंडरस्कोर वर्ण नीचे की तरह एक वर्कअराउंड है।
input1 ||_ 10 ||_ -4 ||_
इस प्रारूप का लाभ सादगी, पठनीयता और व्यापकता है। एक नया डेटा इनपुट जोड़ना डेटा मानों के साथ एक नई पंक्ति जोड़ने जितना आसान है।
यहां ध्यान देने वाली एक और बात यह है कि डेटा टेबल का उपयोग किसी भी प्रकार के चर, वर्ग, ऑब्जेक्ट, एनम आदि को रखने के लिए किया जा सकता है, जो इसे और भी अधिक शक्तिशाली बनाते हैं। चूंकि groovy एक वैकल्पिक रूप से टाइप की जाने वाली भाषा है, यदि कोई स्पष्ट प्रकार निर्दिष्ट नहीं किया गया है, तो डेटा तालिका में चर आपूर्ति किए गए डेटा के प्रकार के आधार पर होते हैं।
दूसरे को देखते हैं उदाहरण स्ट्रिंग में तत्वों की गिनती के रूप में इनपुट और आउटपुट के रूप में स्ट्रिंग की सूची के साथ डेटा टेबल का उपयोग करना।
def 'sample parameterized test with list data type'() when: def actualCount = input1.size() then: actualCount == expectedCount where: input1
उपरोक्त उदाहरण में, आप देख सकते हैं कि हमने इनपुट को स्ट्रिंग्स की एक सरणी सूची के रूप में प्रदान किया है और आउटपुट इस सरणी सूची का आकार है। इस प्रकार, यह विभिन्न प्रकार के इनपुट डेटा के लिए बहुत अधिक लचीलापन देता है।
आप बस किसी भी अभिव्यक्ति का उल्लेख कर सकते हैं जो संबंधित इनपुट प्रकार का डेटा लौटाता है और सीधे डेटा तालिकाओं में भी उपयोग करता है।
'जहाँ' ब्लॉक का जीवनचक्र
डेटा टेबल के रूप में ब्लॉक और डेटा नमूने वाले परीक्षणों के लिए, डेटा की प्रत्येक पंक्ति परीक्षण पद्धति के एक निष्पादन का प्रतिनिधित्व करती है।
उदाहरण के लिए, यदि डेटा की 5 पंक्तियाँ हैं और परीक्षण में 'दिए गए' और 'जब' ब्लॉक हैं, तो ऐसे डेटा-पंक्ति के लिए परीक्षण ब्लॉक एक बार निष्पादित हो जाएंगे। तो, कुल मिलाकर, परीक्षण पद्धति के कुल 5 निष्पादन होंगे।
सुझाव और युक्ति
आइए इन डेटा-तालिकाओं के साथ काम करते हुए पैरामीटराइज्ड-टेस्ट के लिए कुछ टिप्स और ट्रिक्स देखें।
# 1) अलग-अलग पंक्ति निष्पादन के परिणामों को अलग-अलग प्रदर्शित करना। जैसा कि हमने जीवनचक्र अनुभाग में देखा, डेटा की प्रत्येक पंक्ति के लिए परीक्षण कोड का एक निष्पादन है। इन पंक्तियों या परिणामों को प्रत्येक पंक्ति के लिए अलग से प्रदर्शित करने के लिए '@Unroll' एनोटेशन का उपयोग ऐसे परीक्षणों के लिए किया जा सकता है।
उदाहरण के साथ इसे समझने का प्रयास करें:
हम उसी कैलकुलेटर एप्लिकेशन का उपयोग करेंगे जिसमें परीक्षण के तहत विधि में आपूर्ति किए जा रहे इनपुट डेटा के 3 सेट हैं।
Android के लिए सबसे अच्छा मुफ्त संगीत डाउनलोडर
def 'sample parameterized test'() -20
'@Unroll' एनोटेशन के बिना, आइए देखें कि परिणाम टर्मिनल में कैसे दिखता है (साथ ही html आधारित रिपोर्ट)। इस तरह के आउटपुट के साथ, यह पता लगाना मुश्किल हो जाता है कि इनपुट के किस सेट के कारण परीक्षण विफल हो गया।
अब देखते हैं कि टेस्ट विधि (जिसमें डेटा-टेबल के रूप में डेटा इनपुट है) में '@Unroll' एनोटेशन जोड़ने के बाद प्रत्येक पंक्ति के लिए परीक्षण आउटपुट अलग से रिपोर्ट किया गया है।
#दो) अब, हम समझते हैं कि इन डेटा-चालित परीक्षणों के लिए सार्थक जानकारी कैसे जोड़नी चाहिए (कुछ स्क्रीनशॉट में उपर्युक्त स्क्रीनशॉट की तरह ऑटो इंडेक्स किए गए इंडेक्स के बजाय)।
हम इनपुट और आउटपुट गुणों (डेटा-टेबल के अनुसार) के लिए प्लेसहोल्डर्स का उपयोग कर सकते हैं और फिर हम डेटा-टेबल्स के डेटा के साथ परीक्षण नामों में आबादी वाले मूल्यों को देख सकते हैं।
आइए एक ही उदाहरण का उपयोग करें और डेटा तालिकाओं में उल्लिखित इनपुट और अपेक्षित आउटपुट से डेटा प्राप्त करने के लिए परीक्षण नाम को अपडेट करें:
@Unroll def 'result of adding #input1 & #input2 should be #expectedResult'() given: def app = new CalculatorApp() when: def resultSum = app.add(input1, input1) then: resultSum == 2 * input1 where: input1
अब देखते हैं कि टर्मिनल और HTML आधारित रिपोर्ट में आउटपुट कैसे दिखता है:
इसलिए, जैसा कि आप देख सकते हैं कि इनपुट और आउटपुट से डेटा अब परीक्षण नामों के साथ दिखा रहा है जब वे निष्पादित हो रहे हैं। इस तरह यह समस्या निवारण और डिबगिंग को बहुत आसान बना देता है क्योंकि यह स्पष्ट रूप से इंगित करता है कि परीक्षण विफल होने या दुर्व्यवहार का कारण बना।
निष्कर्ष
इस ट्यूटोरियल में, हमने स्पॉक फ्रेमवर्क के साथ पैरामीटराइज्ड टेस्ट लिखने के बारे में सीखा। हमने डेटा टेबल की विभिन्न विशेषताओं और उनका उपयोग कैसे किया जा सकता है, पर भी चर्चा की।
स्पॉक के साथ मोक्स और स्टब्स का उपयोग करने के तरीके जानने के लिए हमारे आगामी ट्यूटोरियल को देखें !!
PREV ट्यूटोरियल | अगले ट्यूटोरियल
अनुशंसित पाठ
- स्पॉक फ्रेमवर्क के साथ यूनिट टेस्ट लिखना
- उत्तर के साथ स्पॉक साक्षात्कार प्रश्न (सर्वाधिक लोकप्रिय)
- सेलेनियम के साथ एकीकरण और कार्यात्मक परीक्षण के लिए स्पॉक
- मॉकिंग और स्टबिंग (वीडियो ट्यूटोरियल के साथ उदाहरण)
- स्पॉक ट्यूटोरियल: स्पॉक एंड ग्रूवी के साथ परीक्षण
- अपाचे POI का उपयोग कर सेलेनियम वेबड्राइवर में डेटा ड्रिवेन फ्रेमवर्क
- TestComplete टूल का उपयोग करके डेटा चालित परीक्षण कैसे करें
- डेटा चालित परीक्षण कार्य (QTP और सेलेनियम के उदाहरण)