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