Obsługa opcji w Tradefed

Obsługa opcji leży u podstaw modułowego podejścia Federacji Handlowej. W szczególności opcje są mechanizmem, dzięki któremu Deweloper, Integrator i Osoba przeprowadzająca testy mogą współpracować bez konieczności wzajemnego powielania pracy. Mówiąc najprościej, nasza implementacja obsługi opcji pozwala Deweloperowi oznaczyć element klasy Java jako konfigurowalny, w którym to momencie wartość tego elementu może zostać zwiększona lub przesłonięta przez Integratora, a następnie może zostać zwiększona lub przesłonięta przez Osoba przeprowadzająca test. Ten mechanizm działa dla wszystkich typów wewnętrznych Java, a także dla dowolnych typów wewnętrznych Map i Collection .

Uwaga: Mechanizm obsługi opcji działa tylko w przypadku klas implementujących jeden z interfejsów zawartych w cyklu życia testu i tylko wtedy, gdy instancja tej klasy jest tworzona przez maszynerię cyklu życia.

Deweloper

Na początek programista zaznacza element adnotacją @Option . Określają (co najmniej) name i wartości description , które określają nazwę argumentu związaną z tą opcją oraz opis, który będzie wyświetlany na konsoli TF, gdy polecenie zostanie uruchomione z --help lub --help-all .

Załóżmy na przykład, że chcemy zbudować funkcjonalny test telefonu, który będzie wybierał różne numery telefonów i będzie oczekiwał otrzymania sekwencji tonów DTMF z każdego numeru po nawiązaniu połączenia.

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
    }

To wszystko, czego potrzebuje programista, aby skonfigurować dwa punkty konfiguracji dla tego testu. Mogliby wtedy normalnie korzystać z mWaitTime i mCalls , nie zwracając większej uwagi na fakt, że można je konfigurować. Ponieważ pola @Option są ustawiane po utworzeniu instancji klasy, ale przed wywołaniem metody run , zapewnia to implementatorom łatwy sposób na ustawienie wartości domyślnych lub wykonanie pewnego rodzaju filtrowania pól Map i Collection , które w przeciwnym razie są dołączane tylko.

Integrator

Integrator działa w świecie Konfiguracji, które są pisane w formacie XML. Format konfiguracji umożliwia Integratorowi ustawienie (lub dodanie) wartości dla dowolnego pola @Option . Załóżmy na przykład, że Integrator chce zdefiniować test z mniejszym opóźnieniem, który wywołuje numer domyślny, a także test długotrwały, który wywołuje różne liczby. Mogą stworzyć parę konfiguracji, które mogą wyglądać następująco:

<?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>

Biegacz testowy

Osoba przeprowadzająca test ma również dostęp do tych punktów konfiguracyjnych za pośrednictwem konsoli Federacji Handlowej. Przede wszystkim uruchomią polecenie (to znaczy konfigurację i wszystkie jej argumenty) za pomocą instrukcji run command <name> (lub w skrócie run <name> ). Poza tym mogą określić dowolną listę argumentów stanowiącą część polecenia, która może zastąpić lub dołączyć pola określone przez obiekty cyklu życia w każdej konfiguracji.

Aby przeprowadzić test z małym opóźnieniem na numerach telefonów many-numbers , Osoba uruchamiająca test może wykonać:

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

Lub, aby uzyskać podobny efekt w przeciwnym kierunku, Osoba przeprowadzająca test może skrócić czas oczekiwania na test many-numbers :

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

Zamawianie opcji

Możesz zauważyć, że podstawową implementacją opcji call jest Map , więc po powtórzeniu --call w wierszu poleceń wszystkie zostaną zapisane.

Opcja timeout , która ma implementację long , może przechowywać tylko jedną wartość. Zatem zapisana zostanie tylko ostatnia określona wartość. --timeout 5 --timeout 10 spowoduje timeout zawierającego 10.

W przypadku implementacji opartej na List lub Collection , wszystkie wartości zostaną zapisane w kolejności określonej w wierszu poleceń.

Opcje logiczne

Opcje podstawowego typu logicznego można ustawić na true , bezpośrednio przekazując nazwę opcji, na przykład --[option-name] i można ustawić na false przy użyciu składni --no-[option-name] .

Zobacz też

Przekaż opcje do pakietu i modułów