Obsługa opcji w Tradefed

Obsługa opcji jest podstawą modułowego podejścia Trade Federation. W szczególności opcje są mechanizmem, dzięki któremu programista, integrator i osoba przeprowadzająca testy mogą współpracować bez powielania swojej pracy. Mówiąc wprost, nasza implementacja obsługi opcji umożliwia deweloperowi oznaczenie elementu klasy Java jako konfigurowalnego. W tym momencie wartość tego elementu może zostać rozszerzona lub zastąpiona przez integratora, a następnie rozszerzona lub zastąpiona przez narzędzie do uruchamiania testów. Ten mechanizm działa w przypadku wszystkich typów wewnętrznych Javy, a także w przypadku wszystkich instancji typów wewnętrznych Map lub 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 klasa jest instancjonowana przez mechanizm cyklu życia.

Deweloper

Na początek deweloper oznacza element adnotacją @Option. Określają one (co najmniej) wartości namedescription, które określają nazwę argumentu powiązanego z daną opcją oraz opis wyświetlany w konsoli TF, gdy polecenie jest uruchamiane z użyciem --help lub --help-all.

Załóżmy, że chcemy utworzyć funkcjonalny test telefonu, który wybiera różne numery telefonów i oczekuje, że po połączeniu z każdym z nich otrzyma sekwencję tonów 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
    }

To wszystko, czego deweloper potrzebuje, aby skonfigurować 2 punkty konfiguracji tego testu. Mogą wtedy korzystać z mWaitTimemCalls w normalny sposób, nie zwracając uwagi na to, że można je konfigurować. Pola @Option są ustawiane po utworzeniu instancji klasy, ale przed wywołaniem metody run. Umożliwia to łatwe skonfigurowanie wartości domyślnych dla pól MapCollection lub przeprowadzenie na nich filtrowania. W innych przypadkach można tylko dodawać do nich wartości.

Producent

Integrator pracuje w środowisku konfiguracji, które są zapisywane w formacie XML. Format konfiguracji umożliwia integratorowi ustawienie (lub dołączenie) wartości dowolnego pola @Option. Załóżmy na przykład, że integrator chce zdefiniować test o krótszym czasie oczekiwania, który wywołuje domyślny numer, a także test długotrwały, który wywołuje różne numery. Mogą utworzyć parę konfiguracji, która może wyglądać tak:

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

Przebieg testowy

Test Runner ma też dostęp do tych punktów konfiguracji w konsoli Trade Federation. Przede wszystkim uruchamiają polecenie (czyli 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, które są częścią polecenia, i zastąpić lub dodać do pól określonych przez obiekty cyklu życia w każdej konfiguracji.

Aby uruchomić test o niskim opóźnieniu z numerami telefonów many-numbers, Test Runner może wykonać to działanie:

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

Aby uzyskać podobny efekt w przeciwnym kierunku, narzędzie Test Runner może skrócić czas oczekiwania na test many-numbers:

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

Kolejność opcji

Możesz zauważyć, że podstawową implementacją opcji call jest Map, więc po wielokrotnym użyciu --call w wierszu poleceń wszystkie są przechowywane.

Opcja timeout, która ma implementację bazową long, może przechowywać tylko jedną wartość. Zapisywana jest tylko ostatnia podana wartość. --timeout 5 --timeout 10 wyników w timeout zawierających liczbę 10.

W przypadku List lub Collection jako implementacji bazowej wszystkie wartości są przechowywane w kolejności określonej w wierszu poleceń.

Opcje logiczne

Opcje typu logicznego można ustawić na true, przekazując bezpośrednio nazwę opcji, np. --[option-name], a na false za pomocą składni --no-[option-name].

Zobacz też

Przekazywanie opcji do pakietu i modułów