Обработка опционов в 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>

Тестовый бегун

Test Runner также имеет доступ к этим точкам конфигурации через консоль Trade Federation. Прежде всего, они запустят команду (то есть конфигурацию и все ее аргументы) с помощью run command <name> (или для краткости run <name> ). Помимо этого, они могут указать любой список аргументов, являющийся частью команды, которая может заменять или добавлять поля, указанные объектами жизненного цикла в каждой конфигурации.

Чтобы запустить тест с малой задержкой для many-numbers телефонных номеров, Test Runner может выполнить:

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 будет содержать 10.

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

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

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

Смотрите также

Передача параметров в набор и модули