यह पृष्ठ बताता है कि ट्रेडफेड में एक नया टेस्ट रनर कैसे लिखना है।
पृष्ठभूमि
यदि आप ट्रेडफेड आर्किटेक्चर में टेस्ट रनर के स्थान के बारे में उत्सुक हैं, तो टेस्ट रनर की संरचना देखें।
नया परीक्षण धावक लिखने के लिए यह कोई पूर्वापेक्षा नहीं है; परीक्षण धावकों को अलगाव में लिखा जा सकता है।
न्यूनतम: इंटरफ़ेस को लागू करना
ट्रेडफेड टेस्ट रनर के रूप में अर्हता प्राप्त करने के लिए न्यूनतम न्यूनतम IRemoteTest इंटरफ़ेस और अधिक विशेष रूप से run(TestInformation testInfo, ITestInvocationListener listener)
विधि को लागू करना है।
जावा रननेबल के समान, टेस्ट रनर का उपयोग करते समय यह विधि हार्नेस द्वारा लागू की जाती है।
उस पद्धति के प्रत्येक भाग को टेस्ट रनर निष्पादन का हिस्सा माना जाता है।
परीक्षण धावक से रिपोर्टिंग परिणाम
बेस इंटरफ़ेस में run
विधि ITestInvocationListener
प्रकार के श्रोता ऑब्जेक्ट तक पहुंच प्रदान करती है। यह ऑब्जेक्ट टेस्ट रनर से हार्नेस तक संरचित परिणामों की रिपोर्ट करने की कुंजी है।
संरचित परिणामों की रिपोर्ट करके, एक परीक्षण धावक के पास निम्नलिखित गुण होते हैं:
- चलने वाले सभी परीक्षणों की एक उचित सूची की रिपोर्ट करें, उन्होंने कितना समय लिया और यदि वे व्यक्तिगत रूप से पास हुए, असफल या कुछ अन्य राज्यों में।
- यदि लागू हो तो परीक्षणों से जुड़े मेट्रिक्स की रिपोर्ट करें, उदाहरण के लिए इंस्टॉलेशन-टाइम मेट्रिक्स।
- अधिकांश आधारभूत संरचना टूलिंग में फ़िट करें, उदाहरण के लिए प्रदर्शन परिणाम और मीट्रिक इत्यादि।
- आमतौर पर डिबग करना आसान होता है क्योंकि निष्पादन का अधिक बारीक निशान होता है।
उस ने कहा, संरचित परिणामों की रिपोर्ट करना वैकल्पिक है; एक परीक्षण धावक केवल वास्तविक निष्पादन के किसी भी विवरण के बिना पूरे रन की स्थिति को PASSED या FAILED के रूप में मूल्यांकन करना चाहता है।
नोट: घटनाओं के अनुक्रम का पालन करने वाले धावक को लागू करना अधिक कठिन है, लेकिन हम ऊपर सूचीबद्ध लाभों को देखते हुए ऐसा करने की सलाह देते हैं।
निष्पादन की वर्तमान प्रगति के दोहन को सूचित करने के लिए श्रोता को निम्नलिखित घटनाओं को बुलाया जा सकता है:
- testRunStarted: एक साथ संबंधित परीक्षण मामलों के समूह की शुरुआत को सूचित करें।
- टेस्टस्टार्टेड: टेस्ट केस शुरू होने की सूचना दें।
- testFailed/testIgnored: प्रगति में परीक्षण मामले की स्थिति में परिवर्तन को सूचित करें। राज्य के किसी भी परिवर्तन के बिना एक परीक्षण मामले को उत्तीर्ण माना जाता है।
- परीक्षण समाप्त: परीक्षण मामले के अंत की सूचना दें।
- testRunFailed: सूचित करें कि परीक्षण मामलों के निष्पादन के समूह की समग्र स्थिति एक विफलता है। निष्पादन की अपेक्षा के आधार पर परीक्षण मामलों के परिणामों से स्वतंत्र रूप से एक परीक्षण रन पास या असफल हो सकता है। उदाहरण के लिए, कई परीक्षण मामलों को चलाने वाला एक बाइनरी सभी पास परीक्षण मामलों की रिपोर्ट कर सकता है लेकिन एक त्रुटि निकास कोड के साथ (किसी भी कारण से: लीक फ़ाइलें, आदि)।
- testRunEnded: परीक्षण मामलों के समूह के अंत की सूचना दें।
कॉलबैक के उचित क्रम को बनाए रखना और सुनिश्चित करना परीक्षण धावक कार्यान्वयनकर्ता की ज़िम्मेदारी है, उदाहरण के लिए यह सुनिश्चित करना कि testRunEnded
को अपवाद के मामले में finally
क्लॉज का उपयोग करके बुलाया जाता है।
टेस्ट केस कॉलबैक ( testStarted
, testEnded
, आदि) वैकल्पिक हैं। टेस्ट रन बिना किसी टेस्ट केस के हो सकता है।
आप देख सकते हैं कि घटनाओं की यह संरचना विशिष्ट जुनीट संरचना से प्रेरित है। यह चीजों को कुछ बुनियादी के करीब रखने के उद्देश्य से है, जिसके बारे में डेवलपर्स को आमतौर पर जानकारी होती है।
परीक्षण धावक से रिपोर्टिंग लॉग
यदि आप अपना खुद का ट्रेडफेड टेस्ट क्लास या रनर लिख रहे हैं, तो आप IRemoteTest को लागू करेंगे और run()
विधि के माध्यम से ITestInvocationListener
प्राप्त करेंगे। इस श्रोता का उपयोग फाइलों को लॉग करने के लिए निम्नानुसार किया जा सकता है:
listener.testLog(String dataName, LogDataType type_of_data, InputStreamSource data);
एक उपकरण के साथ परीक्षण
उपरोक्त न्यूनतम इंटरफ़ेस बहुत ही सरल परीक्षण चलाने की अनुमति देता है जो अलग-थलग हैं और किसी विशेष संसाधन की आवश्यकता नहीं है, उदाहरण के लिए जावा यूनिट परीक्षण।
परीक्षण लेखक जो डिवाइस परीक्षण के अगले चरण पर जाना चाहते हैं, उन्हें निम्नलिखित इंटरफेस की आवश्यकता होगी:
- IDeviceTest
ITestDevice
ऑब्जेक्ट प्राप्त करने की अनुमति देता है जो परीक्षण के तहत डिवाइस का प्रतिनिधित्व करता है और इसके साथ बातचीत करने के लिए API प्रदान करता है। - IBuildReceiver परीक्षण सेटअप से संबंधित सभी जानकारी और कलाकृतियों वाले बिल्ड प्रदाता चरण पर बनाए गए
IBuildInfo
ऑब्जेक्ट को प्राप्त करने की अनुमति देता है।
परीक्षण धावक आमतौर पर निष्पादन से संबंधित कलाकृतियों को प्राप्त करने के लिए इन इंटरफेस में रुचि रखते हैं, उदाहरण के लिए अतिरिक्त फाइलें, और परीक्षण के तहत डिवाइस प्राप्त करें जिसे निष्पादन के दौरान लक्षित किया जाएगा।
कई उपकरणों के साथ परीक्षण
ट्रेडफेड एक ही समय में कई उपकरणों पर परीक्षण चलाने का समर्थन करता है। यह उन घटकों का परीक्षण करते समय उपयोगी होता है जिनके लिए फ़ोन और घड़ी की जोड़ी जैसे बाहरी इंटरैक्शन की आवश्यकता होती है।
एक परीक्षण धावक लिखने के लिए जो कई उपकरणों का उपयोग कर सकता है, आपको IMultiDeviceTest को लागू करने की आवश्यकता होगी, जो ITestDevice
को IBuildInfo
का नक्शा प्राप्त करने की अनुमति देगा जिसमें डिवाइस प्रतिनिधित्व और उनकी संबंधित निर्माण जानकारी की पूरी सूची शामिल है।
इंटरफ़ेस से सेटर को हमेशा run
विधि से पहले बुलाया जाएगा, इसलिए यह मान लेना सुरक्षित है कि run
कहे जाने पर संरचना उपलब्ध होगी।
परीक्षण उनके सेटअप के बारे में जानते हैं
नोट: यह एक बहुत ही सामान्य उपयोग का मामला नहीं है। यह पूर्णता के लिए प्रलेखित है, लेकिन आपको आमतौर पर इसकी आवश्यकता नहीं होगी।
कुछ परीक्षण धावक कार्यान्वयनों को ठीक से काम करने के लिए समग्र सेटअप के बारे में जानकारी की आवश्यकता हो सकती है, उदाहरण के लिए आमंत्रण के बारे में कुछ मेटाडेटा, या कौन सा target_preparer
पहले चला था, आदि।
इसे प्राप्त करने के लिए, एक परीक्षण धावक IConfiguration
ऑब्जेक्ट तक पहुंच सकता है जिसका वह हिस्सा है और जिसमें इसे निष्पादित किया गया है। अधिक विवरण के लिए कॉन्फ़िगरेशन ऑब्जेक्ट विवरण देखें।
परीक्षण धावक के कार्यान्वयन के लिए, आपको IConfigurationReceiver को IConfiguration
ऑब्जेक्ट प्राप्त करने के लिए लागू करने की आवश्यकता होगी।
लचीला परीक्षण धावक
परीक्षण धावक अपने परीक्षण चलाने का एक लचीला तरीका प्रदान कर सकते हैं यदि उनके पास उन पर बारीक नियंत्रण है, उदाहरण के लिए एक जुनीट परीक्षण धावक व्यक्तिगत रूप से प्रत्येक इकाई परीक्षण चला सकता है।
यह बड़े दोहन और बुनियादी ढांचे को उस ठीक नियंत्रण का लाभ उठाने की अनुमति देता है और उपयोगकर्ताओं को फ़िल्टरिंग के माध्यम से आंशिक रूप से परीक्षण धावक चलाने की अनुमति देता है।
फ़िल्टरिंग समर्थन का वर्णन ITestFilterReceiver इंटरफ़ेस में किया गया है, जो उन परीक्षणों के लिए फ़िल्टर include
और exclude
करने के सेट प्राप्त करने की अनुमति देता है जिन्हें चलना चाहिए या नहीं चलना चाहिए।
हमारी परंपरा यह है कि एक परीक्षण चलाया जाएगा IFF यह एक या अधिक शामिल फ़िल्टर से मेल खाता है और किसी भी बहिष्कृत फ़िल्टर से मेल नहीं खाता है। यदि कोई शामिल फ़िल्टर नहीं दिया गया है, तो सभी परीक्षण तब तक चलाए जाने चाहिए जब तक कि वे किसी भी बहिष्कृत फ़िल्टर से मेल नहीं खाते।
नोट: हम परीक्षण धावकों को इस तरह से लिखने के लिए प्रोत्साहित करते हैं जो इस फ़िल्टरिंग का समर्थन करता है क्योंकि यह बड़े बुनियादी ढांचे में एक बड़ा अतिरिक्त मूल्य प्रदान करता है। लेकिन हम समझते हैं कि कुछ मामलों में ऐसा करना संभव नहीं है।