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