UFT ट्यूटोरियल: एक्शन, फंक्शन लाइब्रेरी, क्रैकिंग द कोड

उत्पाद की गुणवत्ता को सुरक्षित करने के लिए परीक्षण अब सॉफ्टवेयर विकास जीवन चक्र का एक महत्वपूर्ण चरण है। साथ ही, परीक्षण न किए गए उत्पाद के उपयोग से दोषपूर्ण कोडिंग के कारण व्यावसायिक हानि हो सकती है।

यहां प्रयासों और समय को कम करने के लिए परीक्षण चक्र में स्वचालन एक आवश्यक भूमिका निभा रहा है। परीक्षण स्वचालन के लिए कई उपकरण उपलब्ध हैं। लेकिन, यदि हम व्यापक अनुप्रयोग कवरेज पर विचार करें, तो परीक्षण स्वचालन के लिए यूनिफाइड फंक्शनल टेस्टिंग (UFT) टूल बहुत लोकप्रिय है। 

इस विषय में, हम UFT क्रियाओं, क्रियाओं के साथ काम करने के लिए कदम, UFT फ़ंक्शन लाइब्रेरी और लाइब्रेरी निर्माण चरणों के बारे में जानने जा रहे हैं।

यूएफटी ट्यूटोरियल - सामग्री की तालिका

UFT ट्यूटोरियल # 1: यूएफटी अवलोकन

यूएफटी ट्यूटोरियल 2 #: यूएफटी सेटअप - डाउनलोड, इंस्टॉल, लाइसेंस कॉन्फ़िगरेशन और एएलएम कनेक्शन

यूएफटी ट्यूटोरियल 3 #: UFT ऑब्जेक्ट रिपोजिटरी

यूएफटी ट्यूटोरियल 4 #: UFT क्रियाएँ और समारोह पुस्तकालय 

यूएफटी ट्यूटोरियल 5 #: यूएफटी परिमाणीकरण 

यूएफटी ट्यूटोरियल 6 #: यूएफटी में वीबी स्क्रिप्टिंग

यूएफटी ट्यूटोरियल 7 #: UFT में टेस्ट केस बनाने के लिए स्टेप गाइड बाई स्टेप

यूएफटी ट्यूटोरियल 8 #: UFT में अपवाद हैंडलिंग

यूएफटी ट्यूटोरियल 9 #: चेकप्वाइंट और डिक्शनरी ऑब्जेक्ट के साथ UFT में रिकॉर्डिंग 

यूएफटी ट्यूटोरियल 10 #: UFT साक्षात्कार प्रश्न और उत्तर 

UFT क्रियाएँ और UFT फ़ंक्शन लाइब्रेरी

UFT क्रियाएँ:

UFT एक्शन घटक को स्क्रिप्ट लिखने के लिए एक कंटेनर के रूप में काम किया जाता है। यूएफटी क्रियाएं हमें पूरे स्वचालित कार्यात्मकताओं को छोटे मॉड्यूल में तोड़ने की अनुमति देती हैं। किसी भी स्वचालित परीक्षण मामलों में डिफ़ॉल्ट रूप से कम से कम एक कार्रवाई होनी चाहिए। लेकिन, हम परीक्षण डिज़ाइन के आधार पर एक से अधिक क्रियाओं का उपयोग कर सकते हैं।

एक कार्रवाई के विभिन्न भागों: 

यूएफटी कार्यों में उपलब्ध विभिन्न वर्गों का अवलोकन नीचे समझाया गया है -

स्क्रिप्टिंग क्षेत्र - इस खंड में वास्तविक परीक्षण स्क्रिप्ट हैं।

स्थानीय वस्तु भंडार - परीक्षण वस्तुओं की तकनीकी जानकारी यहाँ रखी गई है।

स्थानीय डेटाटेबल - हम परीक्षण डेटा को यहां संग्रहीत कर सकते हैं जिसका उपयोग परीक्षण स्क्रिप्ट में किया जाएगा। यह एक्सेल शीट के समान है।

गुण - इस खंड के माध्यम से, हम परीक्षण डेटा को इनपुट के रूप में पास कर सकते हैं और आउटपुट पढ़ सकते हैं।

UFT क्रियाओं का वर्गीकरण: 

UFT क्रियाओं को तीन प्रकारों में वर्गीकृत किया जा सकता है -

गैर-पुन: प्रयोज्य कार्य: इस प्रकार की क्रियाओं को परीक्षण स्क्रिप्ट के लिए निजी कार्रवाई के रूप में माना जाता है। इस प्रकार इसे बाहर की ओर से संदर्भित नहीं किया जा सकता है।

पुन: प्रयोज्य कार्य:  पुन: प्रयोज्य कार्यों को एक साझा कार्रवाई के रूप में माना जाता है जिसे बाहर से संदर्भित किया जा सकता है। इसका उपयोग कई परीक्षण मामलों के साथ स्वचालित सामान्य कार्यात्मकताओं को साझा करने के लिए किया जाता है। कार्रवाई के निर्माण के दौरान, पुन: प्रयोज्य चेकबॉक्स को पुन: प्रयोज्य घटक के रूप में बनाने के लिए जाँच की जानी चाहिए। बाहरी स्थानों से पुन: प्रयोज्य कार्यों का उल्लेख करते हुए दो विकल्प उपलब्ध हैं। संपूर्ण क्रिया को कॉपी करने के लिए कार्रवाई को लिंक करने के लिए विकल्प "कॉल टू ए एक्ज़िस्टेंट एक्शन" या "कॉल ऑफ़ कॉपी एक्शन" हैं। प्राथमिक उद्देश्य परीक्षण मामलों के बेहतर रखरखाव के लिए अवधारणा स्क्रिप्ट पुन: प्रयोज्य को बढ़ाना है।

बाहरी कार्य: जब किसी क्रिया को किसी भिन्न क्रिया से पुकारा जाता है, तो बाह्य क्रिया कहलाती है।

पुन: प्रयोज्य और गैर-पुन: प्रयोज्य UFT क्रियाएँ - अंतर: 

गैर-पुन: प्रयोज्य कार्रवाई का दायरा एक ही परीक्षण स्क्रिप्ट के भीतर है, लेकिन पुन: प्रयोज्य कार्यों को बाहरी परीक्षण मामलों से एक्सेस किया जा सकता है।

गैर-पुन: प्रयोज्य क्रिया का उपयोग कार्यात्मक परीक्षण मामले के तर्क बनाने के लिए किया जाता है, लेकिन पुन: प्रयोज्य कार्यों का उपयोग पुन: प्रयोज्य घटकों को बनाने के लिए किया जाता है।

कार्रवाई पैरामीटर: 

एक्शन पैरामीटर विभिन्न इनपुट-आउटपुट डेटा पैरामीटर को परिभाषित करता है। इनपुट पैरामीटर का उपयोग एक्शन को कॉल करते समय इनपुट परीक्षण डेटा को पास करने के लिए किया जाता है और आउटपुट पैरामीटर का उपयोग एक्शन से कॉल किए गए एक्शन में डेटा वापस करने के लिए किया जाता है। हम एक्शन प्रॉपर्टी सेक्शन से एक्शन पैरामीटर्स को परिभाषित कर सकते हैं। दो प्रकार के एक्शन पैरामीटर्स को परिभाषित किया जा सकता है जो हैं -

इनपुट पैरामीटर - यह तर्क के रूप में कार्रवाई के लिए मूल्य पारित करने के लिए उपयोग किया जाता है।

आउटपुट पैरामीटर - इसका उपयोग क्रियाओं से मान लौटाने के लिए किया जाता है।

नीचे दिए गए उदाहरण से कार्रवाई के इनपुट और आउटपुट मापदंडों का उपयोग होता है -

रनएशन ”सबएशन"इनपुटवैल्यू1,इनपुटवैल्यू2, आउटपुटवैल्यू

यहां, हम चर के माध्यम से इनपुट डेटा भेज रहे हैं निवेशवैल्यू 1 और निवेशवैल्यू 2 । कॉलिंग एक्शन से, इनपुट पैरामीटर के मूल्य का उपयोग करके पढ़ा जा सकता है पैरामीटर ("inputParam1") और पैरामीटर ("inputParam2")। इसके अलावा, पैरामीटर आउटपुटपराम चर आउटपुटवैल्यू के माध्यम से कार्रवाई "सबएशन" से डेटा वापस करने के लिए उपयोग किया जाता है।

एक्शन पैरामीटर्स - यूएफटी साक्षात्कार प्रश्न और उत्तर
एक्शन पैरामीटर्स

ऑब्जेक्ट रिपॉजिटरी के साथ UFT क्रियाएँ:

डिफ़ॉल्ट रूप से, प्रत्येक क्रिया में एक स्थानीय ऑब्जेक्ट रिपॉजिटरी होती है। इसलिए कार्रवाई स्थानीय भंडार से वस्तुओं का उपयोग कर सकती है। साथ ही, हम इसे अधिक पुन: प्रयोज्य बनाने के लिए किसी भी साझा वस्तु भंडार का उपयोग कर सकते हैं। पुन: प्रयोज्य कार्यों के लिए एक साझा वस्तु भंडार का उपयोग करना उचित है। 

साझा वस्तु भंडार को संबद्ध करने के लिए कदम: रिपॉजिटरी को संबद्ध करने के कदम नीचे दिए गए हैं - 

चरण 1# समाधान एक्सप्लोरर अनुभाग से एक्शन आइकन पर राइट क्लिक करें और "एक्शन के साथ एसोसिएट रिपॉजिटरी" लिंक पर क्लिक करें।

यूएफटी क्रियाएं - एसोसिएट रिपोजिटरी - स्टेप 1
यूएफटी क्रियाएं - एसोसिएट रिपोजिटरी - स्टेप 1

चरण 2# साझा किए गए ऑब्जेक्ट रिपॉजिटरी के लिए पथ को स्थानीय करें और "ओपन" बटन पर क्लिक करें।

यूएफटी क्रियाएं - एसोसिएट रिपोजिटरी - स्टेप 2
यूएफटी क्रियाएं - एसोसिएट रिपोजिटरी - स्टेप 2

चरण 3# प्रक्रिया को पूरा करने के लिए "स्वचालित सापेक्ष पथ रूपांतरण" संवाद की पुष्टि करें। यह एक वैकल्पिक कदम है।

चरण 4# संबंधित साझा भंडार समाधान एक्सप्लोरर अनुभाग में दिखाई देता है। इसके अलावा, हम इसे डबल-क्लिक करके रीड-ओनली मोड के रूप में खोल सकते हैं।

यूएफटी क्रियाएं - एसोसिएट रिपोजिटरी - स्टेप 3
यूएफटी क्रियाएं - एसोसिएट रिपोजिटरी - स्टेप 3

डेटाटेबल के साथ UFT क्रियाएँ: 

UFT क्रिया का एक अन्य महत्वपूर्ण घटक है datatable, जो Microsoft Excel शीट के समान है। डेटाटैब का उपयोग डेटा को संग्रहीत करने के लिए किया जाता है जो परीक्षण मामलों में उपयोग किया जाता है। 

UFT डेटाटैबल्स को दो श्रेणियों में वर्गीकृत किया गया है। जिन्हें नीचे समझाया गया है -

  • लोकल डिटैटिबल - प्रत्येक UFT क्रियाओं में एक डिफ़ॉल्ट डेटा योग्य होता है। इस डेटाेबल को लोकल डेटाटेबल के रूप में जाना जाता है। डेटाटेबल में उपलब्ध डेटा, एक ही परीक्षण के मामले में पूरी क्रिया के दौरान पढ़ा या अपडेट किया जा सकता है। डेटा तक पहुँचने के लिए सिंटैक्स हैं,

DataTable.Value ("Param1", dtLocalSheet) या DataTable.Value ("Param1", "SheetName")

यहाँ, डीटीलोकलशीट केवल कंटेनर कार्रवाई से डेटासेट तक पहुँचने की कोशिश करते समय लागू होता है।

  • ग्लोबल डेटेबल - लोकल डिटेटेबल के अलावा, हर टेस्ट केस में एक डिफॉल्ट डेटेबल होता है, जिसे ग्लोबल डेटेबल के रूप में जाना जाता है। इसे नीचे के सिंटैक्स का उपयोग करके सभी क्रियाओं तक पहुँचा जा सकता है -

DataTable.Value ("Param1", dtGlobalSheet) या DataTable.Value ("Param1", "Global")

DataTable - UFT साक्षात्कार प्रश्न और उत्तर
DataTable - UFT क्रियाएँ

डेटाटेबल संरचना के अनुसार जो ऊपर चित्र में दिखाया गया है, "मेनैमिशन" डेटाटेबल के कॉलम "परम 2" से कॉलम "परम 1" में डेटा को अपडेट करने की स्क्रिप्ट नीचे दी गई है, जैसे नीचे दी गई है -

'परम 1 से परम 2 कॉलम में डेटा कॉपी करें। DataTable.GetSheet("mainAction").SetRowCount(2) myVar = DataTable.value("Param2", "mainAction") DataTable.value ("Param1", "mainAction") = myVar

UFT क्रियाओं के साथ कार्य करना:

कार्यों के साथ तीन अलग-अलग ऑपरेशन किए जा सकते हैं - 

  • नए एक्शन पर कॉल करें - एक नई क्रिया बनाएँ।
  • कार्रवाई की प्रति के लिए कॉल - धमाकेदार कार्रवाई की नकल करके एक नई कार्रवाई बनाएँ
  • मौजूदा कार्रवाई पर कॉल करें - एक मौजूदा पुन: प्रयोज्य कार्रवाई को संदर्भ के रूप में कॉल करना।

नई कार्रवाई पर कॉल करें:

चरण 1# नई क्रिया निर्माण विंडो खोलने के लिए नेविगेशन "डिज़ाइन-> कॉल टू न्यू एक्शन" पर क्लिक करें।

यूएफटी क्रियाएं - नई कार्रवाई पर कॉल करें - चरण 1
यूएफटी क्रियाएं - नई कार्रवाई पर कॉल करें - चरण 1

चरण 2# नीचे विवरण दर्ज करें और एक नई कार्रवाई बनाने के लिए ओके पर क्लिक करें।

नाम - हमें कार्रवाई का नाम प्रदान करने की आवश्यकता है।

पुन: प्रयोज्य कार्रवाई - हमें कार्रवाई को पुन: प्रयोज्य बनाने के लिए इसकी जांच करने की आवश्यकता है।

Description - यह कार्रवाई का विवरण प्रदान करने के लिए एक वैकल्पिक क्षेत्र है।

स्थान - यह क्षेत्र निर्माण के बाद रखी जाने वाली नई क्रिया की स्थिति को परिभाषित करता है। 

यूएफटी क्रियाएं - नई कार्रवाई पर कॉल करें - चरण 2
यूएफटी क्रियाएं - नई कार्रवाई पर कॉल करें - चरण 2

चरण 3# समाधान एक्सप्लोरर अनुभाग में एक्शन बनाया और उपलब्ध है। अब पैरामीटर बनाने के लिए गुण अनुभाग (पैरामीटर टैब) से "जोड़ें" बटन पर क्लिक करें। इसे बनाने के लिए इनपुट या आउटपुट मापदंडों का नाम प्रदान करने के बाद।

यूएफटी क्रियाएं - नई कार्रवाई पर कॉल करें - चरण 3
यूएफटी क्रियाएं - नई कार्रवाई पर कॉल करें - चरण 3

कार्रवाई की प्रतिलिपि के लिए कॉल करें:

चरण 1# "एक्शन सेलेक्ट करें" डायलॉग विंडो खोलने के लिए नेविगेशन "डिज़ाइन-> कॉल टू कॉपी ऑफ़" पर क्लिक करें।

चरण 2# नीचे विवरण दर्ज करें और एक नई कार्रवाई बनाने के लिए ओके पर क्लिक करें।

टेस्ट से - स्रोत पुन: प्रयोज्य कार्रवाई के लिए कंटेनर परीक्षण मामले का चयन करने की आवश्यकता है जिसे कॉपी किया जाएगा।

कार्य - हम सूची बॉक्स विकल्पों में से लक्ष्य कार्रवाई चुन सकते हैं।

कार्रवाई का विवरण - यह कार्रवाई का विवरण प्रदान करने के लिए एक वैकल्पिक क्षेत्र है।

नई कार्रवाई गुणों को संपादित करें - यदि हम गुणों को संपादित करना चाहते हैं, तो हमें इसकी जांच करने की आवश्यकता है।

पता - यह क्षेत्र निर्माण के बाद रखी जाने वाली नई क्रिया की स्थिति को परिभाषित करता है। 

यूएफटी क्रियाएं - कार्रवाई की प्रति - चरण 2 पर कॉल करें
यूएफटी क्रियाएं - कार्रवाई की प्रति - चरण 2 पर कॉल करें

चरण 3# गुणों को संपादित करें जैसे कि नाम, पैरामीटर, विवरण आदि।

यूएफटी क्रियाएं - कार्रवाई की प्रति - चरण 3 पर कॉल करें
यूएफटी क्रियाएं - कार्रवाई की प्रति - चरण 3 पर कॉल करें

चरण 4# कार्रवाई बनाने के लिए ठीक क्लिक करें।

यूएफटी क्रियाएं - कार्रवाई की प्रति - चरण 4 पर कॉल करें
यूएफटी क्रियाएं - कार्रवाई की प्रति - चरण 4 पर कॉल करें

मौजूदा कार्रवाई के लिए कॉल करें:

चरण 1# "चयन क्रिया" डायलॉग विंडो खोलने के लिए नेविगेशन "डिज़ाइन-> मौजूदा कार्रवाई पर कॉल करें" पर क्लिक करें।

चरण 2# विवरण नीचे दर्ज करें और पुन: प्रयोज्य कार्रवाई का संदर्भ बनाने के लिए ओके पर क्लिक करें।

टेस्ट से - स्रोत पुन: प्रयोज्य कार्रवाई के लिए कंटेनर परीक्षण मामले का चयन करने की आवश्यकता है जिसे कॉपी किया जाएगा।

कार्य - हम सूची बॉक्स विकल्पों में से लक्ष्य कार्रवाई चुन सकते हैं।

कार्रवाई का विवरण - यह कार्रवाई का विवरण प्रदान करने के लिए एक वैकल्पिक क्षेत्र है।

पता - यह क्षेत्र निर्माण के बाद रखी जाने वाली नई क्रिया की स्थिति को परिभाषित करता है। 

यूएफटी कार्रवाई - एक्साइटिंग एक्शन के लिए कॉल करें
यूएफटी कार्रवाई - एक्साइटिंग एक्शन के लिए कॉल करें

चरण 3# मौजूदा पुन: प्रयोज्य कार्रवाई का संदर्भ नीचे दिखाया जा रहा है -

रनएशन "टेस्टअशन", वनइंटरेशन

UFT फ़ंक्शन लाइब्रेरी: 

कार्यों का अवलोकन: 

एक फ़ंक्शन निर्देशों का एक तार्किक ब्लॉक है। यूएफटी वीबीस्क्रिप्टिंग का समर्थन करता है। इसलिए, हम यूएफटी में फ़ंक्शन बनाने के लिए दिशानिर्देशों का पालन कर सकते हैं। यूएफटी में फ़ंक्शन के माध्यम से किसी भी प्रकार के सशर्त, तार्किक या लूपिंग स्टेटमेंट विकसित किए जा सकते हैं जिन्हें किसी भी स्थान से पुन: उपयोग किया जा सकता है। यहां तक ​​कि, हम साझा ऑब्जेक्ट रिपॉजिटरी की सहायता से फ़ंक्शंस के माध्यम से कार्यात्मक चरणों को स्वचालित कर सकते हैं। फ़ंक्शन को हमेशा यूएफटी फ़ंक्शन लाइब्रेरी में लिखने की सलाह दी जाती है जो बाहरी पथ में संग्रहीत होती है। फ़ंक्शन लाइब्रेरी को संबद्ध करके, हम किसी भी यूएफटी परीक्षण मामले से किसी भी फ़ंक्शन तक पहुंच सकते हैं।

जैसा कि UFT कार्यक्षमता को विकसित करने की अनुमति देता है, हम किसी भी पुन: प्रयोज्य कार्रवाई को कार्यों और साझा किए गए ऑब्जेक्ट रिपॉजिटरी की मदद से बदल सकते हैं।

सीमाएं: 

फ़ंक्शन लाइब्रेरी के लिए सीमाएँ नीचे बताई गई हैं।

  • डिफ़ॉल्ट रूप से, UFT फ़ंक्शन लाइब्रेरी में कोई डेटाटेबल या ऑब्जेक्ट रिपॉजिटरी नहीं है।
  • यूएफटी कार्यों को एक स्टैंडअलोन के रूप में निष्पादित नहीं किया जा सकता है। इसे निष्पादित करने के लिए, इसे किसी भी कार्रवाई से बुलाया जाना चाहिए।
  • फ़ंक्शन लाइब्रेरी UFT का एक वैकल्पिक घटक है।
  • हमेशा, हमें किसी भी एप्लिकेशन फ़ंक्शंस को स्वचालित करने के लिए साझा ऑब्जेक्ट रिपॉजिटरी या वर्णनात्मक प्रोग्रामिंग दृष्टिकोण की सहायता की आवश्यकता होती है।

कार्य और UFT क्रियाएँ - अंतर:

  • फ़ंक्शन डिफ़ॉल्ट ऑब्जेक्ट रिपॉजिटरी और डेटाटेबल के साथ निर्मित नहीं होते हैं। लेकिन UFT क्रियाओं में दोनों डिफ़ॉल्ट घटक होते हैं।
  • कार्यों को एक व्यक्तिगत घटक के रूप में निष्पादित नहीं किया जा सकता है, लेकिन किसी भी कार्रवाई को अकेले खड़े किया जा सकता है।
  • कार्यों की तुलना के साथ कार्यों को बनाए रखना आसान है।
  • कई क्रियाओं के उपयोग से परीक्षण स्क्रिप्ट का वजन बढ़ सकता है जो परीक्षण निष्पादन को प्रभावित करता है। लेकिन, फ़ंक्शन हल्के वजन वाले होते हैं जो प्रदर्शन को बेहतर बनाने में मदद करते हैं।
  • क्रियाएं अनिवार्य घटक हैं लेकिन फ़ंक्शन वैकल्पिक हैं।

UFT फ़ंक्शन लाइब्रेरी का अवलोकन:

UFT फंक्शन लाइब्रेरी फंक्शन्स का कंटेनर है। उपभोक्ता फ़ंक्शन लाइब्रेरी में VBScripting का उपयोग करके फ़ंक्शन लिखे जा सकते हैं कोडिंग विधि। यदि हम वस्तुओं के साथ काम करना चाहते हैं, तो हमें साझा वस्तु भंडार का उपयोग करने की आवश्यकता है। 

UFT फ़ंक्शन लाइब्रेरी बनाने के लिए चरण:

चरण 1# मेनू विकल्प का उपयोग करें “फ़ाइल-> नया-> फंक्शन लाइब्रेरी"या" Shift + Alt + N "फ़ंक्शन लाइब्रेरी क्रेटियन संवाद खोलने के लिए।

चरण 2# Qfl एक्सटेंशन के साथ फंक्शन लाइब्रेरी बनाने के लिए स्थान और फ़ाइल नाम दर्ज करें। 

UFT फंक्शन लाइब्रेरी क्रिएशन Step2
UFT फंक्शन लाइब्रेरी क्रिएशन Step2

चरण 3# अब, हमें फ़ंक्शन टेस्ट लाइब्रेरी को मौजूदा टेस्ट केस में "एसोसिएट फंक्शन लाइब्रेरी विद टेस्ट" विकल्प पर क्लिक करके संबद्ध करना होगा।

UFT फंक्शन लाइब्रेरी क्रिएशन Step3
UFT फंक्शन लाइब्रेरी क्रिएशन Step3

चरण 4# फंक्शन लाइब्रेरी अब सॉल्यूशन एक्सप्लोरर सेक्शन के तहत दिख रही है। हम अपना फंक्शन लिख सकते हैं वीबीस्क्रिप्टिंग लाइब्रेरी में। 

UFT फंक्शन लाइब्रेरी क्रिएशन Step4
UFT फंक्शन लाइब्रेरी क्रिएशन Step4

निष्कर्ष:

UFT क्रियाएँ और फ़ंक्शन लाइब्रेरी के बारे में इस लेख में, हमने विभिन्न प्रकार के UFT क्रियाएँ और UFT फ़ंक्शन लाइब्रेरी बनाने के लिए uft क्रियाओं, वर्गीकरण और चरण मार्गदर्शन के बारे में सीखा है। क्लिक यहाँ उत्पन्न करें माइक्रोफोकस समर्थन पोर्टल से अधिक समझने के लिए। यदि आप अक्सर पूछे जाने वाले यूएफटी साक्षात्कार के सवालों का स्वाद प्राप्त करना चाहते हैं, तो कृपया क्लिक करें यहाँ उत्पन्न करें.

एक टिप्पणी छोड़ दो