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