Tradefed-এ বিকল্প হ্যান্ডেল করা

ট্রেড ফেডারেশনের মডুলার অ্যাপ্রোচের মূল ভিত্তি হল বিকল্প ম্যানেজ করা। বিশেষ করে, বিকল্প হল এমন একটি পদ্ধতি যার মাধ্যমে ডেভেলপার, ইন্টিগ্রেটর এবং টেস্ট রানার একে অপরের কাজ ডুপ্লিকেট না করেই একসাথে কাজ করতে পারে। সহজভাবে বলতে গেলে, আমাদের বিকল্প ম্যানেজ করার প্রয়োগের ফলে ডেভেলপার কোনও জাভা ক্লাস মেম্বারকে কনফিগার করা যায় এমন হিসেবে চিহ্নিত করতে পারেন, এই পর্যায়ে সেই মেম্বারের ভ্যালু ইন্টিগ্রেটর দ্বারা বাড়ানো বা ওভাররাইড করা যেতে পারে এবং পরে টেস্ট রানার দ্বারা বাড়ানো বা ওভাররাইড করা যেতে পারে। এই মেকানিজম সব Java ইন্ট্রিনসিক টাইপের জন্য কাজ করে, এর পাশাপাশি ইন্ট্রিনসিক টাইপের যেকোনও Map বা Collection ইনস্ট্যান্সের জন্যও কাজ করে।

মনে রাখবেন: বিকল্প-ম্যানেজ করার মেকানিজম শুধুমাত্র সেইসব ক্লাসের জন্য কাজ করে যেগুলি টেস্ট লাইফসাইকেল-এ অন্তর্ভুক্ত ইন্টারফেসের মধ্যে একটি প্রয়োগ করে এবং শুধুমাত্র তখনই যখন সেই ক্লাসটি লাইফসাইকেল মেশিনারি দ্বারা ইনস্ট্যান্টিয়েট করা হয়।

ডেভেলপার

শুরুতে, ডেভেলপার কোনও মেম্বারকে @Option অ্যানোটেশন দিয়ে চিহ্নিত করেন। এগুলি (ন্যূনতম) name ও description ভ্যালু নির্দিষ্ট করে, যা সেই বিকল্পের সাথে যুক্ত আর্গুমেন্টের নাম এবং --help বা --help-all সহ কমান্ড রান করা হলে TF কনসোলে দেখানো বিবরণ নির্দিষ্ট করে।

উদাহরণস্বরূপ, আমরা এমন একটি কার্যকরী ফোন টেস্ট তৈরি করতে চাই যা বিভিন্ন ফোন নম্বরে ডায়াল করে এবং কানেক্ট হওয়ার পরে প্রতিটি নম্বর থেকে DTMF টোনের একটি সিকোয়েন্স পাওয়ার আশা করে।

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 স্বাভাবিকভাবে ব্যবহার করতে পারবেন, কনফিগার করা যায় এই বিষয়টি নিয়ে বিশেষ মনোযোগ না দিয়েই। কারণ, ক্লাস ইনস্ট্যানশিয়েট করার পরে, কিন্তু run মেথড কল করার আগে @Option ফিল্ড সেট করা হয়, যা Map ও Collection ফিল্ডের জন্য ডিফল্ট সেট-আপ করতে বা কোনও ধরনের ফিল্টারিং করতে ইমপ্লিমেন্টরদের একটি সহজ উপায় প্রদান করে, যা অন্যথায় শুধু যোগ করা যায়।

ইন্টিগ্রেটর

ইন্টিগ্রেটর কনফিগারেশনের জগতে কাজ করে, যা XML-এ লেখা হয়। কনফিগারেশন ফর্ম্যাট ইন্টিগ্রেটরকে যেকোনও @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>

টেস্ট রানার

এছাড়াও, ট্রেড ফেডারেশন কনসোলের মাধ্যমে টেস্ট রানারের কাছে এইসব কনফিগারেশন পয়েন্টের অ্যাক্সেস আছে। প্রথমত, তারা একটি কমান্ড (অর্থাৎ, একটি কনফিগারেশন এবং এর সমস্ত আর্গুমেন্ট) 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-এ --timeout 5 --timeout 10টি ফলাফল আছে যার মধ্যে ১০টি আছে।

আন্ডারলাইং ইমপ্লিমেন্টেশন হিসেবে List বা Collection থাকলে, কমান্ড লাইনে নির্দিষ্ট করা ক্রম অনুযায়ী সব ভ্যালু সেভ করা হয়।

বুলিয়ান বিকল্প

বুলিয়ান আন্ডারলাইং ধরনের বিকল্প সরাসরি বিকল্পের নাম পাস করিয়ে true হিসেবে সেট করা যেতে পারে, যেমন, --[option-name] এবং --no-[option-name] সিনট্যাক্স ব্যবহার করে false হিসেবে সেট করা যেতে পারে।

এছাড়াও দেখুন

সুইট ও মডিউলকে বিকল্প পাস করুন