Обработка опционов в Tradefed

Обработка параметров лежит в основе модульного подхода Trade Federation. В частности, параметры — это механизм, позволяющий разработчику, интегратору и тестовому движку работать вместе, не дублируя работу друг друга. Проще говоря, наша реализация обработки параметров позволяет разработчику пометить член Java-класса как настраиваемый, после чего значение этого члена может быть расширено или переопределено интегратором, а затем — расширено или переопределено тестовым движком. Этот механизм работает для всех встроенных типов Java, а также для любых экземпляров Map или Collection встроенных типов.

Примечание: Механизм обработки параметров работает только для классов, реализующих один из интерфейсов, включенных в жизненный цикл тестирования , и только в том случае, если этот класс создан с помощью механизма жизненного цикла.

Разработчик

Для начала разработчик помечает элемент аннотацией @Option . Они указывают (как минимум) значения name и description , которые определяют имя аргумента, связанного с этим параметром, а также описание, отображаемое в консоли TF при запуске команды с --help или --help-all .

В качестве примера предположим, что мы хотим создать функциональный тест телефона, который набирает различные телефонные номера и ожидает получить последовательность 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*#*#

Или, чтобы добиться аналогичного эффекта в обратном направлении, разработчик теста мог бы сократить время ожидания при прохождении теста many-numbers :

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

порядок выбора опций

Вы можете заметить, что в основе реализации лежит Map , поэтому при повторном call --call в командной строке все значения сохраняются.

Параметр timeout , имеющий в основе реализацию типа long , может хранить только одно значение. Поэтому сохраняется только последнее указанное значение. --timeout 5 --timeout 10 приводит к timeout равному 10.

В случае использования List или Collection в качестве базовой реализации, все значения сохраняются в порядке, указанном в командной строке.

Логические параметры

Параметры логического типа можно установить в true передав имя параметра напрямую, например, --[option-name] , и в значение false используя синтаксис --no-[option-name] .

См. также

Передайте параметры в пакет и модули.