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

Обработка опционов лежит в основе модульного подхода Торговой федерации. В частности, параметры - это механизм, с помощью которого разработчик, интегратор и средство выполнения тестов могут работать вместе, не дублируя работу друг друга. Проще говоря, наша реализация обработки параметров позволяет разработчику пометить член класса 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 устанавливаются после создания экземпляра класса, но до @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

У 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 в качестве базовой реализации все значения будут сохранены в порядке, указанном в командной строке.

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

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

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

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