Tradefed में विकल्प मैनेज करना

विकल्पों को मैनेज करना, Trade Federation के मॉड्यूलर तरीके का मुख्य हिस्सा है. खास तौर पर, विकल्प एक ऐसा तरीका है जिससे डेवलपर, इंटिग्रेटर, और टेस्ट रनर एक साथ काम कर सकते हैं. इसके लिए, उन्हें एक-दूसरे के काम को डुप्लीकेट करने की ज़रूरत नहीं पड़ती. आसान शब्दों में, विकल्प को मैनेज करने की सुविधा लागू करने पर, डेवलपर किसी Java क्लास के सदस्य को कॉन्फ़िगर किए जा सकने वाले के तौर पर मार्क कर सकता है. इसके बाद, इंटिग्रेटर उस सदस्य की वैल्यू को बढ़ा सकता है या बदल सकता है. इसके बाद, टेस्ट रनर उस वैल्यू को बढ़ा सकता है या बदल सकता है. यह तरीका, सभी Java इंट्रिन्सिक टाइप के साथ-साथ, इंट्रिन्सिक टाइप के किसी भी Map या Collection इंस्टेंस के लिए काम करता है.

ध्यान दें: विकल्प मैनेज करने की सुविधा सिर्फ़ उन क्लास के लिए काम करती है जो टेस्ट लाइफ़साइकल में शामिल किसी एक इंटरफ़ेस को लागू करती हैं. साथ ही, यह सुविधा सिर्फ़ तब काम करती है, जब लाइफ़साइकल मशीनरी उस क्लास को इंस्टैंशिएट करती है.

डेवलपर

सबसे पहले, डेवलपर किसी सदस्य को @Option एनोटेशन से मार्क करता है. ये कम से कम name और description वैल्यू तय करते हैं. ये वैल्यू, उस विकल्प से जुड़े आर्ग्युमेंट का नाम तय करती हैं. साथ ही, --help या --help-all के साथ कमांड चलाने पर, TF कंसोल पर दिखने वाला ब्यौरा भी तय करती हैं.

उदाहरण के लिए, मान लें कि हमें एक ऐसा फ़ोन टेस्ट बनाना है जो अलग-अलग फ़ोन नंबर डायल करता है और कनेक्ट होने के बाद, हर नंबर से डीटीएमएफ़ टोन का क्रम पाता है.

public class PhoneCallFuncTest extends IRemoteTest {
    @Option(name = "timeout", description = "How long to wait for connection, in millis")
    private long mWaitTime = 30 * 1000;  // 30 seconds

    @Option(name = "call", description = "Key: Phone number to attempt. " +
            "Value: DTMF to expect. May be repeated.")
    private Map<String, String> mCalls = new HashMap<String, String>;

    public PhoneCallFuncTest() {
        mCalls.add("123-456-7890", "01134");  // default
    }

टेस्ट के लिए, डेवलपर को कॉन्फ़िगरेशन के दो पॉइंट सेट अप करने की ज़रूरत होती है. इसके बाद, वे mWaitTime और mCalls का सामान्य तौर पर इस्तेमाल कर सकते हैं. इसके लिए, उन्हें इस बात पर ध्यान देने की ज़रूरत नहीं है कि ये आइकॉन कॉन्फ़िगर किए जा सकते हैं. @Option फ़ील्ड, क्लास के इंस्टैंशिएट होने के बाद, लेकिन run तरीके के कॉल होने से पहले सेट होते हैं. इससे, लागू करने वाले लोगों को Map और Collection फ़ील्ड के लिए डिफ़ॉल्ट सेट अप करने या उन पर किसी तरह की फ़िल्टरिंग करने का आसान तरीका मिलता है.

इंटिग्रेटर

इंटिग्रेटर, एक्सएमएल में लिखे गए कॉन्फ़िगरेशन के साथ काम करता है. कॉन्फ़िगरेशन फ़ॉर्मैट की मदद से, इंटिग्रेटर किसी भी @Option फ़ील्ड के लिए वैल्यू सेट कर सकता है या उसमें वैल्यू जोड़ सकता है. उदाहरण के लिए, मान लें कि इंटिग्रेटर को इंतज़ार का कम समय वाला ऐसा टेस्ट तय करना है जो डिफ़ॉल्ट नंबर को कॉल करता है. साथ ही, उसे लंबे समय तक चलने वाला ऐसा टेस्ट भी तय करना है जो कई नंबर को कॉल करता है. वे कॉन्फ़िगरेशन का एक जोड़ा बना सकते हैं, जो कुछ ऐसा दिख सकता है:

<?xml version="1.0" encoding="utf-8"?>
<configuration description="low-latency default test; low-latency.xml">
    <test class="com.example.PhoneCallFuncTest">
        <option name="timeout" value="5000" />
    </test>
</configuration>
<?xml version="1.0" encoding="utf-8"?>
<configuration description="call a bunch of numbers; many-numbers.xml">
    <test class="com.example.PhoneCallFuncTest">
        <option name="call" key="111-111-1111" value="#*#*TEST1*#*#" />
        <option name="call" key="222-222-2222" value="#*#*TEST2*#*#" />
        <!-- ... -->
    </test>
</configuration>

टेस्ट रनर

टेस्ट रनर के पास भी Trade Federation कंसोल के ज़रिए इन कॉन्फ़िगरेशन पॉइंट का ऐक्सेस होता है. सबसे पहले, वे run command <name> निर्देश (या कम शब्दों में run <name>) के साथ कोई कमांड (यानी, कोई कॉन्फ़िगरेशन और उसके सभी आर्ग्युमेंट) चलाते हैं. इसके अलावा, वे कमांड के हिस्से के तौर पर, आर्ग्युमेंट की कोई भी सूची तय कर सकते हैं. इस सूची की मदद से, हर कॉन्फ़िगरेशन में लाइफ़साइकल ऑब्जेक्ट के ज़रिए तय किए गए फ़ील्ड को बदला जा सकता है या उनमें जोड़ा जा सकता है.

many-numbers फ़ोन नंबर के साथ कम इंतज़ार वाला टेस्ट चलाने के लिए, टेस्ट रनर ये काम कर सकता है:

tf> run low-latency.xml --call 111-111-1111 #*#*TEST1*#*# --call 222-222-2222 #*#*TEST2*#*#

इसके अलावा, टेस्ट रनर, many-numbers टेस्ट के लिए इंतज़ार करने का समय कम करके भी, विपरीत दिशा से मिलता-जुलता असर पा सकता है:

tf> run many-numbers.xml --timeout 5000

विकल्पों का क्रम

आपको यह दिख सकता है कि लागू करने के लिए दिया गया call विकल्प, Map है. इसलिए, कमांड लाइन पर बार-बार --call करने पर, वे सभी सेव हो जाते हैं.

timeout विकल्प में long का इस्तेमाल किया जाता है. इसमें सिर्फ़ एक वैल्यू सेव की जा सकती है. इसलिए, सिर्फ़ आखिरी वैल्यू सेव की जाती है. --timeout 5 --timeout 10 में 10 वाले timeout के नतीजे.

अगर List या Collection को लागू करने के लिए इस्तेमाल किया जा रहा है, तो सभी वैल्यू को कमांड लाइन में बताए गए क्रम में सेव किया जाता है.

बूलियन विकल्प

बुलियन के बुनियादी टाइप के विकल्पों को true पर सेट किया जा सकता है. इसके लिए, विकल्प के नाम को सीधे पास करें, जैसे कि --[option-name]. साथ ही, सिंटैक्स --no-[option-name] का इस्तेमाल करके, false पर सेट किया जा सकता है.

यह भी देखें:

सुइट और मॉड्यूल में विकल्प पास करना