مدیریت گزینه در Tradefed

مدیریت گزینه در قلب رویکرد واحدی Trade Federation قرار دارد. به‌طور خاص، گزینه‌ها سازوکاری هستند که توسعه‌دهنده، یکپارچه‌ساز، و «اجراکننده آزمایش» می‌توانند بدون نیاز به تکرار کار یکدیگر با هم کار کنند. به‌بیان ساده، پیاده‌سازی ما از مدیریت گزینه به توسعه‌دهنده امکان می‌دهد عضو کلاس Java را به‌عنوان پیکربندی‌شدنی علامت‌گذاری کند، در این نقطه مقدار آن عضو می‌تواند توسط «یکپارچه‌ساز» افزایش یا ملغی شود، و می‌تواند متعاقباً توسط «اجراکننده آزمایش» افزایش یا ملغی شود. این سازوکار برای همه انواع ذاتی 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 استفاده کنند. چون فیلدهای @Option پس‌از نمونه‌سازی کلاس، اما قبل‌از فراخوانی متد run تنظیم می‌شوند، این امر روشی آسان برای پیاده‌سازان فراهم می‌کند تا مقادیر پیش‌فرض را برای تنظیم کنند یا نوعی فیلتر کردن را روی فیلدهای 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*#*#

یا برای دریافت جلوه‌ای مشابه از جهت مخالف، Test Runner می‌تواند زمان انتظار را برای آزمایش many-numbers کاهش دهد:

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

ترتیب گزینه‌ها

ممکن است متوجه شوید که پیاده‌سازی اساسی گزینه call یک Map است بنابراین با تکرار --call در خط فرمان، همه آن‌ها ذخیره می‌شوند.

گزینه timeout که پیاده‌سازی زیربنایی long دارد، فقط می‌تواند یک مقدار را ذخیره کند. بنابراین فقط آخرین مقدار مشخص‌شده ذخیره می‌شود. --timeout 5 --timeout 10 نتیجه در timeout حاوی ۱۰.

درصورت وجود List یا Collection به‌عنوان پیاده‌سازی اساسی، همه مقادیر به‌ترتیب مشخص‌شده در خط فرمان ذخیره می‌شوند.

گزینه‌های بولی

گزینه‌های نوع اساسی بولی را می‌توان با ارسال مستقیم نام گزینه، مثلاً --[option-name]، روی true تنظیم کرد و بااستفاده از نحو --no-[option-name] می‌توان آن را روی false تنظیم کرد.

همچنین مراجعه کنید به

گزینه‌ها را به مجموعه و مدول‌ها ارسال کنید