ट्रेडफेड टेस्ट रनर लिखें

यह पृष्ठ वर्णन करता है कि ट्रेडफेड में एक नया टेस्ट रनर कैसे लिखें।

पृष्ठभूमि

यदि आप ट्रेडफेड आर्किटेक्चर में टेस्ट रनर के स्थान के बारे में उत्सुक हैं, तो टेस्ट रनर की संरचना देखें।

नया टेस्ट रनर लिखने के लिए यह कोई शर्त नहीं है; परीक्षण धावकों को अलगाव में लिखा जा सकता है।

न्यूनतम: इंटरफ़ेस लागू करें

ट्रेडफेड टेस्ट रनर के रूप में अर्हता प्राप्त करने के लिए न्यूनतम न्यूनतम IRemoteTest इंटरफ़ेस और विशेष रूप से run(TestInformation testInfo, ITestInvocationListener listener) विधि को लागू करना है।

यह विधि जावा रननेबल के समान टेस्ट रनर का उपयोग करते समय हार्नेस द्वारा लागू की जाती है।

उस विधि के प्रत्येक भाग को परीक्षण धावक निष्पादन का हिस्सा माना जाता है।

परीक्षण धावक से परिणामों की रिपोर्ट करें

बेस इंटरफ़ेस में run विधि ITestInvocationListener प्रकार के श्रोता ऑब्जेक्ट तक पहुंच प्रदान करती है। यह ऑब्जेक्ट टेस्ट रनर से हार्नेस तक संरचित परिणामों की रिपोर्ट करने की कुंजी है।

संरचित परिणामों की रिपोर्ट करके, एक परीक्षण धावक में निम्नलिखित गुण होते हैं:

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

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

निष्पादन की वर्तमान प्रगति के बारे में सूचित करने के लिए श्रोता को निम्नलिखित घटनाओं को बुलाया जा सकता है:

  • testRunStarted: एक साथ संबंधित परीक्षण मामलों के समूह की शुरुआत को सूचित करें।
    • टेस्टस्टार्टेड: टेस्ट केस शुरू होने की शुरुआत को सूचित करें।
    • परीक्षण विफल/परीक्षण अनदेखा: प्रगतिरत परीक्षण मामले की स्थिति में परिवर्तन को सूचित करें। स्थिति में किसी भी बदलाव के बिना एक परीक्षण मामले को उत्तीर्ण माना जाता है।
    • testEnded: परीक्षण मामले के अंत की सूचना दें।
  • testRunFaired: सूचित करें कि परीक्षण मामलों के निष्पादन के समूह की समग्र स्थिति विफलता है। निष्पादन क्या अपेक्षा कर रहा था, उसके आधार पर एक परीक्षण रन परीक्षण मामलों के परिणामों से स्वतंत्र रूप से पास या असफल हो सकता है। उदाहरण के लिए, कई परीक्षण मामलों को चलाने वाला एक बाइनरी सभी उत्तीर्ण परीक्षण मामलों की रिपोर्ट कर सकता है, लेकिन एक त्रुटि निकास कोड के साथ (किसी भी कारण से: लीक हुई फ़ाइलें, आदि)।
  • testRunEnded: परीक्षण मामलों के समूह के अंत को सूचित करें।

कॉलबैक के उचित क्रम को बनाए रखना और सुनिश्चित करना टेस्ट रनर कार्यान्वयनकर्ता की जिम्मेदारी है, उदाहरण के लिए यह सुनिश्चित करना कि अपवाद के मामले में finally क्लॉज का उपयोग करके testRunEnded कॉल किया जाता है।

परीक्षण मामलों के कॉलबैक ( testStarted , testEnded , आदि) वैकल्पिक हैं। परीक्षण रन बिना किसी परीक्षण मामले के हो सकता है।

आप देख सकते हैं कि घटनाओं की यह संरचना विशिष्ट JUnit संरचना से प्रेरित है। इसका उद्देश्य चीज़ों को किसी बुनियादी चीज़ के करीब रखना है जिसके बारे में डेवलपर्स को आमतौर पर जानकारी होती है।

परीक्षण धावक से रिपोर्ट लॉग

यदि आप अपना खुद का ट्रेडफेड टेस्ट क्लास या रनर लिख रहे हैं, तो आप IRemoteTest लागू करेंगे और run() विधि के माध्यम से ITestInvocationListener प्राप्त करेंगे। इस श्रोता का उपयोग फ़ाइलों को लॉग करने के लिए निम्नानुसार किया जा सकता है:

    listener.testLog(String dataName, LogDataType type_of_data, InputStreamSource data);

किसी डिवाइस से परीक्षण करें

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

परीक्षण लेखक जो डिवाइस परीक्षण के अगले चरण पर जाना चाहते हैं, उन्हें निम्नलिखित इंटरफेस की आवश्यकता होगी:

  • IDeviceTest ITestDevice ऑब्जेक्ट प्राप्त करने की अनुमति देता है जो परीक्षण के तहत डिवाइस का प्रतिनिधित्व करता है और इसके साथ इंटरैक्ट करने के लिए एपीआई प्रदान करता है।
  • IBuildReceiver परीक्षण को बिल्ड प्रदाता चरण में निर्मित IBuildInfo ऑब्जेक्ट प्राप्त करने की अनुमति देता है जिसमें परीक्षण सेटअप से संबंधित सभी जानकारी और कलाकृतियाँ शामिल हैं।

परीक्षण धावक आमतौर पर निष्पादन से संबंधित कलाकृतियों को प्राप्त करने के लिए इन इंटरफेस में रुचि रखते हैं, उदाहरण के लिए अतिरिक्त फ़ाइलें, और परीक्षण के तहत डिवाइस प्राप्त करते हैं जिसे निष्पादन के दौरान लक्षित किया जाएगा।

एकाधिक उपकरणों के साथ परीक्षण करें

ट्रेडफेड एक ही समय में कई उपकरणों पर परीक्षण चलाने का समर्थन करता है। यह उन घटकों का परीक्षण करते समय उपयोगी होता है जिनके लिए बाहरी इंटरैक्शन की आवश्यकता होती है, जैसे फ़ोन और घड़ी की जोड़ी।

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

इंटरफ़ेस से सेटर को हमेशा run विधि से पहले कॉल किया जाएगा, इसलिए यह मान लेना सुरक्षित है कि run कॉल होने पर संरचना उपलब्ध होगी।

परीक्षण उनके सेटअप से अवगत हैं

कुछ परीक्षण धावक कार्यान्वयनों को ठीक से काम करने के लिए समग्र सेटअप के बारे में जानकारी की आवश्यकता हो सकती है, उदाहरण के लिए आह्वान के बारे में कुछ मेटाडेटा, या कौन सा target_preparer पहले चला था, आदि।

इसे प्राप्त करने के लिए, एक परीक्षण धावक उस IConfiguration ऑब्जेक्ट तक पहुंच सकता है जिसका यह हिस्सा है और इसमें इसे निष्पादित किया गया है। अधिक विवरण के लिए कॉन्फ़िगरेशन ऑब्जेक्ट विवरण देखें।

परीक्षण धावक कार्यान्वयन के लिए, आपको IConfiguration ऑब्जेक्ट प्राप्त करने के लिए IConfigurationReceiver को लागू करने की आवश्यकता होगी।

लचीला परीक्षण धावक

परीक्षण धावक अपने परीक्षणों को चलाने का एक लचीला तरीका प्रदान कर सकते हैं यदि उनके पास उन पर बारीक नियंत्रण है, उदाहरण के लिए एक JUnit परीक्षण धावक प्रत्येक इकाई परीक्षण को व्यक्तिगत रूप से चला सकता है।

यह बड़े हार्नेस और बुनियादी ढांचे को उस बढ़िया नियंत्रण का लाभ उठाने की अनुमति देता है और उपयोगकर्ताओं को फ़िल्टरिंग के माध्यम से आंशिक रूप से परीक्षण धावक चलाने की अनुमति देता है।

ITestFilterReceiver इंटरफ़ेस में फ़िल्टरिंग समर्थन का वर्णन किया गया है, जो उन परीक्षणों के लिए फ़िल्टर include और exclude के सेट प्राप्त करने की अनुमति देता है जिन्हें चलना चाहिए या नहीं चलना चाहिए।

हमारा सम्मेलन यह है कि एक परीक्षण चलाया जाएगा यदि यह एक या अधिक सम्मिलित फ़िल्टर से मेल खाता है और किसी भी बहिष्कृत फ़िल्टर से मेल नहीं खाता है। यदि कोई सम्मिलित फ़िल्टर नहीं दिया गया है, तो सभी परीक्षण तब तक चलाए जाने चाहिए जब तक वे किसी भी बहिष्कृत फ़िल्टर से मेल नहीं खाते।