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