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

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

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