किसी टेस्ट को तय करने के लिए, एक ही XML कॉन्फ़िगरेशन बनाना हमेशा सही नहीं होता. अगर आपको एक जैसे टेस्ट चलाने के लिए, सेटअप के किसी हिस्से का फिर से इस्तेमाल करना है, तो आपको दो बड़ी XML फ़ाइलें कॉपी करनी होंगी और उन्हें बनाए रखना होगा.
ऐसे में, Tradefed XML कॉन्फ़िगरेशन की परिभाषा में मौजूद template और include टैग काम आते हैं. इन टैग की मदद से, कुछ XML कॉन्फ़िगरेशन में प्लेसहोल्डर सेट किए जा सकते हैं, ताकि किसी दूसरे XML कॉन्फ़िगरेशन का कोई हिस्सा जोड़ा जा सके.
टेंप्लेट के लिए परिभाषा का उदाहरण
<configuration description="Common base configuration for local runs with minimum overhead">
<build_provider class="com.android.tradefed.build.BootstrapBuildProvider" />
<template-include name="preparers" default="empty" />
<template-include name="test" default="empty" />
<template-include name="reporters" default="empty" />
</configuration>
टेंप्लेट, प्लेसहोल्डर होते हैं. इनमें, रेफ़रंस के लिए name और एक वैकल्पिक default फ़ील्ड होता है. डिफ़ॉल्ट फ़ील्ड, डिफ़ॉल्ट रिप्लेसमेंट XML तय करता है, जिसका इस्तेमाल किया जाना चाहिए.
किसी दिए गए कॉन्फ़िगरेशन के लिए, टेंप्लेट को बदलने के लिए, कमांड लाइन में यह कमांड पैरामीटर जोड़ना होगा:
--template:map <name of template>=<replacement XML config path>
--template:map preparers=empty
उदाहरण के लिए:
<template-include name="preparers" default="empty" />
इस मामले में, empty रेफ़रंस, empty.xml कॉन्फ़िगरेशन को दिखाता है. इसमें कुछ भी शामिल नहीं होता. हम इसका इस्तेमाल, किसी चीज़ को किसी और चीज़ से बदलने के रेफ़रंस के तौर पर करते हैं.
XML कॉन्फ़िगरेशन का पाथ, Tradefed के JAR संसाधनों में मौजूद res/config फ़ोल्डर के हिसाब से पूरा या रिलेटिव हो सकता है. यहां कुछ पाथ दिए गए हैं:
- tools/tradefederation/core/res/config
- tools/tradefederation/core/tests/res/config
- tools/tradedeferation/contrib/res/config
शामिल किए गए कॉन्फ़िगरेशन के लिए परिभाषा का उदाहरण
<configuration description="Common base configuration for local runs with minimum overhead">
<build_provider class="com.android.tradefed.build.BootstrapBuildProvider" />
<include name="empty"/>
</configuration>
शामिल किए गए कॉन्फ़िगरेशन, टेंप्लेट से ज़्यादा आसान होते हैं, क्योंकि इनके लिए कमांड लाइन आर्ग्युमेंट की ज़रूरत नहीं होती. ये सीधे तौर पर, name टैग में रेफ़रंस किए गए XML को बड़ा करते हैं. टेंप्लेट की तरह, कॉन्फ़िगरेशन का पाथ पूरा या रिलेटिव हो सकता है. हालांकि, हमारा सुझाव है कि includes के लिए, सिर्फ़ रिलेटिव पाथ का इस्तेमाल करें, क्योंकि ये Tradefed में ज़्यादा पोर्टेबल होते हैं.
अगर Tradefed को किसी दूसरी मशीन पर ले जाया जाता है, तो पूरे पाथ मान्य नहीं होंगे.
गलत कॉन्फ़िगरेशन
गलत कॉन्फ़िगरेशन होने पर, जैसे कि रिप्लेसमेंट XML न मिलने पर, Tradefed एक ConfigurationException दिखाएगा. इसमें, उस चीज़ की जानकारी होगी जो मौजूद नहीं है या जिसे गलत तरीके से कॉन्फ़िगर किया गया है.